SurfaceFlinger.h revision 99ce5cdeb383216dee95af4d90e47406b0948ea1
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License.
6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and
14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License.
15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_SURFACE_FLINGER_H
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_SURFACE_FLINGER_H
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h>
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h>
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
2399ed22412db547c59d3da08114d9d5a586442b30Glenn Kasten#include <cutils/compiler.h>
2499ed22412db547c59d3da08114d9d5a586442b30Glenn Kasten
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Atomic.h>
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h>
2799b49840d309727678b77403d6cc9f920111623fMathias Agopian#include <utils/KeyedVector.h>
28076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <utils/RefBase.h>
2999b49840d309727678b77403d6cc9f920111623fMathias Agopian#include <utils/SortedVector.h>
3099b49840d309727678b77403d6cc9f920111623fMathias Agopian#include <utils/threads.h>
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
32a1e6bc864fb821c1b470b7aad9b75c441f54eeb4Mathias Agopian#include <binder/BinderService.h>
3399b49840d309727678b77403d6cc9f920111623fMathias Agopian#include <binder/IMemory.h>
34375f56363a8737119ce2222dcfaacbe1cf733fc0Mathias Agopian
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h>
3699b49840d309727678b77403d6cc9f920111623fMathias Agopian#include <surfaceflinger/IGraphicBufferAlloc.h>
379cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#include <surfaceflinger/ISurfaceComposer.h>
387e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian#include <surfaceflinger/ISurfaceComposerClient.h>
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "Barrier.h"
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "Layer.h"
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
43f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian#include "MessageQueue.h"
44f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Client;
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass DisplayHardware;
51d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianclass DisplayEventConnection;
52d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianclass EventThread;
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Layer;
54b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopianclass LayerDim;
55118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopianclass LayerScreenshot;
56a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopianstruct surface_flinger_cblk_t;
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
6096f0819f81293076e652792794a961543e6750d7Mathias Agopianclass Client : public BnSurfaceComposerClient
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
6396f0819f81293076e652792794a961543e6750d7Mathias Agopian        Client(const sp<SurfaceFlinger>& flinger);
6496f0819f81293076e652792794a961543e6750d7Mathias Agopian        ~Client();
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
6696f0819f81293076e652792794a961543e6750d7Mathias Agopian    status_t initCheck() const;
6796f0819f81293076e652792794a961543e6750d7Mathias Agopian
6896f0819f81293076e652792794a961543e6750d7Mathias Agopian    // protected by SurfaceFlinger::mStateLock
694f113740180b6512b43723c4728f262882dc9b45Mathias Agopian    size_t attachLayer(const sp<LayerBaseClient>& layer);
70b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian    void detachLayer(const LayerBaseClient* layer);
7196f0819f81293076e652792794a961543e6750d7Mathias Agopian    sp<LayerBaseClient> getLayerUser(int32_t i) const;
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
7496f0819f81293076e652792794a961543e6750d7Mathias Agopian    // ISurfaceComposerClient interface
7596f0819f81293076e652792794a961543e6750d7Mathias Agopian    virtual sp<ISurface> createSurface(
760ef4e15a6c12778daf464a4953d7e15e651f49acMathias Agopian            surface_data_t* params, const String8& name,
7796f0819f81293076e652792794a961543e6750d7Mathias Agopian            DisplayID display, uint32_t w, uint32_t h,PixelFormat format,
7896f0819f81293076e652792794a961543e6750d7Mathias Agopian            uint32_t flags);
7996f0819f81293076e652792794a961543e6750d7Mathias Agopian    virtual status_t destroySurface(SurfaceID surfaceId);
80a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian    virtual status_t onTransact(
81a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian        uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags);
8296f0819f81293076e652792794a961543e6750d7Mathias Agopian
834f113740180b6512b43723c4728f262882dc9b45Mathias Agopian    // constant
84b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian    sp<SurfaceFlinger> mFlinger;
854f113740180b6512b43723c4728f262882dc9b45Mathias Agopian
864f113740180b6512b43723c4728f262882dc9b45Mathias Agopian    // protected by mLock
874f113740180b6512b43723c4728f262882dc9b45Mathias Agopian    DefaultKeyedVector< size_t, wp<LayerBaseClient> > mLayers;
884f113740180b6512b43723c4728f262882dc9b45Mathias Agopian    size_t mNameGenerator;
894f113740180b6512b43723c4728f262882dc9b45Mathias Agopian
904f113740180b6512b43723c4728f262882dc9b45Mathias Agopian    // thread-safe
914f113740180b6512b43723c4728f262882dc9b45Mathias Agopian    mutable Mutex mLock;
92b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian};
93b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian
949a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennisclass GraphicBufferAlloc : public BnGraphicBufferAlloc
959a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis{
969a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennispublic:
979a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis    GraphicBufferAlloc();
989a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis    virtual ~GraphicBufferAlloc();
999a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis    virtual sp<GraphicBuffer> createGraphicBuffer(uint32_t w, uint32_t h,
100d9e8c64c3dce1612eb948a5c16ba4ff62202b423Mathias Agopian        PixelFormat format, uint32_t usage, status_t* error);
1019a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis};
1029a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass GraphicPlane
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    static status_t orientationToTransfrom(int orientation, int w, int h,
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Transform* tr);
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                GraphicPlane();
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                ~GraphicPlane();
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        bool                    initialized() const;
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        void                    setDisplayHardware(DisplayHardware *);
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        status_t                setOrientation(int orientation);
1180d1318b974feba2e6ff13e36a1781343c2fce045Mathias Agopian        int                     getOrientation() const { return mOrientation; }
1192b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian        int                     getWidth() const;
1202b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian        int                     getHeight() const;
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        const DisplayHardware&  displayHardware() const;
12359119e658a12279e8fff508f8773843de2d90917Mathias Agopian        DisplayHardware&        editDisplayHardware();
124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        const Transform&        transform() const;
125076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian        EGLDisplay              getEGLDisplay() const;
126076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian
127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                GraphicPlane(const GraphicPlane&);
129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        GraphicPlane            operator = (const GraphicPlane&);
130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        DisplayHardware*        mHw;
132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        Transform               mGlobalTransform;
1332b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian        Transform               mDisplayTransform;
1340d1318b974feba2e6ff13e36a1781343c2fce045Mathias Agopian        int                     mOrientation;
1352b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian        float                   mDisplayWidth;
1362b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian        float                   mDisplayHeight;
1372b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian        int                     mWidth;
1382b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian        int                     mHeight;
139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectenum {
144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    eTransactionNeeded      = 0x01,
145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    eTraversalNeeded        = 0x02
146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
148a1e6bc864fb821c1b470b7aad9b75c441f54eeb4Mathias Agopianclass SurfaceFlinger :
149a1e6bc864fb821c1b470b7aad9b75c441f54eeb4Mathias Agopian        public BinderService<SurfaceFlinger>,
150a1e6bc864fb821c1b470b7aad9b75c441f54eeb4Mathias Agopian        public BnSurfaceComposer,
1511f339ff3875afad128a8e16ee6395c5fad295826Mathias Agopian        public IBinder::DeathRecipient,
152a1e6bc864fb821c1b470b7aad9b75c441f54eeb4Mathias Agopian        protected Thread
153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
155a1e6bc864fb821c1b470b7aad9b75c441f54eeb4Mathias Agopian    static char const* getServiceName() { return "SurfaceFlinger"; }
156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                    SurfaceFlinger();
158edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual         ~SurfaceFlinger();
159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void    init();
160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t onTransact(
162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags);
163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t dump(int fd, const Vector<String16>& args);
165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // ISurfaceComposer interface
1677e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian    virtual sp<ISurfaceComposerClient>  createConnection();
1689a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis    virtual sp<IGraphicBufferAlloc>     createGraphicBufferAlloc();
1697303c6bf1a8b00a0e7d8165d774a1f259b4ccda9Mathias Agopian    virtual sp<IMemoryHeap>             getCblk() const;
170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void                        bootFinished();
171b8d69a55f1c187a35ac41e69de63251f5501b6f4Jamie Gennis    virtual void                        setTransactionState(const Vector<ComposerState>& state,
17228378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis                                                            int orientation, uint32_t flags);
173582270d69db94286a248bd829f1ae6f910d45124Jamie Gennis    virtual bool                        authenticateSurfaceTexture(const sp<ISurfaceTexture>& surface) const;
174d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian    virtual sp<IDisplayEventConnection> createDisplayEventConnection();
175bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian
176bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian    virtual status_t captureScreen(DisplayID dpy,
177bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian            sp<IMemoryHeap>* heap,
178bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian            uint32_t* width, uint32_t* height,
179bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian            PixelFormat* format, uint32_t reqWidth, uint32_t reqHeight,
180bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian            uint32_t minLayerZ, uint32_t maxLayerZ);
181bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian
18259119e658a12279e8fff508f8773843de2d90917Mathias Agopian    virtual status_t                    turnElectronBeamOff(int32_t mode);
1839daa5c9b9dd286cbbf5d43f7e45a5e9e4048e855Mathias Agopian    virtual status_t                    turnElectronBeamOn(int32_t mode);
184edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
185edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                        screenReleased(DisplayID dpy);
186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                        screenAcquired(DisplayID dpy);
187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
188118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian            status_t renderScreenToTexture(DisplayID dpy,
189118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian                    GLuint* textureName, GLfloat* uOut, GLfloat* vOut);
1904a9ac37fe26644bb5253d15eec08be2edb896642Mathias Agopian            status_t renderScreenToTextureLocked(DisplayID dpy,
1914a9ac37fe26644bb5253d15eec08be2edb896642Mathias Agopian                    GLuint* textureName, GLfloat* uOut, GLfloat* vOut);
192118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian
19399ce5cdeb383216dee95af4d90e47406b0948ea1Mathias Agopian            void onMessageReceived(int32_t what);
19499ce5cdeb383216dee95af4d90e47406b0948ea1Mathias Agopian
195118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian            status_t postMessageAsync(const sp<MessageBase>& msg,
196118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian                    nsecs_t reltime=0, uint32_t flags = 0);
197118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian
198118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian            status_t postMessageSync(const sp<MessageBase>& msg,
199118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian                    nsecs_t reltime=0, uint32_t flags = 0);
200118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian
201076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian    status_t removeLayer(const sp<LayerBase>& layer);
202076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian    status_t addLayer(const sp<LayerBase>& layer);
203076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian    status_t invalidateLayerVisibility(const sp<LayerBase>& layer);
204ad456f9878ff7c176499e7b992f9ff1cb3e9cdeeMathias Agopian    void invalidateHwcGeometry();
205b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian
206b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian    sp<Layer> getLayer(const sp<ISurface>& sur) const;
207b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian
2089575f60722f7a4f54384fe0be6938a8de48dc23aJamie Gennis    GLuint getProtectedTexName() const { return mProtectedTexName; }
2099575f60722f7a4f54384fe0be6938a8de48dc23aJamie Gennis
210118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian
211118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian    class MessageDestroyGLTexture : public MessageBase {
212118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian        GLuint texture;
213118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian    public:
214118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian        MessageDestroyGLTexture(GLuint texture) : texture(texture) { }
215118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian        virtual bool handler() {
216118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian            glDeleteTextures(1, &texture);
217118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian            return true;
218118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian        }
219118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian    };
220118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian
221118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian
222edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
2231f339ff3875afad128a8e16ee6395c5fad295826Mathias Agopian    // DeathRecipient interface
2241f339ff3875afad128a8e16ee6395c5fad295826Mathias Agopian    virtual void binderDied(const wp<IBinder>& who);
2251f339ff3875afad128a8e16ee6395c5fad295826Mathias Agopian
2261f339ff3875afad128a8e16ee6395c5fad295826Mathias Agopianprivate:
22796f0819f81293076e652792794a961543e6750d7Mathias Agopian    friend class Client;
228d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian    friend class DisplayEventConnection;
229edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    friend class LayerBase;
230edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    friend class LayerBaseClient;
231edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    friend class Layer;
232edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
2330ef4e15a6c12778daf464a4953d7e15e651f49acMathias Agopian    sp<ISurface> createSurface(
2347e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian            ISurfaceComposerClient::surface_data_t* params,
2350ef4e15a6c12778daf464a4953d7e15e651f49acMathias Agopian            const String8& name,
2360ef4e15a6c12778daf464a4953d7e15e651f49acMathias Agopian            const sp<Client>& client,
237edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            DisplayID display, uint32_t w, uint32_t h, PixelFormat format,
238edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            uint32_t flags);
239edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
240b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian    sp<Layer> createNormalSurface(
241f9d932774e06d5122c48b47d8cabd791783f56d2Mathias Agopian            const sp<Client>& client, DisplayID display,
24296f0819f81293076e652792794a961543e6750d7Mathias Agopian            uint32_t w, uint32_t h, uint32_t flags,
2431c97d2ebe1f035beabd90089bfc78326b73d7864Mathias Agopian            PixelFormat& format);
244edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
245b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian    sp<LayerDim> createDimSurface(
246f9d932774e06d5122c48b47d8cabd791783f56d2Mathias Agopian            const sp<Client>& client, DisplayID display,
24796f0819f81293076e652792794a961543e6750d7Mathias Agopian            uint32_t w, uint32_t h, uint32_t flags);
248edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
249118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian    sp<LayerScreenshot> createScreenshotSurface(
250118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian            const sp<Client>& client, DisplayID display,
251118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian            uint32_t w, uint32_t h, uint32_t flags);
252118d0245ee0a3b107055782aa8b555404b6f0280Mathias Agopian
25396f0819f81293076e652792794a961543e6750d7Mathias Agopian    status_t removeSurface(const sp<Client>& client, SurfaceID sid);
254ca4d3602c07837d0b2ac6878685a8e327b5f30f0Mathias Agopian    status_t destroySurface(const wp<LayerBaseClient>& layer);
255698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian    uint32_t setClientStateLocked(const sp<Client>& client, const layer_state_t& s);
256edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
257f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian    class LayerVector : public SortedVector< sp<LayerBase> > {
258edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    public:
259f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian        LayerVector() { }
260f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian        LayerVector(const LayerVector& rhs) : SortedVector< sp<LayerBase> >(rhs) { }
261f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian        virtual int do_compare(const void* lhs, const void* rhs) const {
262f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian            const sp<LayerBase>& l(*reinterpret_cast<const sp<LayerBase>*>(lhs));
263f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian            const sp<LayerBase>& r(*reinterpret_cast<const sp<LayerBase>*>(rhs));
264f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian            // sort layers by Z order
265f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian            uint32_t lz = l->currentState().z;
266f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian            uint32_t rz = r->currentState().z;
267f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian            // then by sequence, so we get a stable ordering
268f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian            return (lz != rz) ? (lz - rz) : (l->sequence - r->sequence);
269f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian        }
270edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    };
271edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
272edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    struct State {
273edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        State() {
274edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            orientation = ISurfaceComposer::eOrientationDefault;
275edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        }
276edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        LayerVector     layersSortedByZ;
277edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        uint8_t         orientation;
27821230c6410bdab13cd2bd274da54b1e4061b6035Jeff Brown        uint8_t         orientationFlags;
279edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    };
280edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
281edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual bool        threadLoop();
282edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t    readyToRun();
283edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void        onFirstRef();
284edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
285550a11455a5155b078085fd5f464d7f3e5dfb7fcAndy McFaddenpublic:     // hack to work around gcc 4.0.3 bug
286edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    const GraphicPlane&     graphicPlane(int dpy) const;
287edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project          GraphicPlane&     graphicPlane(int dpy);
28899ce5cdeb383216dee95af4d90e47406b0948ea1Mathias Agopian
28999ce5cdeb383216dee95af4d90e47406b0948ea1Mathias Agopian          void              signalTransaction();
29099ce5cdeb383216dee95af4d90e47406b0948ea1Mathias Agopian          void              signalLayerUpdate();
29199ce5cdeb383216dee95af4d90e47406b0948ea1Mathias Agopian          void              signalRefresh();
292e2c2f9213f936f98db604dc9c126ff22f725a824Mathias Agopian          void              repaintEverything();
293edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
2942944a2b3601ae5847cf54b3130dcf653a7b24b8aAndy McFaddenprivate:
295e2c2f9213f936f98db604dc9c126ff22f725a824Mathias Agopian            void        waitForEvent();
296edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        handleConsoleEvents();
297edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        handleTransaction(uint32_t transactionFlags);
298ca4d3602c07837d0b2ac6878685a8e327b5f30f0Mathias Agopian            void        handleTransactionLocked(uint32_t transactionFlags);
299edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
300edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        computeVisibleRegions(
3011bbafb96101de04c43adb5e3ca2494070d20a46aMathias Agopian                            const LayerVector& currentLayers,
302edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                            Region& dirtyRegion,
303edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                            Region& wormholeRegion);
304edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
305edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        handlePageFlip();
306edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            bool        lockPageFlip(const LayerVector& currentLayers);
307edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        unlockPageFlip(const LayerVector& currentLayers);
30899ce5cdeb383216dee95af4d90e47406b0948ea1Mathias Agopian            void        handleRefresh();
309a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian            void        handleWorkList();
310edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        handleRepaint();
311edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        postFramebuffer();
3129c6e297271ec9af9d974242d89cfa08cb6ceaa0aMathias Agopian            void        setupHardwareComposer(Region& dirtyInOut);
313edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        composeSurfaces(const Region& dirty);
314edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
315edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
3160dfb7b73a468698622d6c0423f0d5471a6f5d375Mathias Agopian            void        setInvalidateRegion(const Region& reg);
3170dfb7b73a468698622d6c0423f0d5471a6f5d375Mathias Agopian            Region      getAndClearInvalidateRegion();
3180dfb7b73a468698622d6c0423f0d5471a6f5d375Mathias Agopian
31996f0819f81293076e652792794a961543e6750d7Mathias Agopian            ssize_t     addClientLayer(const sp<Client>& client,
32096f0819f81293076e652792794a961543e6750d7Mathias Agopian                    const sp<LayerBaseClient>& lbc);
321076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian            status_t    addLayer_l(const sp<LayerBase>& layer);
322076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian            status_t    removeLayer_l(const sp<LayerBase>& layer);
3239a11206fe793363c0e8897b478cbe6ef8c52b543Mathias Agopian            status_t    purgatorizeLayer_l(const sp<LayerBase>& layer);
324edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
325edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            uint32_t    getTransactionFlags(uint32_t flags);
326dea20b1f343012d58ca9eb381684b26a168dc127Mathias Agopian            uint32_t    peekTransactionFlags(uint32_t flags);
327bb641244d7d73312dc65b8e338df18b22e335107Mathias Agopian            uint32_t    setTransactionFlags(uint32_t flags);
328edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        commitTransaction();
329edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
330edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
33174c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian            status_t captureScreenImplLocked(DisplayID dpy,
33274c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian                    sp<IMemoryHeap>* heap,
33374c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian                    uint32_t* width, uint32_t* height, PixelFormat* format,
334bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian                    uint32_t reqWidth, uint32_t reqHeight,
335bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian                    uint32_t minLayerZ, uint32_t maxLayerZ);
33674c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian
337abd671a08a41519a7ab3d438a500efe0ef0bfc1dMathias Agopian            status_t turnElectronBeamOffImplLocked(int32_t mode);
338abd671a08a41519a7ab3d438a500efe0ef0bfc1dMathias Agopian            status_t turnElectronBeamOnImplLocked(int32_t mode);
3399daa5c9b9dd286cbbf5d43f7e45a5e9e4048e855Mathias Agopian            status_t electronBeamOffAnimationImplLocked();
3409daa5c9b9dd286cbbf5d43f7e45a5e9e4048e855Mathias Agopian            status_t electronBeamOnAnimationImplLocked();
34159119e658a12279e8fff508f8773843de2d90917Mathias Agopian
342edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        debugFlashRegions();
343edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        drawWormhole() const;
344edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
34525e66fc324bbc004fa8902b2d4699e41bb601104Mathias Agopian            void listLayersLocked(const Vector<String16>& args, size_t& index,
34625e66fc324bbc004fa8902b2d4699e41bb601104Mathias Agopian                    String8& result, char* buffer, size_t SIZE) const;
34782d7ab6c7e0cf971e515134ccf072682dd1a2cdbMathias Agopian            void dumpStatsLocked(const Vector<String16>& args, size_t& index,
34882d7ab6c7e0cf971e515134ccf072682dd1a2cdbMathias Agopian                    String8& result, char* buffer, size_t SIZE) const;
34925e66fc324bbc004fa8902b2d4699e41bb601104Mathias Agopian            void clearStatsLocked(const Vector<String16>& args, size_t& index,
35025e66fc324bbc004fa8902b2d4699e41bb601104Mathias Agopian                    String8& result, char* buffer, size_t SIZE) const;
35182d7ab6c7e0cf971e515134ccf072682dd1a2cdbMathias Agopian            void dumpAllLocked(String8& result, char* buffer, size_t SIZE) const;
352f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian
353f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian    mutable     MessageQueue    mEventQueue;
354bb641244d7d73312dc65b8e338df18b22e335107Mathias Agopian
355edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                // access must be protected by mStateLock
356edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mutable     Mutex                   mStateLock;
357edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                State                   mCurrentState;
358edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    volatile    int32_t                 mTransactionFlags;
359edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                Condition               mTransactionCV;
36076cd4ddc6ad664257739b3d3713fd9ebdc9a4ad9Mathias Agopian                SortedVector< sp<LayerBase> > mLayerPurgatory;
36128378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis                bool                    mTransationPending;
3622f4b68d21c1a58cbcb1e6929fb241e425a8f7b5dJesse Hall                Vector< sp<LayerBase> > mLayersPendingRemoval;
36396f0819f81293076e652792794a961543e6750d7Mathias Agopian
364edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                // protected by mStateLock (but we could use another lock)
36596f0819f81293076e652792794a961543e6750d7Mathias Agopian                GraphicPlane                mGraphicPlanes[1];
36696f0819f81293076e652792794a961543e6750d7Mathias Agopian                bool                        mLayersRemoved;
367b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian                DefaultKeyedVector< wp<IBinder>, wp<Layer> > mLayerMap;
368edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
3690dfb7b73a468698622d6c0423f0d5471a6f5d375Mathias Agopian                // access must be protected by mInvalidateLock
3700dfb7b73a468698622d6c0423f0d5471a6f5d375Mathias Agopian    mutable     Mutex                       mInvalidateLock;
3710dfb7b73a468698622d6c0423f0d5471a6f5d375Mathias Agopian                Region                      mInvalidateRegion;
3720dfb7b73a468698622d6c0423f0d5471a6f5d375Mathias Agopian
373edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                // constant members (no synchronization needed for access)
3747303c6bf1a8b00a0e7d8165d774a1f259b4ccda9Mathias Agopian                sp<IMemoryHeap>             mServerHeap;
375edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                surface_flinger_cblk_t*     mServerCblk;
376edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                GLuint                      mWormholeTexName;
3779575f60722f7a4f54384fe0be6938a8de48dc23aJamie Gennis                GLuint                      mProtectedTexName;
378edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                nsecs_t                     mBootTime;
379d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian                sp<EventThread>             mEventThread;
38099b49840d309727678b77403d6cc9f920111623fMathias Agopian
381edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                // Can only accessed from the main thread, these members
382edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                // don't need synchronization
3831bbafb96101de04c43adb5e3ca2494070d20a46aMathias Agopian                State                       mDrawingState;
384edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                Region                      mDirtyRegion;
385970112231e887c8a14441ec4fed55342e019fc8cMathias Agopian                Region                      mDirtyRegionRemovedLayer;
3860656a68380d01de4136933901b2c322cf9ab0d7eMathias Agopian                Region                      mSwapRegion;
387edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                Region                      mWormholeRegion;
388edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                bool                        mVisibleRegionsDirty;
389a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian                bool                        mHwWorkListDirty;
390abd671a08a41519a7ab3d438a500efe0ef0bfc1dMathias Agopian                int32_t                     mElectronBeamAnimationMode;
3914da751999358fffa4cefc4c8046dab72045925f6Mathias Agopian                Vector< sp<LayerBase> >     mVisibleLayersSortedByZ;
3924da751999358fffa4cefc4c8046dab72045925f6Mathias Agopian
393edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
394edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                // don't use a lock for these, we don't care
395edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                int                         mDebugRegion;
396edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                int                         mDebugBackground;
3978afb7e39a83a3e31170612d562eb08508e328388Mathias Agopian                int                         mDebugDDMS;
39873d3ba9e50be1014aa21ec4bbdc874be394accb4Mathias Agopian                int                         mDebugDisableHWC;
399a45836466c301d49d8df286b5317dfa99cb83b70Mathias Agopian                int                         mDebugDisableTransformHint;
4009795c42e557cfa37b9fd353ef7a2a7977a77f504Mathias Agopian                volatile nsecs_t            mDebugInSwapBuffers;
4019795c42e557cfa37b9fd353ef7a2a7977a77f504Mathias Agopian                nsecs_t                     mLastSwapBufferTime;
4029795c42e557cfa37b9fd353ef7a2a7977a77f504Mathias Agopian                volatile nsecs_t            mDebugInTransaction;
4039795c42e557cfa37b9fd353ef7a2a7977a77f504Mathias Agopian                nsecs_t                     mLastTransactionTime;
4043330b203039dea366d4981db1408a460134b2d2cMathias Agopian                bool                        mBootFinished;
405edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
406edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                // these are thread safe
407edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mutable     Barrier                     mReadyToRunBarrier;
408edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
409ca4d3602c07837d0b2ac6878685a8e327b5f30f0Mathias Agopian
410ca4d3602c07837d0b2ac6878685a8e327b5f30f0Mathias Agopian                // protected by mDestroyedLayerLock;
411ca4d3602c07837d0b2ac6878685a8e327b5f30f0Mathias Agopian    mutable     Mutex                       mDestroyedLayerLock;
412ca4d3602c07837d0b2ac6878685a8e327b5f30f0Mathias Agopian                Vector<LayerBase const *>   mDestroyedLayers;
413ca4d3602c07837d0b2ac6878685a8e327b5f30f0Mathias Agopian
414edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                // atomic variables
415edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                enum {
416edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                    eConsoleReleased = 1,
417edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                    eConsoleAcquired = 2
418edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                };
419edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project   volatile     int32_t                     mConsoleSignals;
420edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
421edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project   // only written in the main thread, only read in other threads
422edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project   volatile     int32_t                     mSecureFrameBuffer;
423edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
424edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
425edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
426edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
427edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
428edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_SURFACE_FLINGER_H
429