rsFifoSocket.cpp revision af12ac6a08651464f8d823add667c706f993b587
12008747941749ad27fe80663d23036ac320e998fJason Sams/* 22008747941749ad27fe80663d23036ac320e998fJason Sams * Copyright (C) 2011 The Android Open Source Project 32008747941749ad27fe80663d23036ac320e998fJason Sams * 42008747941749ad27fe80663d23036ac320e998fJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 52008747941749ad27fe80663d23036ac320e998fJason Sams * you may not use this file except in compliance with the License. 62008747941749ad27fe80663d23036ac320e998fJason Sams * You may obtain a copy of the License at 72008747941749ad27fe80663d23036ac320e998fJason Sams * 82008747941749ad27fe80663d23036ac320e998fJason Sams * http://www.apache.org/licenses/LICENSE-2.0 92008747941749ad27fe80663d23036ac320e998fJason Sams * 102008747941749ad27fe80663d23036ac320e998fJason Sams * Unless required by applicable law or agreed to in writing, software 112008747941749ad27fe80663d23036ac320e998fJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 122008747941749ad27fe80663d23036ac320e998fJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132008747941749ad27fe80663d23036ac320e998fJason Sams * See the License for the specific language governing permissions and 142008747941749ad27fe80663d23036ac320e998fJason Sams * limitations under the License. 152008747941749ad27fe80663d23036ac320e998fJason Sams */ 162008747941749ad27fe80663d23036ac320e998fJason Sams 172008747941749ad27fe80663d23036ac320e998fJason Sams#include "rsFifoSocket.h" 182008747941749ad27fe80663d23036ac320e998fJason Sams#include "utils/Timers.h" 192008747941749ad27fe80663d23036ac320e998fJason Sams#include "utils/StopWatch.h" 202008747941749ad27fe80663d23036ac320e998fJason Sams 212008747941749ad27fe80663d23036ac320e998fJason Sams#include <stdio.h> 222008747941749ad27fe80663d23036ac320e998fJason Sams#include <stdlib.h> 232008747941749ad27fe80663d23036ac320e998fJason Sams#include <ctype.h> 242008747941749ad27fe80663d23036ac320e998fJason Sams#include <unistd.h> 252008747941749ad27fe80663d23036ac320e998fJason Sams#include <sys/types.h> 262008747941749ad27fe80663d23036ac320e998fJason Sams#include <sys/socket.h> 272008747941749ad27fe80663d23036ac320e998fJason Sams 282008747941749ad27fe80663d23036ac320e998fJason Samsusing namespace android; 292008747941749ad27fe80663d23036ac320e998fJason Samsusing namespace android::renderscript; 302008747941749ad27fe80663d23036ac320e998fJason Sams 312008747941749ad27fe80663d23036ac320e998fJason SamsFifoSocket::FifoSocket() { 322008747941749ad27fe80663d23036ac320e998fJason Sams sequence = 1; 332008747941749ad27fe80663d23036ac320e998fJason Sams} 342008747941749ad27fe80663d23036ac320e998fJason Sams 352008747941749ad27fe80663d23036ac320e998fJason SamsFifoSocket::~FifoSocket() { 362008747941749ad27fe80663d23036ac320e998fJason Sams 372008747941749ad27fe80663d23036ac320e998fJason Sams} 382008747941749ad27fe80663d23036ac320e998fJason Sams 392008747941749ad27fe80663d23036ac320e998fJason Samsbool FifoSocket::init() { 402008747941749ad27fe80663d23036ac320e998fJason Sams int ret = socketpair(AF_UNIX, SOCK_STREAM, 0, sv); 412008747941749ad27fe80663d23036ac320e998fJason Sams return false; 422008747941749ad27fe80663d23036ac320e998fJason Sams} 432008747941749ad27fe80663d23036ac320e998fJason Sams 442008747941749ad27fe80663d23036ac320e998fJason Samsvoid FifoSocket::shutdown() { 452008747941749ad27fe80663d23036ac320e998fJason Sams} 462008747941749ad27fe80663d23036ac320e998fJason Sams 472008747941749ad27fe80663d23036ac320e998fJason Samsvoid FifoSocket::writeAsync(const void *data, size_t bytes) { 481a4efa363916977ef9aeab756725b3bdc880a15bJason Sams if (bytes == 0) { 491a4efa363916977ef9aeab756725b3bdc880a15bJason Sams return; 501a4efa363916977ef9aeab756725b3bdc880a15bJason Sams } 51af12ac6a08651464f8d823add667c706f993b587Steve Block //ALOGE("writeAsync %p %i", data, bytes); 521a4efa363916977ef9aeab756725b3bdc880a15bJason Sams size_t ret = ::send(sv[0], data, bytes, 0); 53af12ac6a08651464f8d823add667c706f993b587Steve Block //ALOGE("writeAsync ret %i", ret); 542008747941749ad27fe80663d23036ac320e998fJason Sams rsAssert(ret == bytes); 552008747941749ad27fe80663d23036ac320e998fJason Sams} 562008747941749ad27fe80663d23036ac320e998fJason Sams 572008747941749ad27fe80663d23036ac320e998fJason Samsvoid FifoSocket::writeWaitReturn(void *retData, size_t retBytes) { 58af12ac6a08651464f8d823add667c706f993b587Steve Block //ALOGE("writeWaitReturn %p %i", retData, retBytes); 591a4efa363916977ef9aeab756725b3bdc880a15bJason Sams size_t ret = ::recv(sv[0], retData, retBytes, 0); 60af12ac6a08651464f8d823add667c706f993b587Steve Block //ALOGE("writeWaitReturn %i", ret); 612008747941749ad27fe80663d23036ac320e998fJason Sams rsAssert(ret == retBytes); 622008747941749ad27fe80663d23036ac320e998fJason Sams} 632008747941749ad27fe80663d23036ac320e998fJason Sams 642008747941749ad27fe80663d23036ac320e998fJason Samssize_t FifoSocket::read(void *data, size_t bytes) { 65af12ac6a08651464f8d823add667c706f993b587Steve Block //ALOGE("read %p %i", data, bytes); 661a4efa363916977ef9aeab756725b3bdc880a15bJason Sams size_t ret = ::recv(sv[1], data, bytes, 0); 672008747941749ad27fe80663d23036ac320e998fJason Sams rsAssert(ret == bytes); 68af12ac6a08651464f8d823add667c706f993b587Steve Block //ALOGE("read ret %i", ret); 692008747941749ad27fe80663d23036ac320e998fJason Sams return ret; 702008747941749ad27fe80663d23036ac320e998fJason Sams} 712008747941749ad27fe80663d23036ac320e998fJason Sams 722008747941749ad27fe80663d23036ac320e998fJason Samsvoid FifoSocket::readReturn(const void *data, size_t bytes) { 73af12ac6a08651464f8d823add667c706f993b587Steve Block ALOGE("readReturn %p %Zu", data, bytes); 741a4efa363916977ef9aeab756725b3bdc880a15bJason Sams size_t ret = ::send(sv[1], data, bytes, 0); 75af12ac6a08651464f8d823add667c706f993b587Steve Block ALOGE("readReturn %Zu", ret); 762008747941749ad27fe80663d23036ac320e998fJason Sams rsAssert(ret == bytes); 772008747941749ad27fe80663d23036ac320e998fJason Sams} 782008747941749ad27fe80663d23036ac320e998fJason Sams 792008747941749ad27fe80663d23036ac320e998fJason Sams 802008747941749ad27fe80663d23036ac320e998fJason Samsvoid FifoSocket::flush() { 812008747941749ad27fe80663d23036ac320e998fJason Sams} 822008747941749ad27fe80663d23036ac320e998fJason Sams 832008747941749ad27fe80663d23036ac320e998fJason Sams 84