summaryrefslogtreecommitdiffstats
path: root/libs/hwui/DamageAccumulator.cpp
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2014-06-12 13:46:45 -0700
committerJohn Reck <jreck@google.com>2014-06-12 19:25:33 -0700
commit25fbb3fa1138675379102a44405852555cefccbd (patch)
tree510d62715f870f85fc4eea8a781c0265e7eebae5 /libs/hwui/DamageAccumulator.cpp
parenta447d29c65fb811cd184775a3476101a1cede929 (diff)
downloadframeworks_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.cpp20
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