RenderThread.h revision cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fc
1cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck/*
2cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * Copyright (C) 2013 The Android Open Source Project
3cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck *
4cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * Licensed under the Apache License, Version 2.0 (the "License");
5cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * you may not use this file except in compliance with the License.
6cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * You may obtain a copy of the License at
7cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck *
8cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck *      http://www.apache.org/licenses/LICENSE-2.0
9cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck *
10cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * Unless required by applicable law or agreed to in writing, software
11cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * distributed under the License is distributed on an "AS IS" BASIS,
12cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * See the License for the specific language governing permissions and
14cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * limitations under the License.
15cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck */
16cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck
17cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#ifndef RENDERTHREAD_H_
18cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#define RENDERTHREAD_H_
19cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck
20cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#include "RenderTask.h"
21cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#include <cutils/compiler.h>
22cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#include <utils/Looper.h>
23cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#include <utils/Mutex.h>
24cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#include <utils/Singleton.h>
25cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#include <utils/Thread.h>
26cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck
27cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Recknamespace android {
28cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Recknamespace uirenderer {
29cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Recknamespace renderthread {
30cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck
31cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckclass ANDROID_API RenderThread : public Thread, public Singleton<RenderThread> {
32cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckpublic:
33cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck    // RenderThread takes complete ownership of tasks that are queued
34cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck    // and will delete them after they are run
35cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck    ANDROID_API void queue(RenderTask* task);
36cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck
37cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckprotected:
38cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck    virtual bool threadLoop();
39cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck
40cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckprivate:
41cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck    friend class Singleton<RenderThread>;
42cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck
43cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck    RenderThread();
44cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck    virtual ~RenderThread();
45cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck
46cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck    RenderTask* nextTask();
47cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck
48cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck    sp<Looper> mLooper;
49cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck    Mutex mLock;
50cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck
51cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck    RenderTask* mQueueHead;
52cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck    RenderTask* mQueueTail;
53cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck};
54cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck
55cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck} /* namespace renderthread */
56cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck} /* namespace uirenderer */
57cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck} /* namespace android */
58cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#endif /* RENDERTHREAD_H_ */
59