diff options
Diffstat (limited to 'libs/hwui/RenderNode.h')
-rw-r--r-- | libs/hwui/RenderNode.h | 56 |
1 files changed, 39 insertions, 17 deletions
diff --git a/libs/hwui/RenderNode.h b/libs/hwui/RenderNode.h index 1a5377b..3980dad 100644 --- a/libs/hwui/RenderNode.h +++ b/libs/hwui/RenderNode.h @@ -39,6 +39,7 @@ #include <androidfw/ResourceTypes.h> +#include "DamageAccumulator.h" #include "Debug.h" #include "Matrix.h" #include "DeferredDisplayList.h" @@ -54,7 +55,6 @@ class SkRegion; namespace android { namespace uirenderer { -class DeferredDisplayList; class DisplayListOp; class DisplayListRenderer; class OpenGLRenderer; @@ -66,7 +66,7 @@ class ClipRectOp; class SaveLayerOp; class SaveOp; class RestoreToCountOp; -class DrawDisplayListOp; +class DrawRenderNodeOp; /** * Primary class for storing recorded canvas commands, as well as per-View/ViewGroup display properties. @@ -112,11 +112,8 @@ public: void computeOrdering(); - void deferNodeTree(DeferStateStruct& deferStruct); - void deferNodeInParent(DeferStateStruct& deferStruct, const int level); - - void replayNodeTree(ReplayStateStruct& replayStruct); - void replayNodeInParent(ReplayStateStruct& replayStruct, const int level); + void defer(DeferStateStruct& deferStruct, const int level); + void replay(ReplayStateStruct& replayStruct, const int level); ANDROID_API void output(uint32_t level = 1); ANDROID_API int getDebugSize(); @@ -125,6 +122,10 @@ public: return mDisplayListData && mDisplayListData->hasDrawOps; } + bool hasProjectionReceiver() const { + return mDisplayListData && mDisplayListData->projectionReceiveIndex >= 0; + } + const char* getName() const { return mName.string(); } @@ -148,7 +149,7 @@ public: mDirtyPropertyFields |= fields; } - const RenderProperties& properties() { + const RenderProperties& properties() const { return mProperties; } @@ -184,13 +185,18 @@ public: // UI thread only! ANDROID_API void removeAnimator(const sp<BaseRenderNodeAnimator>& animator) { mStagingAnimators.erase(animator); + // Force a sync of the staging property value + mDirtyPropertyFields |= animator->dirtyMask(); mNeedsAnimatorsSync = true; } +protected: + virtual void damageSelf(TreeInfo& info); + private: - typedef key_value_pair_t<float, DrawDisplayListOp*> ZDrawDisplayListOpPair; + typedef key_value_pair_t<float, DrawRenderNodeOp*> ZDrawRenderNodeOpPair; - static size_t findNonNegativeIndex(const Vector<ZDrawDisplayListOpPair>& nodes) { + static size_t findNonNegativeIndex(const Vector<ZDrawRenderNodeOpPair>& nodes) { for (size_t i = 0; i < nodes.size(); i++) { if (nodes[i].key >= 0.0f) return i; } @@ -204,21 +210,29 @@ private: void applyViewPropertyTransforms(mat4& matrix, bool true3dTransform = false); - void computeOrderingImpl(DrawDisplayListOp* opState, + void computeOrderingImpl(DrawRenderNodeOp* opState, const SkPath* outlineOfProjectionSurface, - Vector<DrawDisplayListOp*>* compositedChildrenOfProjectionSurface, + Vector<DrawRenderNodeOp*>* compositedChildrenOfProjectionSurface, const mat4* transformFromProjectionSurface); template <class T> inline void setViewProperties(OpenGLRenderer& renderer, T& handler); - void buildZSortedChildList(Vector<ZDrawDisplayListOpPair>& zTranslatedNodes); + void buildZSortedChildList(Vector<ZDrawRenderNodeOpPair>& zTranslatedNodes); template<class T> inline void issueDrawShadowOperation(const Matrix4& transformFromParent, T& handler); template <class T> - inline void issueOperationsOf3dChildren(const Vector<ZDrawDisplayListOpPair>& zTranslatedNodes, + inline int issueOperationsOfNegZChildren( + const Vector<ZDrawRenderNodeOpPair>& zTranslatedNodes, + OpenGLRenderer& renderer, T& handler); + template <class T> + inline void issueOperationsOfPosZChildren(int shadowRestoreTo, + const Vector<ZDrawRenderNodeOpPair>& zTranslatedNodes, + OpenGLRenderer& renderer, T& handler); + template <class T> + inline void issueOperationsOf3dChildren(const Vector<ZDrawRenderNodeOpPair>& zTranslatedNodes, ChildrenSelectMode mode, OpenGLRenderer& renderer, T& handler); template <class T> @@ -226,7 +240,7 @@ private: /** * Issue the RenderNode's operations into a handler, recursing for subtrees through - * DrawDisplayListOp's defer() or replay() methods + * DrawRenderNodeOp's defer() or replay() methods */ template <class T> inline void issueOperations(OpenGLRenderer& renderer, T& handler); @@ -246,9 +260,13 @@ private: }; void prepareTreeImpl(TreeInfo& info); - void pushStagingChanges(TreeInfo& info); + void pushStagingPropertiesChanges(TreeInfo& info); + void pushStagingDisplayListChanges(TreeInfo& info); void evaluateAnimations(TreeInfo& info); void prepareSubTree(TreeInfo& info, DisplayListData* subtree); + void applyLayerPropertiesToLayer(TreeInfo& info); + void prepareLayer(TreeInfo& info); + void pushLayerUpdate(TreeInfo& info); String8 mName; @@ -264,12 +282,16 @@ private: std::set< sp<BaseRenderNodeAnimator> > mStagingAnimators; std::vector< sp<BaseRenderNodeAnimator> > mAnimators; + // Owned by RT. Lifecycle is managed by prepareTree(), with the exception + // being in ~RenderNode() which may happen on any thread. + Layer* mLayer; + /** * Draw time state - these properties are only set and used during rendering */ // for projection surfaces, contains a list of all children items - Vector<DrawDisplayListOp*> mProjectedNodes; + Vector<DrawRenderNodeOp*> mProjectedNodes; }; // class RenderNode } /* namespace uirenderer */ |