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