Layer.h revision 16f0453fee84c6aad59fe0d1c7d36f061d46cffc
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_LAYER_H 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_LAYER_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 233330b203039dea366d4981db1408a460134b2d2cMathias Agopian#include <ui/GraphicBuffer.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h> 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <pixelflinger/pixelflinger.h> 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 27076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <EGL/egl.h> 28076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <EGL/eglext.h> 29076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <GLES/gl.h> 30076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <GLES/glext.h> 31076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "LayerBase.h" 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "Transform.h" 34d606de6bb6877dc4ab93ec0be0c6bda4a8ee1ce8Mathias Agopian#include "TextureManager.h" 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 401f7bec634f19c123410a5155c8d282e177c01930Mathias Agopianclass FreezeLock; 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Client; 421f7bec634f19c123410a5155c8d282e177c01930Mathias Agopianclass GLExtensions; 43b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopianclass UserClient; 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Layer : public LayerBaseClient 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 49d606de6bb6877dc4ab93ec0be0c6bda4a8ee1ce8Mathias Agopianpublic: 50b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian Layer(SurfaceFlinger* flinger, DisplayID display, 51b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian const sp<Client>& client); 52d606de6bb6877dc4ab93ec0be0c6bda4a8ee1ce8Mathias Agopian 53b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian virtual ~Layer(); 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 55b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian virtual const char* getTypeId() const { return "Layer"; } 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 57b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // the this layer's size and format 58cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian status_t setBuffers(uint32_t w, uint32_t h, 59cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian PixelFormat format, uint32_t flags=0); 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 61b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // associate a UserClient to this Layer 62b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian status_t setToken(const sp<UserClient>& uc, SharedClient* sc, int32_t idx); 63b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian int32_t getToken() const; 64579b3f88d03d06b897b778bd11818f5104677d1dMathias Agopian sp<UserClient> getClient() const; 65b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 66b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // Set this Layer's buffers size 67a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian void setBufferSize(uint32_t w, uint32_t h); 68a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian bool isFixedSize() const; 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 70b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // LayerBase interface 71a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian virtual void setGeometry(hwc_layer_t* hwcl); 72a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian virtual void setPerFrameData(hwc_layer_t* hwcl); 7374c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian virtual void drawForSreenShot() const; 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void onDraw(const Region& clip) const; 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual uint32_t doTransaction(uint32_t transactionFlags); 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void lockPageFlip(bool& recomputeVisibleRegions); 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void unlockPageFlip(const Transform& planeTransform, Region& outDirtyRegion); 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual bool needsBlending() const { return mNeedsBlending; } 79401c257fba770a267f637184b1f532b4e03bed20Mathias Agopian virtual bool needsDithering() const { return mNeedsDithering; } 80a7f669256f93a593c723f05784ef04d3c7d052bbMathias Agopian virtual bool needsFiltering() const; 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual bool isSecure() const { return mSecure; } 8216f0453fee84c6aad59fe0d1c7d36f061d46cffcGlenn Kasten virtual bool isProtectedByApp() const { return mProtectedByApp; } 8316f0453fee84c6aad59fe0d1c7d36f061d46cffcGlenn Kasten virtual bool isProtectedByDRM() const { return mProtectedByDRM; } 84076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian virtual sp<Surface> createSurface() const; 859a11206fe793363c0e8897b478cbe6ef8c52b543Mathias Agopian virtual status_t ditch(); 86d606de6bb6877dc4ab93ec0be0c6bda4a8ee1ce8Mathias Agopian virtual void onRemoved(); 87b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 88cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian // only for debugging 89b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian inline sp<GraphicBuffer> getBuffer(int i) const { 90b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian return mBufferManager.getBuffer(i); } 91cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian // only for debugging 92b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian inline const sp<FreezeLock>& getFreezeLock() const { 93b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian return mFreezeLock; } 941b5e1021b8c9b87113b70d94dfb7b50f8c5b01b8Mathias Agopian 951b5e1021b8c9b87113b70d94dfb7b50f8c5b01b8Mathias Agopianprotected: 961b5e1021b8c9b87113b70d94dfb7b50f8c5b01b8Mathias Agopian virtual void dump(String8& result, char* scratch, size_t size) const; 971b5e1021b8c9b87113b70d94dfb7b50f8c5b01b8Mathias Agopian 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void reloadTexture(const Region& dirty); 1003330b203039dea366d4981db1408a460134b2d2cMathias Agopian uint32_t getEffectiveUsage(uint32_t usage) const; 101a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian sp<GraphicBuffer> requestBuffer(int bufferIdx, 102a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian uint32_t w, uint32_t h, uint32_t format, uint32_t usage); 103b5b7f260da2c1a2a82e0311e2015d49a82f43667Mathias Agopian status_t setBufferCount(int bufferCount); 1040aa758d64ac530833ce9a311b164c9175a7a054cMathias Agopian 105b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // ----------------------------------------------------------------------- 106b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 107cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian class SurfaceLayer : public LayerBaseClient::Surface { 108076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian public: 10996f0819f81293076e652792794a961543e6750d7Mathias Agopian SurfaceLayer(const sp<SurfaceFlinger>& flinger, const sp<Layer>& owner); 110cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian ~SurfaceLayer(); 111076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian private: 112a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian virtual sp<GraphicBuffer> requestBuffer(int bufferIdx, 113a138f89c5e78b7e8994823e97d6e860869762837Mathias Agopian uint32_t w, uint32_t h, uint32_t format, uint32_t usage); 114b5b7f260da2c1a2a82e0311e2015d49a82f43667Mathias Agopian virtual status_t setBufferCount(int bufferCount); 115076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian sp<Layer> getOwner() const { 116076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian return static_cast<Layer*>(Surface::getOwner().get()); 117076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian } 118076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian }; 119076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian friend class SurfaceLayer; 120b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 121b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // ----------------------------------------------------------------------- 122b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 123b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian class ClientRef { 124b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian ClientRef(const ClientRef& rhs); 125b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian ClientRef& operator = (const ClientRef& rhs); 126b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian mutable Mutex mLock; 127b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // binder thread, page-flip thread 128579b3f88d03d06b897b778bd11818f5104677d1dMathias Agopian sp<SharedBufferServer> mControlBlock; 129b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian wp<UserClient> mUserClient; 130b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian int32_t mToken; 131b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian public: 132b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian ClientRef(); 133b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian ~ClientRef(); 134b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian int32_t getToken() const; 135579b3f88d03d06b897b778bd11818f5104677d1dMathias Agopian sp<UserClient> getClient() const; 136b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian status_t setToken(const sp<UserClient>& uc, 137579b3f88d03d06b897b778bd11818f5104677d1dMathias Agopian const sp<SharedBufferServer>& sharedClient, int32_t token); 138b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian sp<UserClient> getUserClientUnsafe() const; 139b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian class Access { 140b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian Access(const Access& rhs); 141b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian Access& operator = (const Access& rhs); 142b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian sp<UserClient> mUserClientStrongRef; 143579b3f88d03d06b897b778bd11818f5104677d1dMathias Agopian sp<SharedBufferServer> mControlBlock; 144b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian public: 145b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian Access(const ClientRef& ref); 146579b3f88d03d06b897b778bd11818f5104677d1dMathias Agopian ~Access(); 147579b3f88d03d06b897b778bd11818f5104677d1dMathias Agopian inline SharedBufferServer* get() const { return mControlBlock.get(); } 148b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian }; 149b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian friend class Access; 150b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian }; 151b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 152b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // ----------------------------------------------------------------------- 153b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 154b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian class BufferManager { 155b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian static const size_t NUM_BUFFERS = 2; 156b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian struct BufferData { 157b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian sp<GraphicBuffer> buffer; 158b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian Image texture; 159b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian }; 160b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // this lock protect mBufferData[].buffer but since there 161b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // is very little contention, we have only one like for 162b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // the whole array, we also use it to protect mNumBuffers. 163b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian mutable Mutex mLock; 164b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian BufferData mBufferData[SharedBufferStack::NUM_BUFFER_MAX]; 165b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian size_t mNumBuffers; 166b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian Texture mFailoverTexture; 167b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian TextureManager& mTextureManager; 168420a283c4dc2a669c93bd5c0a2180b14f3625501Mathias Agopian ssize_t mActiveBufferIndex; 169420a283c4dc2a669c93bd5c0a2180b14f3625501Mathias Agopian sp<GraphicBuffer> mActiveBuffer; 170b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian bool mFailover; 171b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian static status_t destroyTexture(Image* tex, EGLDisplay dpy); 172b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 173b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian public: 174b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian static size_t getDefaultBufferCount() { return NUM_BUFFERS; } 175b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian BufferManager(TextureManager& tm); 176b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian ~BufferManager(); 177b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 178b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // detach/attach buffer from/to given index 179b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian sp<GraphicBuffer> detachBuffer(size_t index); 180b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian status_t attachBuffer(size_t index, const sp<GraphicBuffer>& buffer); 181b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // resize the number of active buffers 18254cc83e8a48c57307cdd40fe4b7e296020490095Jamie Gennis status_t resize(size_t size, const sp<SurfaceFlinger>& flinger, 18354cc83e8a48c57307cdd40fe4b7e296020490095Jamie Gennis EGLDisplay dpy); 184b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 185b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // ---------------------------------------------- 186b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // must be called from GL thread 187b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 188b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // set/get active buffer index 189b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian status_t setActiveBufferIndex(size_t index); 190b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian size_t getActiveBufferIndex() const; 191b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // return the active buffer 192b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian sp<GraphicBuffer> getActiveBuffer() const; 193da9584dc295cc5e6d0b49a97c1e45159249d650bMathias Agopian // return wether we have an active buffer 194da9584dc295cc5e6d0b49a97c1e45159249d650bMathias Agopian bool hasActiveBuffer() const; 195b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // return the active texture (or fail-over) 196b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian Texture getActiveTexture() const; 197b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // frees resources associated with all buffers 198b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian status_t destroy(EGLDisplay dpy); 199b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // load bitmap data into the active buffer 200b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian status_t loadTexture(const Region& dirty, const GGLSurface& t); 201b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // make active buffer an EGLImage if needed 202b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian status_t initEglImage(EGLDisplay dpy, 203b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian const sp<GraphicBuffer>& buffer); 204b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 205b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // ---------------------------------------------- 206b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // only for debugging 207b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian sp<GraphicBuffer> getBuffer(size_t index) const; 208b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian }; 209b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 210b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // ----------------------------------------------------------------------- 211b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 212b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // thread-safe 213b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian ClientRef mUserClientRef; 214b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 215b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // constants 216b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian sp<Surface> mSurface; 217b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian PixelFormat mFormat; 2181f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian const GLExtensions& mGLExtensions; 219b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian bool mNeedsBlending; 220b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian bool mNeedsDithering; 221b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 222b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // page-flip thread (currently main thread) 22316f0453fee84c6aad59fe0d1c7d36f061d46cffcGlenn Kasten bool mSecure; // no screenshots 22416f0453fee84c6aad59fe0d1c7d36f061d46cffcGlenn Kasten bool mProtectedByApp; // application requires protected path to external sink 22516f0453fee84c6aad59fe0d1c7d36f061d46cffcGlenn Kasten bool mProtectedByDRM; // DRM agent requires protected path to external sink 226b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian Region mPostedDirtyRegion; 227b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 228b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // page-flip thread and transaction thread (currently main thread) 229b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian sp<FreezeLock> mFreezeLock; 230b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 231b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // see threading usage in declaration 232b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian TextureManager mTextureManager; 233b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian BufferManager mBufferManager; 234b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian 235b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian // binder thread, transaction thread 236b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian mutable Mutex mLock; 237b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian uint32_t mWidth; 238b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian uint32_t mHeight; 239b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian uint32_t mReqWidth; 240b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian uint32_t mReqHeight; 241b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian uint32_t mReqFormat; 242733189d408e13b54fd70971b265244367efd0f51Mathias Agopian bool mNeedsScaling; 243b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian bool mFixedSize; 244edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 245edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 246edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 247edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 248edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 249edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 250edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_LAYER_H 251