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