diff options
author | John Reck <jreck@google.com> | 2014-06-12 13:46:45 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2014-06-12 19:25:33 -0700 |
commit | 25fbb3fa1138675379102a44405852555cefccbd (patch) | |
tree | 510d62715f870f85fc4eea8a781c0265e7eebae5 /libs/hwui/DamageAccumulator.cpp | |
parent | a447d29c65fb811cd184775a3476101a1cede929 (diff) | |
download | frameworks_base-25fbb3fa1138675379102a44405852555cefccbd.zip frameworks_base-25fbb3fa1138675379102a44405852555cefccbd.tar.gz frameworks_base-25fbb3fa1138675379102a44405852555cefccbd.tar.bz2 |
Move LayerType to RenderNode
Change-Id: Icb79a5015cb0362b1f3a66d09007450730135a97
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 |