diff options
author | Chris Craik <ccraik@google.com> | 2014-12-17 22:17:21 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-12-17 22:17:21 +0000 |
commit | fd461edee007a654dc163b397445cd071f04caf9 (patch) | |
tree | ffa1bf4644f7523f374f20c8fdbcf24a67f0b3d9 /libs | |
parent | 424924afc17c807a8059a55a522c976f64973c5d (diff) | |
parent | 93492d1a478770783abab764855c8d47e0264f71 (diff) | |
download | frameworks_base-fd461edee007a654dc163b397445cd071f04caf9.zip frameworks_base-fd461edee007a654dc163b397445cd071f04caf9.tar.gz frameworks_base-fd461edee007a654dc163b397445cd071f04caf9.tar.bz2 |
am 93492d1a: am c748832f: Merge "Revert overdraw avoidance visualization change" into lmp-mr1-dev
* commit '93492d1a478770783abab764855c8d47e0264f71':
Revert overdraw avoidance visualization change
Diffstat (limited to 'libs')
-rw-r--r-- | libs/hwui/DeferredDisplayList.cpp | 11 | ||||
-rw-r--r-- | libs/hwui/DeferredDisplayList.h | 5 | ||||
-rwxr-xr-x | libs/hwui/OpenGLRenderer.cpp | 5 |
3 files changed, 13 insertions, 8 deletions
diff --git a/libs/hwui/DeferredDisplayList.cpp b/libs/hwui/DeferredDisplayList.cpp index a5a83d6..6fd0151 100644 --- a/libs/hwui/DeferredDisplayList.cpp +++ b/libs/hwui/DeferredDisplayList.cpp @@ -524,7 +524,7 @@ void DeferredDisplayList::addDrawOp(OpenGLRenderer& renderer, DrawOp* op) { deferInfo.mergeable &= !recordingComplexClip(); deferInfo.opaqueOverBounds &= !recordingComplexClip() && mSaveStack.isEmpty(); - if (mBatches.size() && + if (CC_LIKELY(mAvoidOverdraw) && mBatches.size() && state->mClipSideFlags != kClipSide_ConservativeFull && deferInfo.opaqueOverBounds && state->mBounds.contains(mBounds)) { // avoid overdraw by resetting drawing state + discarding drawing ops @@ -676,12 +676,13 @@ status_t DeferredDisplayList::flush(OpenGLRenderer& renderer, Rect& dirty) { DrawModifiers restoreDrawModifiers = renderer.getDrawModifiers(); renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); - for (unsigned int i = 1; i < mBatches.size(); i++) { - if (mBatches[i] && mBatches[i]->coversBounds(mBounds)) { - discardDrawingBatches(i - 1); + if (CC_LIKELY(mAvoidOverdraw)) { + for (unsigned int i = 1; i < mBatches.size(); i++) { + if (mBatches[i] && mBatches[i]->coversBounds(mBounds)) { + discardDrawingBatches(i - 1); + } } } - // NOTE: depth of the save stack at this point, before playback, should be reflected in // FLUSH_SAVE_STACK_DEPTH, so that save/restores match up correctly status |= replayBatchList(mBatches, renderer, dirty); diff --git a/libs/hwui/DeferredDisplayList.h b/libs/hwui/DeferredDisplayList.h index 9d02382..f7f30b1 100644 --- a/libs/hwui/DeferredDisplayList.h +++ b/libs/hwui/DeferredDisplayList.h @@ -81,8 +81,8 @@ public: class DeferredDisplayList { friend struct DeferStateStruct; // used to give access to allocator public: - DeferredDisplayList(const Rect& bounds) : - mBounds(bounds) { + DeferredDisplayList(const Rect& bounds, bool avoidOverdraw = true) : + mBounds(bounds), mAvoidOverdraw(avoidOverdraw) { clear(); } ~DeferredDisplayList() { clear(); } @@ -150,6 +150,7 @@ private: // layer space bounds of rendering Rect mBounds; + const bool mAvoidOverdraw; /** * At defer time, stores the *defer time* savecount of save/saveLayer ops that were deferred, so diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 419dff1..355a31f 100755 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -1917,7 +1917,10 @@ status_t OpenGLRenderer::drawRenderNode(RenderNode* renderNode, Rect& dirty, int return status | replayStruct.mDrawGlStatus; } - DeferredDisplayList deferredList(*currentClipRect()); + // Don't avoid overdraw when visualizing, since that makes it harder to + // debug where it's coming from, and when the problem occurs. + bool avoidOverdraw = !mCaches.debugOverdraw; + DeferredDisplayList deferredList(*currentClipRect(), avoidOverdraw); DeferStateStruct deferStruct(deferredList, *this, replayFlags); renderNode->defer(deferStruct, 0); |