Update snapshot upon saveLayer deferral
bug:8409891
In order to defer fbo-targetting saveLayer operations, it's necessary
to update the snapshot at defer time so that deferred display state
(namely, clip and transform) are fbo relative.
Re-enables deferring, as the issues with saveLayer are fixed.
Change-Id: I74b0779bc732675c747208f0757c3ea85f6dfbed
diff --git a/libs/hwui/DeferredDisplayList.cpp b/libs/hwui/DeferredDisplayList.cpp
index 1ace42f..7907224 100644
--- a/libs/hwui/DeferredDisplayList.cpp
+++ b/libs/hwui/DeferredDisplayList.cpp
@@ -78,7 +78,7 @@
renderer.restoreDisplayState(op->state, kStateDeferFlag_Draw);
#if DEBUG_DISPLAY_LIST_OPS_AS_EVENTS
- renderer.eventMark(strlen(op->name()), op->name());
+ renderer.eventMark(op->name());
#endif
status |= op->applyDraw(renderer, dirty, 0);
logBuffer.writeCommand(0, op->name());
@@ -134,7 +134,6 @@
virtual status_t replay(OpenGLRenderer& renderer, Rect& dirty) {
DEFER_LOGD("batch %p restoring to count %d", this, mRestoreCount);
renderer.restoreToCount(mRestoreCount);
-
return DrawGlInfo::kStatusDone;
}
@@ -373,9 +372,10 @@
DEFER_LOGD("--flushing");
renderer.eventMark("Flush");
+ DrawModifiers restoreDrawModifiers = renderer.getDrawModifiers();
renderer.restoreToCount(1);
status |= replayBatchList(mBatches, renderer, dirty);
- renderer.resetDrawModifiers();
+ renderer.setDrawModifiers(restoreDrawModifiers);
DEFER_LOGD("--flush complete, returning %x", status);