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 <rebecca@android.com>
This commit is contained in:
Rebecca Schultz Zavin
2009-07-21 16:17:59 -07:00
parent 7ac5e698b2
commit 43ab76389e
2 changed files with 5 additions and 2 deletions

View File

@@ -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);
}

View File

@@ -175,6 +175,7 @@ private:
int32_t mWidthStride;
int32_t mHeightStride;
mutable Mutex mLock;
bool mInitialized;
};