From 43ab76389ead0ef90e3d4fa883d5a58c34a6801b Mon Sep 17 00:00:00 2001 From: Rebecca Schultz Zavin Date: Tue, 21 Jul 2009 16:17:59 -0700 Subject: [PATCH] Add a flag to set whether the overlay has been initialized. Commit needs to be called at least once on each overlay, and it appears that sometimes this doesn't happen because the visibility never changes. With this change the overlay parameter and position will be committed when either the visibility of the window changes, or on the first call to visibility resolved, if it hasn't already been done. Signed-off-by: Rebecca Schultz Zavin --- libs/surfaceflinger/LayerBuffer.cpp | 6 ++++-- libs/surfaceflinger/LayerBuffer.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/libs/surfaceflinger/LayerBuffer.cpp b/libs/surfaceflinger/LayerBuffer.cpp index 2d949a0b45971..90e7f50480677 100644 --- a/libs/surfaceflinger/LayerBuffer.cpp +++ b/libs/surfaceflinger/LayerBuffer.cpp @@ -575,6 +575,7 @@ LayerBuffer::OverlaySource::OverlaySource(LayerBuffer& layer, mFormat = overlay->format; mWidthStride = overlay->w_stride; mHeightStride = overlay->h_stride; + mInitialized = false; mOverlayHandle = overlay->getHandleRef(overlay); @@ -614,8 +615,9 @@ void LayerBuffer::OverlaySource::onVisibilityResolved( // this code-path must be as tight as possible, it's called each time // the screen is composited. if (UNLIKELY(mOverlay != 0)) { - if (mVisibilityChanged) { + if (mVisibilityChanged || !mInitialized) { mVisibilityChanged = false; + mInitialized = true; const Rect& bounds = mLayer.getTransformedBounds(); int x = bounds.left; int y = bounds.top; @@ -627,7 +629,7 @@ void LayerBuffer::OverlaySource::onVisibilityResolved( if (mOverlay) { overlay_control_device_t* overlay_dev = mOverlayDevice; overlay_dev->setPosition(overlay_dev, mOverlay, x,y,w,h); - overlay_dev->setParameter(overlay_dev, mOverlay, + overlay_dev->setParameter(overlay_dev, mOverlay, OVERLAY_TRANSFORM, mLayer.getOrientation()); overlay_dev->commit(overlay_dev, mOverlay); } diff --git a/libs/surfaceflinger/LayerBuffer.h b/libs/surfaceflinger/LayerBuffer.h index 746790b566172..80572193c1d97 100644 --- a/libs/surfaceflinger/LayerBuffer.h +++ b/libs/surfaceflinger/LayerBuffer.h @@ -175,6 +175,7 @@ private: int32_t mWidthStride; int32_t mHeightStride; mutable Mutex mLock; + bool mInitialized; };