summaryrefslogtreecommitdiffstats
path: root/libs/hwui
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2013-03-22 10:00:48 -0700
committerChris Craik <ccraik@google.com>2013-03-22 11:54:51 -0700
commita4e16c58c9e3c983251e0475125a2a6f5bec2dbf (patch)
treeb5c98f99fdc8a80188bf1bcf0fb959484a118735 /libs/hwui
parent1edaff0709bc3558a6736eac7fccbe8350f2d158 (diff)
downloadframeworks_base-a4e16c58c9e3c983251e0475125a2a6f5bec2dbf.zip
frameworks_base-a4e16c58c9e3c983251e0475125a2a6f5bec2dbf.tar.gz
frameworks_base-a4e16c58c9e3c983251e0475125a2a6f5bec2dbf.tar.bz2
Restore final canvas state after deferred flush
bug:8450062 - Fixes overdraw indication with DeferredDisplayList - Fixes drawHardwareLayer called after flush Additionally changes drawLayer to pass its paint to native via setLayerPaint Wrap flush in save/restore so that reordering doesn't affect final transform Change-Id: I08befa42c28500da6387699eefd4be28aedf9f4c
Diffstat (limited to 'libs/hwui')
-rw-r--r--libs/hwui/DeferredDisplayList.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/libs/hwui/DeferredDisplayList.cpp b/libs/hwui/DeferredDisplayList.cpp
index 7907224..020c1e9 100644
--- a/libs/hwui/DeferredDisplayList.cpp
+++ b/libs/hwui/DeferredDisplayList.cpp
@@ -368,13 +368,18 @@ status_t DeferredDisplayList::flush(OpenGLRenderer& renderer, Rect& dirty) {
status_t status = DrawGlInfo::kStatusDone;
if (isEmpty()) return status; // nothing to flush
+ renderer.restoreToCount(1);
DEFER_LOGD("--flushing");
renderer.eventMark("Flush");
+ // save and restore (with draw modifiers) so that reordering doesn't affect final state
DrawModifiers restoreDrawModifiers = renderer.getDrawModifiers();
- renderer.restoreToCount(1);
+ renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
+
status |= replayBatchList(mBatches, renderer, dirty);
+
+ renderer.restoreToCount(1);
renderer.setDrawModifiers(restoreDrawModifiers);
DEFER_LOGD("--flush complete, returning %x", status);