diff --git a/include/gui/SurfaceComposerClient.h b/include/gui/SurfaceComposerClient.h index 65313df4c..c73ef701a 100644 --- a/include/gui/SurfaceComposerClient.h +++ b/include/gui/SurfaceComposerClient.h @@ -146,6 +146,7 @@ public: const sp& bufferProducer); static void setDisplayLayerStack(const sp& token, uint32_t layerStack); + static void setDisplaySize(const sp& token, uint32_t width, uint32_t height); /* setDisplayProjection() defines the projection of layer stacks * to a given display. diff --git a/include/private/gui/LayerState.h b/include/private/gui/LayerState.h index 5584fb172..2fa6ff9d9 100644 --- a/include/private/gui/LayerState.h +++ b/include/private/gui/LayerState.h @@ -113,7 +113,8 @@ struct DisplayState { enum { eSurfaceChanged = 0x01, eLayerStackChanged = 0x02, - eDisplayProjectionChanged = 0x04 + eDisplayProjectionChanged = 0x04, + eDisplaySizeChanged = 0x08 }; uint32_t what; @@ -123,6 +124,7 @@ struct DisplayState { uint32_t orientation; Rect viewport; Rect frame; + uint32_t width, height; status_t write(Parcel& output) const; status_t read(const Parcel& input); }; diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index 3bee3fc6e..6e13207a8 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -166,6 +166,7 @@ public: uint32_t orientation, const Rect& layerStackRect, const Rect& displayRect); + void setDisplaySize(const sp& token, uint32_t width, uint32_t height); static void setAnimationTransaction() { Composer::getInstance().setAnimationTransactionImpl(); @@ -426,6 +427,14 @@ void Composer::setDisplayProjection(const sp& token, mForceSynchronous = true; // TODO: do we actually still need this? } +void Composer::setDisplaySize(const sp& token, uint32_t width, uint32_t height) { + Mutex::Autolock _l(mLock); + DisplayState& s(getDisplayStateLocked(token)); + s.width = width; + s.height = height; + s.what |= DisplayState::eDisplaySizeChanged; +} + // --------------------------------------------------------------------------- SurfaceComposerClient::SurfaceComposerClient() @@ -621,6 +630,11 @@ void SurfaceComposerClient::setDisplayProjection(const sp& token, layerStackRect, displayRect); } +void SurfaceComposerClient::setDisplaySize(const sp& token, + uint32_t width, uint32_t height) { + Composer::getInstance().setDisplaySize(token, width, height); +} + // ---------------------------------------------------------------------------- status_t SurfaceComposerClient::getDisplayConfigs( diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index 5ae3d0b29..d5547b37a 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -170,6 +170,7 @@ private: Rect viewport; Rect frame; uint8_t orientation; + uint32_t width, height; String8 displayName; bool isSecure; };