diff options
author | John Reck <jreck@google.com> | 2014-06-03 15:53:15 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2014-06-04 12:21:26 -0700 |
commit | e4267ea4f20740c37c01bfb6aefcf61fddc4566a (patch) | |
tree | 0d00c8bff43f8b0cbe4284e51299f5ca128c83c3 /libs/hwui/DamageAccumulator.h | |
parent | 79c7de77a7da9cbcb9428ab6203987feb35a427f (diff) |
Even FASTER damage calculations!
* Now with more native!
* Less matrix math thanks to bulk-property-update support!
* Zero JNI on the View.damageInParent() path!
* Fully aware of RT-driven animators!
* Likely full of new and exciting bugs!
* But it also fixes at least 1 existing invalidate bug!
Change-Id: Ie0773f85a60850ff2668370c58defef2e8aa079f
Diffstat (limited to 'libs/hwui/DamageAccumulator.h')
-rw-r--r-- | libs/hwui/DamageAccumulator.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/libs/hwui/DamageAccumulator.h b/libs/hwui/DamageAccumulator.h new file mode 100644 index 000000000000..c62a351fc9d0 --- /dev/null +++ b/libs/hwui/DamageAccumulator.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef DAMAGEACCUMULATOR_H +#define DAMAGEACCUMULATOR_H + +#include <utils/LinearAllocator.h> + +#include <SkMatrix.h> +#include <SkRect.h> + +#include "utils/Macros.h" + +namespace android { +namespace uirenderer { + +struct DirtyStack; +class RenderNode; + +class DamageAccumulator { + PREVENT_COPY_AND_ASSIGN(DamageAccumulator); +public: + DamageAccumulator(); + // mAllocator will clean everything up for us, no need for a dtor + + // Push a transform node onto the stack. This should be called prior + // to any dirty() calls. Subsequent calls to dirty() + // will be affected by the node's transform when popNode() is called. + void pushNode(const RenderNode* node); + // Pops a transform node from the stack, propagating the dirty rect + // up to the parent node. + void popNode(); + void dirty(float left, float top, float right, float bottom); + + void finish(SkRect* totalDirty); + +private: + LinearAllocator mAllocator; + DirtyStack* mHead; +}; + +} /* namespace uirenderer */ +} /* namespace android */ + +#endif /* DAMAGEACCUMULATOR_H */ |