am c748832f
: Merge "Revert overdraw avoidance visualization change" into lmp-mr1-dev
* commit 'c748832f759cd7a390a32890530e854b9711eb7c': Revert overdraw avoidance visualization change
This commit is contained in:
@ -525,7 +525,7 @@ void DeferredDisplayList::addDrawOp(OpenGLRenderer& renderer, DrawOp* op) {
|
|||||||
deferInfo.mergeable &= !recordingComplexClip();
|
deferInfo.mergeable &= !recordingComplexClip();
|
||||||
deferInfo.opaqueOverBounds &= !recordingComplexClip() && mSaveStack.isEmpty();
|
deferInfo.opaqueOverBounds &= !recordingComplexClip() && mSaveStack.isEmpty();
|
||||||
|
|
||||||
if (mBatches.size() &&
|
if (CC_LIKELY(mAvoidOverdraw) && mBatches.size() &&
|
||||||
state->mClipSideFlags != kClipSide_ConservativeFull &&
|
state->mClipSideFlags != kClipSide_ConservativeFull &&
|
||||||
deferInfo.opaqueOverBounds && state->mBounds.contains(mBounds)) {
|
deferInfo.opaqueOverBounds && state->mBounds.contains(mBounds)) {
|
||||||
// avoid overdraw by resetting drawing state + discarding drawing ops
|
// avoid overdraw by resetting drawing state + discarding drawing ops
|
||||||
@ -677,12 +677,13 @@ status_t DeferredDisplayList::flush(OpenGLRenderer& renderer, Rect& dirty) {
|
|||||||
DrawModifiers restoreDrawModifiers = renderer.getDrawModifiers();
|
DrawModifiers restoreDrawModifiers = renderer.getDrawModifiers();
|
||||||
renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
|
renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
|
||||||
|
|
||||||
for (unsigned int i = 1; i < mBatches.size(); i++) {
|
if (CC_LIKELY(mAvoidOverdraw)) {
|
||||||
if (mBatches[i] && mBatches[i]->coversBounds(mBounds)) {
|
for (unsigned int i = 1; i < mBatches.size(); i++) {
|
||||||
discardDrawingBatches(i - 1);
|
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
|
// 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
|
// FLUSH_SAVE_STACK_DEPTH, so that save/restores match up correctly
|
||||||
status |= replayBatchList(mBatches, renderer, dirty);
|
status |= replayBatchList(mBatches, renderer, dirty);
|
||||||
|
@ -81,8 +81,8 @@ public:
|
|||||||
class DeferredDisplayList {
|
class DeferredDisplayList {
|
||||||
friend class DeferStateStruct; // used to give access to allocator
|
friend class DeferStateStruct; // used to give access to allocator
|
||||||
public:
|
public:
|
||||||
DeferredDisplayList(const Rect& bounds) :
|
DeferredDisplayList(const Rect& bounds, bool avoidOverdraw = true) :
|
||||||
mBounds(bounds) {
|
mBounds(bounds), mAvoidOverdraw(avoidOverdraw) {
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
~DeferredDisplayList() { clear(); }
|
~DeferredDisplayList() { clear(); }
|
||||||
@ -150,6 +150,7 @@ private:
|
|||||||
|
|
||||||
// layer space bounds of rendering
|
// layer space bounds of rendering
|
||||||
Rect mBounds;
|
Rect mBounds;
|
||||||
|
const bool mAvoidOverdraw;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* At defer time, stores the *defer time* savecount of save/saveLayer ops that were deferred, so
|
* At defer time, stores the *defer time* savecount of save/saveLayer ops that were deferred, so
|
||||||
|
@ -1912,7 +1912,10 @@ status_t OpenGLRenderer::drawRenderNode(RenderNode* renderNode, Rect& dirty, int
|
|||||||
return status | replayStruct.mDrawGlStatus;
|
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);
|
DeferStateStruct deferStruct(deferredList, *this, replayFlags);
|
||||||
renderNode->defer(deferStruct, 0);
|
renderNode->defer(deferStruct, 0);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user