OSDN Git Service

Have VirtualDisplays send SF resize messages when resizing
authorMichael Wright <michaelwr@google.com>
Thu, 26 Jun 2014 23:01:02 +0000 (16:01 -0700)
committerMichael Lentine <mlentine@google.com>
Wed, 30 Jul 2014 18:23:44 +0000 (11:23 -0700)
Change-Id: I76d15b22099a659450ec875836c9bf2b6584838f

include/gui/SurfaceComposerClient.h
include/private/gui/LayerState.h
libs/gui/SurfaceComposerClient.cpp
services/surfaceflinger/SurfaceFlinger.h

index 65313df..c73ef70 100644 (file)
@@ -146,6 +146,7 @@ public:
             const sp<IGraphicBufferProducer>& bufferProducer);
     static void setDisplayLayerStack(const sp<IBinder>& token,
             uint32_t layerStack);
+    static void setDisplaySize(const sp<IBinder>& token, uint32_t width, uint32_t height);
 
     /* setDisplayProjection() defines the projection of layer stacks
      * to a given display.
index 5584fb1..2fa6ff9 100644 (file)
@@ -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);
 };
index 3bee3fc..6e13207 100644 (file)
@@ -166,6 +166,7 @@ public:
             uint32_t orientation,
             const Rect& layerStackRect,
             const Rect& displayRect);
+    void setDisplaySize(const sp<IBinder>& token, uint32_t width, uint32_t height);
 
     static void setAnimationTransaction() {
         Composer::getInstance().setAnimationTransactionImpl();
@@ -426,6 +427,14 @@ void Composer::setDisplayProjection(const sp<IBinder>& token,
     mForceSynchronous = true; // TODO: do we actually still need this?
 }
 
+void Composer::setDisplaySize(const sp<IBinder>& 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<IBinder>& token,
             layerStackRect, displayRect);
 }
 
+void SurfaceComposerClient::setDisplaySize(const sp<IBinder>& token,
+        uint32_t width, uint32_t height) {
+    Composer::getInstance().setDisplaySize(token, width, height);
+}
+
 // ----------------------------------------------------------------------------
 
 status_t SurfaceComposerClient::getDisplayConfigs(
index 5ae3d0b..d5547b3 100644 (file)
@@ -170,6 +170,7 @@ private:
         Rect viewport;
         Rect frame;
         uint8_t orientation;
+        uint32_t width, height;
         String8 displayName;
         bool isSecure;
     };