diff options
author | Mathias Agopian <mathias@google.com> | 2009-09-16 18:27:24 -0700 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2009-09-16 18:27:24 -0700 |
commit | 7cf03bace826631259aaa5ddc87a517e13bdee17 (patch) | |
tree | 48833f33eac1c4549761cc878f7945ae1cf2bbf0 /libs/surfaceflinger | |
parent | 2c68dd0483dd4f7b211bea32652d42c3c7cd602c (diff) | |
download | frameworks_base-7cf03bace826631259aaa5ddc87a517e13bdee17.zip frameworks_base-7cf03bace826631259aaa5ddc87a517e13bdee17.tar.gz frameworks_base-7cf03bace826631259aaa5ddc87a517e13bdee17.tar.bz2 |
fix [2119400] sholes: artifacting when switching orientation
Diffstat (limited to 'libs/surfaceflinger')
-rw-r--r-- | libs/surfaceflinger/Layer.cpp | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/libs/surfaceflinger/Layer.cpp b/libs/surfaceflinger/Layer.cpp index 1e7f1e6..7387c85 100644 --- a/libs/surfaceflinger/Layer.cpp +++ b/libs/surfaceflinger/Layer.cpp @@ -303,7 +303,6 @@ uint32_t Layer::doTransaction(uint32_t flags) // Index of the back buffer const bool backbufferChanged = (front.w != temp.w) || (front.h != temp.h); - if (backbufferChanged) { // the size changed, we need to ask our client to request a new buffer LOGD_IF(DEBUG_RESIZE, @@ -318,17 +317,6 @@ uint32_t Layer::doTransaction(uint32_t flags) // buffer, it'll get the new size. setDrawingSize(temp.w, temp.h); - // all buffers need reallocation - lcblk->reallocate(); - - // recompute the visible region - // FIXME: ideally we would do that only when we have received - // a buffer of the right size - flags |= Layer::eVisibleRegion; - this->contentDirty = true; - -#if 0 - // FIXME: handle freeze lock // we're being resized and there is a freeze display request, // acquire a freeze lock, so that the screen stays put // until we've redrawn at the new size; this is to avoid @@ -340,7 +328,12 @@ uint32_t Layer::doTransaction(uint32_t flags) mFreezeLock = mFlinger->getFreezeLock(); } } -#endif + + // recompute the visible region + flags |= Layer::eVisibleRegion; + this->contentDirty = true; + // all buffers need reallocation + lcblk->reallocate(); } if (temp.sequence != front.sequence) { @@ -382,6 +375,13 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions) const Region dirty(lcblk->getDirtyRegion(buf)); mPostedDirtyRegion = dirty.intersect( newFrontBuffer->getBounds() ); + + const Layer::State& front(drawingState()); + if (newFrontBuffer->getWidth() == front.w && + newFrontBuffer->getHeight() ==front.h) { + mFreezeLock.clear(); + } + // FIXME: signal an event if we have more buffers waiting // mFlinger->signalEvent(); |