DisplayDevice.h revision a49126087b4494f4ef50873f3a3f6727265f6621
1/* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef ANDROID_DISPLAY_HARDWARE_H 18#define ANDROID_DISPLAY_HARDWARE_H 19 20#include <stdlib.h> 21 22#include <ui/PixelFormat.h> 23#include <ui/Region.h> 24 25#include <GLES/gl.h> 26#include <GLES/glext.h> 27#include <EGL/egl.h> 28#include <EGL/eglext.h> 29 30#include "Transform.h" 31 32#include "DisplayHardware/DisplayHardwareBase.h" 33#include "DisplayHardware/HWComposer.h" 34#include "DisplayHardware/PowerHAL.h" 35 36namespace android { 37 38class FramebufferSurface; 39class SurfaceTextureClient; 40 41class DisplayHardware : 42 public DisplayHardwareBase, 43 public HWComposer::EventHandler 44{ 45public: 46 47 class VSyncHandler : virtual public RefBase { 48 friend class DisplayHardware; 49 virtual void onVSyncReceived(int dpy, nsecs_t timestamp) = 0; 50 protected: 51 virtual ~VSyncHandler() {} 52 }; 53 54 enum { 55 PARTIAL_UPDATES = 0x00020000, // video driver feature 56 SWAP_RECTANGLE = 0x00080000, 57 }; 58 59 DisplayHardware( 60 const sp<SurfaceFlinger>& flinger, 61 int dpy, 62 const sp<SurfaceTextureClient>& surface, 63 EGLConfig config); 64 65 virtual ~DisplayHardware(); 66 67 void releaseScreen() const; 68 void acquireScreen() const; 69 70 // Flip the front and back buffers if the back buffer is "dirty". Might 71 // be instantaneous, might involve copying the frame buffer around. 72 void flip(const Region& dirty) const; 73 74 float getDpiX() const; 75 float getDpiY() const; 76 float getRefreshRate() const; 77 float getDensity() const; 78 int getWidth() const; 79 int getHeight() const; 80 PixelFormat getFormat() const; 81 uint32_t getFlags() const; 82 nsecs_t getRefreshPeriod() const; 83 nsecs_t getRefreshTimestamp() const; 84 85 EGLSurface getEGLSurface() const; 86 87 void setVisibleLayersSortedByZ(const Vector< sp<LayerBase> >& layers); 88 Vector< sp<LayerBase> > getVisibleLayersSortedByZ() const; 89 bool getSecureLayerVisible() const; 90 91 status_t setOrientation(int orientation); 92 int getOrientation() const { return mOrientation; } 93 const Transform& getTransform() const { return mGlobalTransform; } 94 int getUserWidth() const { return mUserDisplayWidth; } 95 int getUserHeight() const { return mUserDisplayHeight; } 96 97 void setVSyncHandler(const sp<VSyncHandler>& handler); 98 99 enum { 100 EVENT_VSYNC = HWC_EVENT_VSYNC 101 }; 102 103 void eventControl(int event, int enabled); 104 105 106 uint32_t getPageFlipCount() const; 107 EGLDisplay getEGLDisplay() const { return mDisplay; } 108 109 void dump(String8& res) const; 110 111 // Hardware Composer 112 HWComposer& getHwComposer() const; 113 114 status_t compositionComplete() const; 115 116 Rect getBounds() const { 117 return Rect(mDisplayWidth, mDisplayHeight); 118 } 119 inline Rect bounds() const { return getBounds(); } 120 121private: 122 void init(EGLConfig config); 123 124 virtual void onVSyncReceived(int dpy, nsecs_t timestamp); 125 126 /* 127 * Constants, set during initialization 128 */ 129 sp<SurfaceFlinger> mFlinger; 130 int mDisplayId; 131 HWComposer* mHwc; 132 PowerHAL mPowerHAL; 133 // ANativeWindow this display is rendering into 134 sp<SurfaceTextureClient> mNativeWindow; 135 // set if mNativeWindow is a FramebufferSurface 136 sp<FramebufferSurface> mFramebufferSurface; 137 138 139 EGLDisplay mDisplay; 140 EGLSurface mSurface; 141 EGLContext mContext; 142 float mDpiX; 143 float mDpiY; 144 float mRefreshRate; 145 float mDensity; 146 int mDisplayWidth; 147 int mDisplayHeight; 148 PixelFormat mFormat; 149 uint32_t mFlags; 150 mutable uint32_t mPageFlipCount; 151 152 nsecs_t mRefreshPeriod; 153 mutable nsecs_t mLastHwVSync; 154 155 156 /* 157 * Can only accessed from the main thread, these members 158 * don't need synchronization. 159 */ 160 // list of visible layers on that display 161 Vector< sp<LayerBase> > mVisibleLayersSortedByZ; 162 // Whether we have a visible secure layer on this display 163 bool mSecureLayerVisible; 164 165 166 // this used to be in GraphicPlane 167 static status_t orientationToTransfrom(int orientation, int w, int h, 168 Transform* tr); 169 Transform mGlobalTransform; 170 Transform mDisplayTransform; 171 int mOrientation; 172 int mLogicalDisplayWidth; 173 int mLogicalDisplayHeight; 174 int mUserDisplayWidth; 175 int mUserDisplayHeight; 176 177 mutable Mutex mLock; 178 179 /* 180 * protected by mLock 181 */ 182 wp<VSyncHandler> mVSyncHandler; 183}; 184 185}; // namespace android 186 187#endif // ANDROID_DISPLAY_HARDWARE_H 188