10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/* 20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2011 The Android Open Source Project 30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License. 60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at 70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software 110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and 140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License. 150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */ 160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#ifndef ANDROID_RS_FIFO_H 180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define ANDROID_RS_FIFO_H 190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsUtils.h" 220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace android { 240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace renderscript { 250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// A simple FIFO to be used as a producer / consumer between two 280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// threads. One is writer and one is reader. The common cases 290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// will not require locking. It is not threadsafe for multiple 300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// readers or writers by design. 310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Fifo { 330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesprotected: 340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Fifo(); 350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines virtual ~Fifo(); 360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinespublic: 380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool virtual writeAsync(const void *data, size_t bytes, bool waitForSpace = true) = 0; 390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void virtual writeWaitReturn(void *ret, size_t retSize) = 0; 400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t virtual read(void *data, size_t bytes, bool doWait = true, uint64_t timeToWait = 0) = 0; 410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void virtual readReturn(const void *data, size_t bytes) = 0; 420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void virtual flush() = 0; 440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}; 460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif 50