DisplayDevice.h revision 4297734c1156fd8ede7e9c61b1e439f9e1c18cd9
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10b1f6ad82dd8d1702617a757a88430604b3131facXavier Ducrohet * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian * See the License for the specific language governing permissions and 143b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian * limitations under the License. 153b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian */ 163b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef ANDROID_DISPLAY_DEVICE_H 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_DISPLAY_DEVICE_H 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdlib.h> 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ui/PixelFormat.h> 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ui/Region.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <EGL/egl.h> 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <EGL/eglext.h> 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Mutex.h> 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Timers.h> 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "Transform.h" 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct ANativeWindow; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass DisplayInfo; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass FramebufferSurface; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LayerBase; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass SurfaceFlinger; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass DisplayDevice : public virtual RefBase 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // region in layer-stack space 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mutable Region dirtyRegion; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // region in screen space 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mutable Region swapRegion; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // region in screen space 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Region undefinedRegion; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DISPLAY_ID_MAIN = 0, 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DISPLAY_ID_HDMI = 1 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PARTIAL_UPDATES = 0x00020000, // video driver feature 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SWAP_RECTANGLE = 0x00080000, 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DisplayDevice( 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<SurfaceFlinger>& flinger, 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int dpy, 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<ANativeWindow>& surface, 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLConfig config); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~DisplayDevice(); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // whether this is a valid object. An invalid DisplayDevice is returned 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // when an non existing id is requested 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool isValid() const; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Flip the front and back buffers if the back buffer is "dirty". Might 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // be instantaneous, might involve copying the frame buffer around. 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void flip(const Region& dirty) const; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float getDpiX() const; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float getDpiY() const; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float getDensity() const; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int getWidth() const; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int getHeight() const; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PixelFormat getFormat() const; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getFlags() const; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLSurface getEGLSurface() const; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setVisibleLayersSortedByZ(const Vector< sp<LayerBase> >& layers); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector< sp<LayerBase> > getVisibleLayersSortedByZ() const; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool getSecureLayerVisible() const; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setOrientation(int orientation); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int getOrientation() const { return mOrientation; } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Transform& getTransform() const { return mGlobalTransform; } 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getLayerStack() const { return mLayerStack; } 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t compositionComplete() const; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Rect getBounds() const { 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Rect(mDisplayWidth, mDisplayHeight); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline Rect bounds() const { return getBounds(); } 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void makeCurrent(const sp<const DisplayDevice>& hw, EGLContext ctx); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* ------------------------------------------------------------------------ 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * blank / unplank management 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void releaseScreen() const; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void acquireScreen() const; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool isScreenAcquired() const; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool canDraw() const; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* ------------------------------------------------------------------------ 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Debugging 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getPageFlipCount() const; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dump(String8& res) const; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool operator < (const DisplayDevice& rhs) const { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mId < rhs.mId; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void init(EGLConfig config); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constants, set during initialization 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<SurfaceFlinger> mFlinger; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mId; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ANativeWindow this display is rendering into 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<ANativeWindow> mNativeWindow; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // set if mNativeWindow is a FramebufferSurface 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<FramebufferSurface> mFramebufferSurface; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLDisplay mDisplay; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLSurface mSurface; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLContext mContext; 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mDpiX; 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mDpiY; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mDensity; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mDisplayWidth; 146fb2a9467ad77336edbf2a1a272dbe6ec30ef8a1bKenny Root int mDisplayHeight; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PixelFormat mFormat; 148fb2a9467ad77336edbf2a1a272dbe6ec30ef8a1bKenny Root uint32_t mFlags; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mutable uint32_t mPageFlipCount; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Can only accessed from the main thread, these members 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * don't need synchronization. 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // list of visible layers on that display 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector< sp<LayerBase> > mVisibleLayersSortedByZ; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Whether we have a visible secure layer on this display 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mSecureLayerVisible; 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Whether the screen is blanked; 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mutable int mScreenAcquired; 164fb2a9467ad77336edbf2a1a272dbe6ec30ef8a1bKenny Root 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Transaction state 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static status_t orientationToTransfrom(int orientation, int w, int h, 170fb2a9467ad77336edbf2a1a272dbe6ec30ef8a1bKenny Root Transform* tr); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Transform mGlobalTransform; 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mOrientation; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mLayerStack; 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // ANDROID_DISPLAY_DEVICE_H 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project