diff options
| author | John Reck <jreck@google.com> | 2014-06-13 02:32:19 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-06-12 05:34:42 +0000 |
| commit | 816f71b7e0dc263362e9fc8d251c8d1944bff17c (patch) | |
| tree | 7f8dc82b247276502976e80945f5b86716d20b7e /libs/hwui/DamageAccumulator.cpp | |
| parent | c0daabbec3da4a39457ce62a15a909983a2368f1 (diff) | |
| parent | 25fbb3fa1138675379102a44405852555cefccbd (diff) | |
| download | frameworks_base-816f71b7e0dc263362e9fc8d251c8d1944bff17c.zip frameworks_base-816f71b7e0dc263362e9fc8d251c8d1944bff17c.tar.gz frameworks_base-816f71b7e0dc263362e9fc8d251c8d1944bff17c.tar.bz2 | |
Merge "Move LayerType to RenderNode"
Diffstat (limited to 'libs/hwui/DamageAccumulator.cpp')
| -rw-r--r-- | libs/hwui/DamageAccumulator.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/libs/hwui/DamageAccumulator.cpp b/libs/hwui/DamageAccumulator.cpp index 898e81a..1cb87f2 100644 --- a/libs/hwui/DamageAccumulator.cpp +++ b/libs/hwui/DamageAccumulator.cpp @@ -35,6 +35,7 @@ NullDamageAccumulator* NullDamageAccumulator::instance() { enum TransformType { TransformRenderNode, TransformMatrix4, + TransformNone, }; struct DirtyStack { @@ -80,14 +81,25 @@ void DamageAccumulator::pushTransform(const Matrix4* transform) { mHead->matrix4 = transform; } +void DamageAccumulator::pushNullTransform() { + pushCommon(); + mHead->type = TransformNone; +} + void DamageAccumulator::popTransform() { LOG_ALWAYS_FATAL_IF(mHead->prev == mHead, "Cannot pop the root frame!"); DirtyStack* dirtyFrame = mHead; mHead = mHead->prev; - if (dirtyFrame->type == TransformRenderNode) { + switch (dirtyFrame->type) { + case TransformRenderNode: applyRenderNodeTransform(dirtyFrame); - } else { + break; + case TransformMatrix4: applyMatrix4Transform(dirtyFrame); + break; + case TransformNone: + mHead->pendingDirty.join(dirtyFrame->pendingDirty); + break; } } @@ -186,6 +198,10 @@ void DamageAccumulator::dirty(float left, float top, float right, float bottom) mHead->pendingDirty.join(left, top, right, bottom); } +void DamageAccumulator::peekAtDirty(SkRect* dest) { + *dest = mHead->pendingDirty; +} + void DamageAccumulator::finish(SkRect* totalDirty) { LOG_ALWAYS_FATAL_IF(mHead->prev != mHead, "Cannot finish, mismatched push/pop calls! %p vs. %p", mHead->prev, mHead); // Root node never has a transform, so this is the fully mapped dirty rect |
