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 | caa600c4a1af1eefd108cf2ec3d86068af35111f (patch) | |
tree | 52352fc6e797afa0cc59436e5bf7e317beccd131 | |
parent | 378532fdb05814be7cbf03ec157abc95d296e203 (diff) | |
download | frameworks_native-caa600c4a1af1eefd108cf2ec3d86068af35111f.zip frameworks_native-caa600c4a1af1eefd108cf2ec3d86068af35111f.tar.gz frameworks_native-caa600c4a1af1eefd108cf2ec3d86068af35111f.tar.bz2 |
fix [2119400] sholes: artifacting when switching orientation
-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(); |