diff options
author | Chris Craik <ccraik@google.com> | 2013-03-22 10:00:48 -0700 |
---|---|---|
committer | Chris Craik <ccraik@google.com> | 2013-03-22 11:54:51 -0700 |
commit | a4e16c58c9e3c983251e0475125a2a6f5bec2dbf (patch) | |
tree | b5c98f99fdc8a80188bf1bcf0fb959484a118735 /libs/hwui | |
parent | 1edaff0709bc3558a6736eac7fccbe8350f2d158 (diff) | |
download | frameworks_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.cpp | 7 |
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); |