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#ifndef ANDROID_RS_FIFO_H 182008747941749ad27fe80663d23036ac320e998fJason Sams#define ANDROID_RS_FIFO_H 192008747941749ad27fe80663d23036ac320e998fJason Sams 202008747941749ad27fe80663d23036ac320e998fJason Sams 212008747941749ad27fe80663d23036ac320e998fJason Sams#include "rsUtils.h" 222008747941749ad27fe80663d23036ac320e998fJason Sams 232008747941749ad27fe80663d23036ac320e998fJason Samsnamespace android { 242008747941749ad27fe80663d23036ac320e998fJason Samsnamespace renderscript { 252008747941749ad27fe80663d23036ac320e998fJason Sams 262008747941749ad27fe80663d23036ac320e998fJason Sams 272008747941749ad27fe80663d23036ac320e998fJason Sams// A simple FIFO to be used as a producer / consumer between two 282008747941749ad27fe80663d23036ac320e998fJason Sams// threads. One is writer and one is reader. The common cases 292008747941749ad27fe80663d23036ac320e998fJason Sams// will not require locking. It is not threadsafe for multiple 302008747941749ad27fe80663d23036ac320e998fJason Sams// readers or writers by design. 312008747941749ad27fe80663d23036ac320e998fJason Sams 322008747941749ad27fe80663d23036ac320e998fJason Samsclass Fifo { 332008747941749ad27fe80663d23036ac320e998fJason Samsprotected: 342008747941749ad27fe80663d23036ac320e998fJason Sams Fifo(); 352008747941749ad27fe80663d23036ac320e998fJason Sams virtual ~Fifo(); 362008747941749ad27fe80663d23036ac320e998fJason Sams 372008747941749ad27fe80663d23036ac320e998fJason Samspublic: 385f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams bool virtual writeAsync(const void *data, size_t bytes, bool waitForSpace = true) = 0; 392008747941749ad27fe80663d23036ac320e998fJason Sams void virtual writeWaitReturn(void *ret, size_t retSize) = 0; 405f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams size_t virtual read(void *data, size_t bytes, bool doWait = true, uint64_t timeToWait = 0) = 0; 412008747941749ad27fe80663d23036ac320e998fJason Sams void virtual readReturn(const void *data, size_t bytes) = 0; 422008747941749ad27fe80663d23036ac320e998fJason Sams 432008747941749ad27fe80663d23036ac320e998fJason Sams void virtual flush() = 0; 442008747941749ad27fe80663d23036ac320e998fJason Sams 452008747941749ad27fe80663d23036ac320e998fJason Sams}; 462008747941749ad27fe80663d23036ac320e998fJason Sams 477974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace renderscript 487974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace android 492008747941749ad27fe80663d23036ac320e998fJason Sams#endif 50