SurfaceFlinger.h revision 4f113740180b6512b43723c4728f262882dc9b45
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 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/SortedVector.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/KeyedVector.h> 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/threads.h> 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Atomic.h> 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h> 28076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <utils/RefBase.h> 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 307303c6bf1a8b00a0e7d8165d774a1f259b4ccda9Mathias Agopian#include <binder/IMemory.h> 31375f56363a8737119ce2222dcfaacbe1cf733fc0Mathias Agopian#include <binder/Permission.h> 32a1e6bc864fb821c1b470b7aad9b75c441f54eeb4Mathias Agopian#include <binder/BinderService.h> 33375f56363a8737119ce2222dcfaacbe1cf733fc0Mathias Agopian 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h> 359cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#include <surfaceflinger/ISurfaceComposer.h> 367e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian#include <surfaceflinger/ISurfaceComposerClient.h> 379a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis#include <surfaceflinger/IGraphicBufferAlloc.h> 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "Barrier.h" 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "Layer.h" 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 42f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian#include "MessageQueue.h" 43f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Client; 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass DisplayHardware; 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass FreezeLock; 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Layer; 52b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopianclass LayerDim; 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 5996f0819f81293076e652792794a961543e6750d7Mathias Agopianclass Client : public BnSurfaceComposerClient 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 6296f0819f81293076e652792794a961543e6750d7Mathias Agopian Client(const sp<SurfaceFlinger>& flinger); 6396f0819f81293076e652792794a961543e6750d7Mathias Agopian ~Client(); 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 6596f0819f81293076e652792794a961543e6750d7Mathias Agopian status_t initCheck() const; 6696f0819f81293076e652792794a961543e6750d7Mathias Agopian 6796f0819f81293076e652792794a961543e6750d7Mathias Agopian // protected by SurfaceFlinger::mStateLock 684f113740180b6512b43723c4728f262882dc9b45Mathias Agopian size_t attachLayer(const sp<LayerBaseClient>& layer); 69b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian void detachLayer(const LayerBaseClient* layer); 7096f0819f81293076e652792794a961543e6750d7Mathias Agopian sp<LayerBaseClient> getLayerUser(int32_t i) const; 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 7396f0819f81293076e652792794a961543e6750d7Mathias Agopian 7496f0819f81293076e652792794a961543e6750d7Mathias Agopian // ISurfaceComposerClient interface 7596f0819f81293076e652792794a961543e6750d7Mathias Agopian virtual sp<IMemoryHeap> getControlBlock() const; 76b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian virtual ssize_t getTokenForSurface(const sp<ISurface>& sur) const; 7796f0819f81293076e652792794a961543e6750d7Mathias Agopian virtual sp<ISurface> createSurface( 780ef4e15a6c12778daf464a4953d7e15e651f49acMathias Agopian surface_data_t* params, const String8& name, 7996f0819f81293076e652792794a961543e6750d7Mathias Agopian DisplayID display, uint32_t w, uint32_t h,PixelFormat format, 8096f0819f81293076e652792794a961543e6750d7Mathias Agopian uint32_t flags); 8196f0819f81293076e652792794a961543e6750d7Mathias Agopian virtual status_t destroySurface(SurfaceID surfaceId); 8296f0819f81293076e652792794a961543e6750d7Mathias Agopian virtual status_t setState(int32_t count, const layer_state_t* states); 8396f0819f81293076e652792794a961543e6750d7Mathias Agopian 844f113740180b6512b43723c4728f262882dc9b45Mathias Agopian // constant 85b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian sp<SurfaceFlinger> mFlinger; 864f113740180b6512b43723c4728f262882dc9b45Mathias Agopian 874f113740180b6512b43723c4728f262882dc9b45Mathias Agopian // protected by mLock 884f113740180b6512b43723c4728f262882dc9b45Mathias Agopian DefaultKeyedVector< size_t, wp<LayerBaseClient> > mLayers; 894f113740180b6512b43723c4728f262882dc9b45Mathias Agopian size_t mNameGenerator; 904f113740180b6512b43723c4728f262882dc9b45Mathias Agopian 914f113740180b6512b43723c4728f262882dc9b45Mathias Agopian // thread-safe 924f113740180b6512b43723c4728f262882dc9b45Mathias Agopian mutable Mutex mLock; 93b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian}; 94b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 95b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopianclass UserClient : public BnSurfaceComposerClient 96b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian{ 97b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopianpublic: 98b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // pointer to this client's control block 99b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian SharedClient* ctrlblk; 100b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 101b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopianpublic: 102b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian UserClient(const sp<SurfaceFlinger>& flinger); 103b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian ~UserClient(); 104b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 105b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian status_t initCheck() const; 106b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 107b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // protected by SurfaceFlinger::mStateLock 108b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian void detachLayer(const Layer* layer); 109b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 110b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopianprivate: 111b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 112b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // ISurfaceComposerClient interface 113b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian virtual sp<IMemoryHeap> getControlBlock() const; 114b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian virtual ssize_t getTokenForSurface(const sp<ISurface>& sur) const; 115b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian virtual sp<ISurface> createSurface( 1160ef4e15a6c12778daf464a4953d7e15e651f49acMathias Agopian surface_data_t* params, const String8& name, 117b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian DisplayID display, uint32_t w, uint32_t h,PixelFormat format, 118b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian uint32_t flags); 119b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian virtual status_t destroySurface(SurfaceID surfaceId); 120b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian virtual status_t setState(int32_t count, const layer_state_t* states); 121b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 122b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // atomic-ops 123b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian mutable volatile int32_t mBitmap; 124b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 12596f0819f81293076e652792794a961543e6750d7Mathias Agopian sp<IMemoryHeap> mCblkHeap; 12696f0819f81293076e652792794a961543e6750d7Mathias Agopian sp<SurfaceFlinger> mFlinger; 127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1299a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennisclass GraphicBufferAlloc : public BnGraphicBufferAlloc 1309a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis{ 1319a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennispublic: 1329a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis GraphicBufferAlloc(); 1339a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis virtual ~GraphicBufferAlloc(); 1349a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis virtual sp<GraphicBuffer> createGraphicBuffer(uint32_t w, uint32_t h, 1359a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis PixelFormat format, uint32_t usage); 1369a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis}; 1379a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis 138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass GraphicPlane 141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project static status_t orientationToTransfrom(int orientation, int w, int h, 144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Transform* tr); 145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GraphicPlane(); 147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ~GraphicPlane(); 148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 149edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool initialized() const; 150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void setDisplayHardware(DisplayHardware *); 152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project status_t setOrientation(int orientation); 1530d1318b974feba2e6ff13e36a1781343c2fce045Mathias Agopian int getOrientation() const { return mOrientation; } 1542b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian int getWidth() const; 1552b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian int getHeight() const; 156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const DisplayHardware& displayHardware() const; 15859119e658a12279e8fff508f8773843de2d90917Mathias Agopian DisplayHardware& editDisplayHardware(); 159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const Transform& transform() const; 160076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian EGLDisplay getEGLDisplay() const; 161076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GraphicPlane(const GraphicPlane&); 164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GraphicPlane operator = (const GraphicPlane&); 165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project DisplayHardware* mHw; 167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Transform mGlobalTransform; 1682b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian Transform mDisplayTransform; 1690d1318b974feba2e6ff13e36a1781343c2fce045Mathias Agopian int mOrientation; 1702b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian float mDisplayWidth; 1712b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian float mDisplayHeight; 1722b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian int mWidth; 1732b92d89e23e1a2a07d0e0d01c00eed33ea580affMathias Agopian int mHeight; 174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectenum { 179edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project eTransactionNeeded = 0x01, 180edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project eTraversalNeeded = 0x02 181edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 183a1e6bc864fb821c1b470b7aad9b75c441f54eeb4Mathias Agopianclass SurfaceFlinger : 184a1e6bc864fb821c1b470b7aad9b75c441f54eeb4Mathias Agopian public BinderService<SurfaceFlinger>, 185a1e6bc864fb821c1b470b7aad9b75c441f54eeb4Mathias Agopian public BnSurfaceComposer, 186a1e6bc864fb821c1b470b7aad9b75c441f54eeb4Mathias Agopian protected Thread 187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 188edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 189a1e6bc864fb821c1b470b7aad9b75c441f54eeb4Mathias Agopian static char const* getServiceName() { return "SurfaceFlinger"; } 190edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 191edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SurfaceFlinger(); 192edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual ~SurfaceFlinger(); 193edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void init(); 194edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 195edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual status_t onTransact( 196edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags); 197edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 198edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual status_t dump(int fd, const Vector<String16>& args); 199edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 200edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // ISurfaceComposer interface 2017e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian virtual sp<ISurfaceComposerClient> createConnection(); 202b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian virtual sp<ISurfaceComposerClient> createClientConnection(); 2039a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc(); 2047303c6bf1a8b00a0e7d8165d774a1f259b4ccda9Mathias Agopian virtual sp<IMemoryHeap> getCblk() const; 205edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void bootFinished(); 206edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void openGlobalTransaction(); 207edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void closeGlobalTransaction(); 208edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags); 209edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags); 210c08731e756868653d09d3e49b723706df3687070Mathias Agopian virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags); 211edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void signal() const; 212134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis virtual bool authenticateSurface(const sp<ISurface>& surface) const; 213bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian 214bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian virtual status_t captureScreen(DisplayID dpy, 215bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian sp<IMemoryHeap>* heap, 216bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian uint32_t* width, uint32_t* height, 217bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian PixelFormat* format, uint32_t reqWidth, uint32_t reqHeight, 218bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian uint32_t minLayerZ, uint32_t maxLayerZ); 219bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian 22059119e658a12279e8fff508f8773843de2d90917Mathias Agopian virtual status_t turnElectronBeamOff(int32_t mode); 2219daa5c9b9dd286cbbf5d43f7e45a5e9e4048e855Mathias Agopian virtual status_t turnElectronBeamOn(int32_t mode); 222edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 223edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void screenReleased(DisplayID dpy); 224edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void screenAcquired(DisplayID dpy); 225edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 226076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian status_t removeLayer(const sp<LayerBase>& layer); 227076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian status_t addLayer(const sp<LayerBase>& layer); 228076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian status_t invalidateLayerVisibility(const sp<LayerBase>& layer); 229ad456f9878ff7c176499e7b992f9ff1cb3e9cdeeMathias Agopian void invalidateHwcGeometry(); 230b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 231b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian sp<Layer> getLayer(const sp<ISurface>& sur) const; 232b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 233edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 23496f0819f81293076e652792794a961543e6750d7Mathias Agopian friend class Client; 235edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class LayerBase; 236edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class LayerBaseClient; 2371df3bbb8d88a4e725e4a8cdcb293f1e078176f4aMathias Agopian friend class LayerBaseClient::Surface; 238edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class Layer; 239945ebbfd3dc07c7168602a1603eeb76ea7425376Mathias Agopian friend class LayerDim; 240edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 2410ef4e15a6c12778daf464a4953d7e15e651f49acMathias Agopian sp<ISurface> createSurface( 2427e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian ISurfaceComposerClient::surface_data_t* params, 2430ef4e15a6c12778daf464a4953d7e15e651f49acMathias Agopian const String8& name, 2440ef4e15a6c12778daf464a4953d7e15e651f49acMathias Agopian const sp<Client>& client, 245edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project DisplayID display, uint32_t w, uint32_t h, PixelFormat format, 246edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t flags); 247edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 248b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian sp<Layer> createNormalSurface( 249f9d932774e06d5122c48b47d8cabd791783f56d2Mathias Agopian const sp<Client>& client, DisplayID display, 25096f0819f81293076e652792794a961543e6750d7Mathias Agopian uint32_t w, uint32_t h, uint32_t flags, 2511c97d2ebe1f035beabd90089bfc78326b73d7864Mathias Agopian PixelFormat& format); 252edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 253b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian sp<LayerDim> createDimSurface( 254f9d932774e06d5122c48b47d8cabd791783f56d2Mathias Agopian const sp<Client>& client, DisplayID display, 25596f0819f81293076e652792794a961543e6750d7Mathias Agopian uint32_t w, uint32_t h, uint32_t flags); 256edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 25796f0819f81293076e652792794a961543e6750d7Mathias Agopian status_t removeSurface(const sp<Client>& client, SurfaceID sid); 2589a11206fe793363c0e8897b478cbe6ef8c52b543Mathias Agopian status_t destroySurface(const sp<LayerBaseClient>& layer); 25996f0819f81293076e652792794a961543e6750d7Mathias Agopian status_t setClientState(const sp<Client>& client, 26096f0819f81293076e652792794a961543e6750d7Mathias Agopian int32_t count, const layer_state_t* states); 261edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 262f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian class LayerVector : public SortedVector< sp<LayerBase> > { 263edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project public: 264f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian LayerVector() { } 265f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian LayerVector(const LayerVector& rhs) : SortedVector< sp<LayerBase> >(rhs) { } 266f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian virtual int do_compare(const void* lhs, const void* rhs) const { 267f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian const sp<LayerBase>& l(*reinterpret_cast<const sp<LayerBase>*>(lhs)); 268f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian const sp<LayerBase>& r(*reinterpret_cast<const sp<LayerBase>*>(rhs)); 269f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian // sort layers by Z order 270f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian uint32_t lz = l->currentState().z; 271f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian uint32_t rz = r->currentState().z; 272f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian // then by sequence, so we get a stable ordering 273f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian return (lz != rz) ? (lz - rz) : (l->sequence - r->sequence); 274f6679fc6f70939643901f29a9a69e40c603e6e5fMathias Agopian } 275edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 276edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 277edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project struct State { 278edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project State() { 279edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project orientation = ISurfaceComposer::eOrientationDefault; 280edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project freezeDisplay = 0; 281edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 282edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project LayerVector layersSortedByZ; 283edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint8_t orientation; 284c08731e756868653d09d3e49b723706df3687070Mathias Agopian uint8_t orientationType; 285edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint8_t freezeDisplay; 286edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 287edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 288edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual bool threadLoop(); 289edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual status_t readyToRun(); 290edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void onFirstRef(); 291edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 292550a11455a5155b078085fd5f464d7f3e5dfb7fcAndy McFaddenpublic: // hack to work around gcc 4.0.3 bug 293edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const GraphicPlane& graphicPlane(int dpy) const; 294edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GraphicPlane& graphicPlane(int dpy); 295550a11455a5155b078085fd5f464d7f3e5dfb7fcAndy McFaddenprivate: 296edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 297edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void waitForEvent(); 2982944a2b3601ae5847cf54b3130dcf653a7b24b8aAndy McFaddenpublic: // hack to work around gcc 4.0.3 bug 299edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void signalEvent(); 3002944a2b3601ae5847cf54b3130dcf653a7b24b8aAndy McFaddenprivate: 301edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void handleConsoleEvents(); 302edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void handleTransaction(uint32_t transactionFlags); 3033d57964a81cd631d80aa9575647e1ce35b5e82d5Mathias Agopian void handleTransactionLocked( 3043d57964a81cd631d80aa9575647e1ce35b5e82d5Mathias Agopian uint32_t transactionFlags, 3053d57964a81cd631d80aa9575647e1ce35b5e82d5Mathias Agopian Vector< sp<LayerBase> >& ditchedLayers); 306edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 307edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void computeVisibleRegions( 3081bbafb96101de04c43adb5e3ca2494070d20a46aMathias Agopian const LayerVector& currentLayers, 309edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region& dirtyRegion, 310edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region& wormholeRegion); 311edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 312edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void handlePageFlip(); 313edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool lockPageFlip(const LayerVector& currentLayers); 314edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void unlockPageFlip(const LayerVector& currentLayers); 315a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian void handleWorkList(); 316edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void handleRepaint(); 317edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void postFramebuffer(); 318edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void composeSurfaces(const Region& dirty); 319edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 320edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 32196f0819f81293076e652792794a961543e6750d7Mathias Agopian ssize_t addClientLayer(const sp<Client>& client, 32296f0819f81293076e652792794a961543e6750d7Mathias Agopian const sp<LayerBaseClient>& lbc); 323076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian status_t addLayer_l(const sp<LayerBase>& layer); 324076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian status_t removeLayer_l(const sp<LayerBase>& layer); 3259a11206fe793363c0e8897b478cbe6ef8c52b543Mathias Agopian status_t purgatorizeLayer_l(const sp<LayerBase>& layer); 326edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 327edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t getTransactionFlags(uint32_t flags); 328bb641244d7d73312dc65b8e338df18b22e335107Mathias Agopian uint32_t setTransactionFlags(uint32_t flags); 329edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void commitTransaction(); 330edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 331edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 33274c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian status_t captureScreenImplLocked(DisplayID dpy, 33374c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian sp<IMemoryHeap>* heap, 33474c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian uint32_t* width, uint32_t* height, PixelFormat* format, 335bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian uint32_t reqWidth, uint32_t reqHeight, 336bf2c6a6c8f1df40ac94e28b948754bb9739daacaMathias Agopian uint32_t minLayerZ, uint32_t maxLayerZ); 33774c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian 338abd671a08a41519a7ab3d438a500efe0ef0bfc1dMathias Agopian status_t turnElectronBeamOffImplLocked(int32_t mode); 339abd671a08a41519a7ab3d438a500efe0ef0bfc1dMathias Agopian status_t turnElectronBeamOnImplLocked(int32_t mode); 3409daa5c9b9dd286cbbf5d43f7e45a5e9e4048e855Mathias Agopian status_t electronBeamOffAnimationImplLocked(); 3419daa5c9b9dd286cbbf5d43f7e45a5e9e4048e855Mathias Agopian status_t electronBeamOnAnimationImplLocked(); 3429daa5c9b9dd286cbbf5d43f7e45a5e9e4048e855Mathias Agopian status_t renderScreenToTextureLocked(DisplayID dpy, 3439daa5c9b9dd286cbbf5d43f7e45a5e9e4048e855Mathias Agopian GLuint* textureName, GLfloat* uOut, GLfloat* vOut); 34459119e658a12279e8fff508f8773843de2d90917Mathias Agopian 345edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project friend class FreezeLock; 346edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<FreezeLock> getFreezeLock() const; 3470408772e34931351d062f2088b611325ddaa6cdbMathias Agopian inline void incFreezeCount() { 3480408772e34931351d062f2088b611325ddaa6cdbMathias Agopian if (mFreezeCount == 0) 3490408772e34931351d062f2088b611325ddaa6cdbMathias Agopian mFreezeDisplayTime = 0; 3500408772e34931351d062f2088b611325ddaa6cdbMathias Agopian mFreezeCount++; 3510408772e34931351d062f2088b611325ddaa6cdbMathias Agopian } 352edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline void decFreezeCount() { if (mFreezeCount > 0) mFreezeCount--; } 353edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline bool hasFreezeRequest() const { return mFreezeDisplay; } 354edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline bool isFrozen() const { 3553330b203039dea366d4981db1408a460134b2d2cMathias Agopian return (mFreezeDisplay || mFreezeCount>0) && mBootFinished; 356edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 357edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 358edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 359edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void debugFlashRegions(); 360edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void debugShowFPS() const; 361edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void drawWormhole() const; 362edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 363f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 364f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian mutable MessageQueue mEventQueue; 365bb641244d7d73312dc65b8e338df18b22e335107Mathias Agopian 366bb641244d7d73312dc65b8e338df18b22e335107Mathias Agopian status_t postMessageAsync(const sp<MessageBase>& msg, 367bb641244d7d73312dc65b8e338df18b22e335107Mathias Agopian nsecs_t reltime=0, uint32_t flags = 0); 368bb641244d7d73312dc65b8e338df18b22e335107Mathias Agopian 369bb641244d7d73312dc65b8e338df18b22e335107Mathias Agopian status_t postMessageSync(const sp<MessageBase>& msg, 370bb641244d7d73312dc65b8e338df18b22e335107Mathias Agopian nsecs_t reltime=0, uint32_t flags = 0); 371b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 372edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // access must be protected by mStateLock 373edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable Mutex mStateLock; 374edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project State mCurrentState; 375edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project volatile int32_t mTransactionFlags; 376edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project volatile int32_t mTransactionCount; 377edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Condition mTransactionCV; 37876cd4ddc6ad664257739b3d3713fd9ebdc9a4ad9Mathias Agopian SortedVector< sp<LayerBase> > mLayerPurgatory; 379cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian bool mResizeTransationPending; 38096f0819f81293076e652792794a961543e6750d7Mathias Agopian 381edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // protected by mStateLock (but we could use another lock) 38296f0819f81293076e652792794a961543e6750d7Mathias Agopian GraphicPlane mGraphicPlanes[1]; 38396f0819f81293076e652792794a961543e6750d7Mathias Agopian bool mLayersRemoved; 384b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian DefaultKeyedVector< wp<IBinder>, wp<Layer> > mLayerMap; 385edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 386edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // constant members (no synchronization needed for access) 3877303c6bf1a8b00a0e7d8165d774a1f259b4ccda9Mathias Agopian sp<IMemoryHeap> mServerHeap; 388edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project surface_flinger_cblk_t* mServerCblk; 389edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GLuint mWormholeTexName; 390edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project nsecs_t mBootTime; 391375f56363a8737119ce2222dcfaacbe1cf733fc0Mathias Agopian Permission mHardwareTest; 392375f56363a8737119ce2222dcfaacbe1cf733fc0Mathias Agopian Permission mAccessSurfaceFlinger; 3931b0b30d04304392748a8a4ab5a69e52a19f51b3aMathias Agopian Permission mReadFramebuffer; 394375f56363a8737119ce2222dcfaacbe1cf733fc0Mathias Agopian Permission mDump; 395edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 396edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // Can only accessed from the main thread, these members 397edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // don't need synchronization 3981bbafb96101de04c43adb5e3ca2494070d20a46aMathias Agopian State mDrawingState; 399edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region mDirtyRegion; 400970112231e887c8a14441ec4fed55342e019fc8cMathias Agopian Region mDirtyRegionRemovedLayer; 401edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region mInvalidRegion; 402edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region mWormholeRegion; 403edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool mVisibleRegionsDirty; 404a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian bool mHwWorkListDirty; 405edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool mDeferReleaseConsole; 406edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool mFreezeDisplay; 407abd671a08a41519a7ab3d438a500efe0ef0bfc1dMathias Agopian int32_t mElectronBeamAnimationMode; 408edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int32_t mFreezeCount; 409edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project nsecs_t mFreezeDisplayTime; 4104da751999358fffa4cefc4c8046dab72045925f6Mathias Agopian Vector< sp<LayerBase> > mVisibleLayersSortedByZ; 4114da751999358fffa4cefc4c8046dab72045925f6Mathias Agopian 412edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 413edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // don't use a lock for these, we don't care 414edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int mDebugRegion; 415edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int mDebugBackground; 41673d3ba9e50be1014aa21ec4bbdc874be394accb4Mathias Agopian int mDebugDisableHWC; 4179795c42e557cfa37b9fd353ef7a2a7977a77f504Mathias Agopian volatile nsecs_t mDebugInSwapBuffers; 4189795c42e557cfa37b9fd353ef7a2a7977a77f504Mathias Agopian nsecs_t mLastSwapBufferTime; 4199795c42e557cfa37b9fd353ef7a2a7977a77f504Mathias Agopian volatile nsecs_t mDebugInTransaction; 4209795c42e557cfa37b9fd353ef7a2a7977a77f504Mathias Agopian nsecs_t mLastTransactionTime; 4213330b203039dea366d4981db1408a460134b2d2cMathias Agopian bool mBootFinished; 422edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 423edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // these are thread safe 424edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable Barrier mReadyToRunBarrier; 425edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 426edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // atomic variables 427edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project enum { 428edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project eConsoleReleased = 1, 429edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project eConsoleAcquired = 2 430edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 431edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project volatile int32_t mConsoleSignals; 432edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 433edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // only written in the main thread, only read in other threads 434edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project volatile int32_t mSecureFrameBuffer; 435edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 436edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 437edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 438edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 439edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass FreezeLock : public LightRefBase<FreezeLock> { 440edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SurfaceFlinger* mFlinger; 441edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 442edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project FreezeLock(SurfaceFlinger* flinger) 443edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project : mFlinger(flinger) { 444edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mFlinger->incFreezeCount(); 445edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 446edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ~FreezeLock() { 447edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mFlinger->decFreezeCount(); 448edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 449edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 450edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 451edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 452edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 453edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 454edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_SURFACE_FLINGER_H 455