RenderNode.h revision 2dc236b2bae13b9a0ed9b3f7320502aecd7983b3
1113e0824d6bddf4376240681f9cf6a2deded9498John Reck/* 2113e0824d6bddf4376240681f9cf6a2deded9498John Reck * Copyright (C) 2014 The Android Open Source Project 3113e0824d6bddf4376240681f9cf6a2deded9498John Reck * 4113e0824d6bddf4376240681f9cf6a2deded9498John Reck * Licensed under the Apache License, Version 2.0 (the "License"); 5113e0824d6bddf4376240681f9cf6a2deded9498John Reck * you may not use this file except in compliance with the License. 6113e0824d6bddf4376240681f9cf6a2deded9498John Reck * You may obtain a copy of the License at 7113e0824d6bddf4376240681f9cf6a2deded9498John Reck * 8113e0824d6bddf4376240681f9cf6a2deded9498John Reck * http://www.apache.org/licenses/LICENSE-2.0 9113e0824d6bddf4376240681f9cf6a2deded9498John Reck * 10113e0824d6bddf4376240681f9cf6a2deded9498John Reck * Unless required by applicable law or agreed to in writing, software 11113e0824d6bddf4376240681f9cf6a2deded9498John Reck * distributed under the License is distributed on an "AS IS" BASIS, 12113e0824d6bddf4376240681f9cf6a2deded9498John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13113e0824d6bddf4376240681f9cf6a2deded9498John Reck * See the License for the specific language governing permissions and 14113e0824d6bddf4376240681f9cf6a2deded9498John Reck * limitations under the License. 15113e0824d6bddf4376240681f9cf6a2deded9498John Reck */ 16113e0824d6bddf4376240681f9cf6a2deded9498John Reck#ifndef RENDERNODE_H 17113e0824d6bddf4376240681f9cf6a2deded9498John Reck#define RENDERNODE_H 18113e0824d6bddf4376240681f9cf6a2deded9498John Reck 19113e0824d6bddf4376240681f9cf6a2deded9498John Reck#ifndef LOG_TAG 20113e0824d6bddf4376240681f9cf6a2deded9498John Reck #define LOG_TAG "OpenGLRenderer" 21113e0824d6bddf4376240681f9cf6a2deded9498John Reck#endif 22113e0824d6bddf4376240681f9cf6a2deded9498John Reck 23113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include <SkCamera.h> 24113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include <SkMatrix.h> 25113e0824d6bddf4376240681f9cf6a2deded9498John Reck 26113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include <utils/LinearAllocator.h> 27113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include <utils/RefBase.h> 28113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include <utils/String8.h> 29113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include <utils/Vector.h> 30113e0824d6bddf4376240681f9cf6a2deded9498John Reck 31113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include <cutils/compiler.h> 32113e0824d6bddf4376240681f9cf6a2deded9498John Reck 33113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include <androidfw/ResourceTypes.h> 34113e0824d6bddf4376240681f9cf6a2deded9498John Reck 3568bfe0a37a0dcef52abd81688d8520c5d16e1a85John Reck#include "AnimatorManager.h" 36113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include "Debug.h" 37113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include "Matrix.h" 38113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include "DisplayList.h" 39113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include "RenderProperties.h" 40113e0824d6bddf4376240681f9cf6a2deded9498John Reck 41113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass SkBitmap; 42113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass SkPaint; 43113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass SkPath; 44113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass SkRegion; 45113e0824d6bddf4376240681f9cf6a2deded9498John Reck 46113e0824d6bddf4376240681f9cf6a2deded9498John Recknamespace android { 47113e0824d6bddf4376240681f9cf6a2deded9498John Recknamespace uirenderer { 48113e0824d6bddf4376240681f9cf6a2deded9498John Reck 49113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass DisplayListOp; 50113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass DisplayListRenderer; 51113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass OpenGLRenderer; 52113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass Rect; 53113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass Layer; 54113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass SkiaShader; 55113e0824d6bddf4376240681f9cf6a2deded9498John Reck 56113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass ClipRectOp; 57113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass SaveLayerOp; 58113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass SaveOp; 59113e0824d6bddf4376240681f9cf6a2deded9498John Reckclass RestoreToCountOp; 60a7090e0cfd7c719a6d4c03aae34f5db98754cbddChris Craikclass DrawRenderNodeOp; 612dc236b2bae13b9a0ed9b3f7320502aecd7983b3Tom Hudsonclass TreeInfo; 62113e0824d6bddf4376240681f9cf6a2deded9498John Reck 63113e0824d6bddf4376240681f9cf6a2deded9498John Reck/** 64113e0824d6bddf4376240681f9cf6a2deded9498John Reck * Primary class for storing recorded canvas commands, as well as per-View/ViewGroup display properties. 65113e0824d6bddf4376240681f9cf6a2deded9498John Reck * 66113e0824d6bddf4376240681f9cf6a2deded9498John Reck * Recording of canvas commands is somewhat similar to SkPicture, except the canvas-recording 67113e0824d6bddf4376240681f9cf6a2deded9498John Reck * functionality is split between DisplayListRenderer (which manages the recording), DisplayListData 68113e0824d6bddf4376240681f9cf6a2deded9498John Reck * (which holds the actual data), and DisplayList (which holds properties and performs playback onto 69113e0824d6bddf4376240681f9cf6a2deded9498John Reck * a renderer). 70113e0824d6bddf4376240681f9cf6a2deded9498John Reck * 71113e0824d6bddf4376240681f9cf6a2deded9498John Reck * Note that DisplayListData is swapped out from beneath an individual DisplayList when a view's 72113e0824d6bddf4376240681f9cf6a2deded9498John Reck * recorded stream of canvas operations is refreshed. The DisplayList (and its properties) stay 73113e0824d6bddf4376240681f9cf6a2deded9498John Reck * attached. 74113e0824d6bddf4376240681f9cf6a2deded9498John Reck */ 75087bc0c14bdccf7c258dce0cdef46a69a839b427John Reckclass RenderNode : public VirtualLightRefBase { 76113e0824d6bddf4376240681f9cf6a2deded9498John Reckpublic: 77ff941dcd815021bb20d6504eb486acb1e50592c3John Reck enum DirtyPropertyMask { 78ff941dcd815021bb20d6504eb486acb1e50592c3John Reck GENERIC = 1 << 1, 79ff941dcd815021bb20d6504eb486acb1e50592c3John Reck TRANSLATION_X = 1 << 2, 80ff941dcd815021bb20d6504eb486acb1e50592c3John Reck TRANSLATION_Y = 1 << 3, 81ff941dcd815021bb20d6504eb486acb1e50592c3John Reck TRANSLATION_Z = 1 << 4, 82ff941dcd815021bb20d6504eb486acb1e50592c3John Reck SCALE_X = 1 << 5, 83ff941dcd815021bb20d6504eb486acb1e50592c3John Reck SCALE_Y = 1 << 6, 84ff941dcd815021bb20d6504eb486acb1e50592c3John Reck ROTATION = 1 << 7, 85ff941dcd815021bb20d6504eb486acb1e50592c3John Reck ROTATION_X = 1 << 8, 86ff941dcd815021bb20d6504eb486acb1e50592c3John Reck ROTATION_Y = 1 << 9, 87ff941dcd815021bb20d6504eb486acb1e50592c3John Reck X = 1 << 10, 88ff941dcd815021bb20d6504eb486acb1e50592c3John Reck Y = 1 << 11, 89ff941dcd815021bb20d6504eb486acb1e50592c3John Reck Z = 1 << 12, 90ff941dcd815021bb20d6504eb486acb1e50592c3John Reck ALPHA = 1 << 13, 91a7c2ea20c43ab797bef5801530687e22e83def8fJohn Reck DISPLAY_LIST = 1 << 14, 92ff941dcd815021bb20d6504eb486acb1e50592c3John Reck }; 93ff941dcd815021bb20d6504eb486acb1e50592c3John Reck 94113e0824d6bddf4376240681f9cf6a2deded9498John Reck ANDROID_API RenderNode(); 95e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck ANDROID_API virtual ~RenderNode(); 96113e0824d6bddf4376240681f9cf6a2deded9498John Reck 97113e0824d6bddf4376240681f9cf6a2deded9498John Reck // See flags defined in DisplayList.java 98113e0824d6bddf4376240681f9cf6a2deded9498John Reck enum ReplayFlag { 99113e0824d6bddf4376240681f9cf6a2deded9498John Reck kReplayFlag_ClipChildren = 0x1 100113e0824d6bddf4376240681f9cf6a2deded9498John Reck }; 101113e0824d6bddf4376240681f9cf6a2deded9498John Reck 102113e0824d6bddf4376240681f9cf6a2deded9498John Reck ANDROID_API static void outputLogBuffer(int fd); 103443a714fa7c0dd07fee3527cc5bc3d3ca1fb7d44John Reck void debugDumpLayers(const char* prefix); 104113e0824d6bddf4376240681f9cf6a2deded9498John Reck 1058de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck ANDROID_API void setStagingDisplayList(DisplayListData* newData); 106113e0824d6bddf4376240681f9cf6a2deded9498John Reck 107113e0824d6bddf4376240681f9cf6a2deded9498John Reck void computeOrdering(); 108b265e2ca50b6ceb2fd2987ef1f7d063b1bde19aeChris Craik 10980d4902196899d1325cd9f52c06ae0174cf9bd4cChris Craik void defer(DeferStateStruct& deferStruct, const int level); 11080d4902196899d1325cd9f52c06ae0174cf9bd4cChris Craik void replay(ReplayStateStruct& replayStruct, const int level); 111113e0824d6bddf4376240681f9cf6a2deded9498John Reck 112113e0824d6bddf4376240681f9cf6a2deded9498John Reck ANDROID_API void output(uint32_t level = 1); 113fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck ANDROID_API int getDebugSize(); 114113e0824d6bddf4376240681f9cf6a2deded9498John Reck 115113e0824d6bddf4376240681f9cf6a2deded9498John Reck bool isRenderable() const { 1168afd0f245cc0c4a0366f39f41b5f78e47ee83be3Chris Craik return mDisplayListData && !mDisplayListData->isEmpty(); 117113e0824d6bddf4376240681f9cf6a2deded9498John Reck } 118113e0824d6bddf4376240681f9cf6a2deded9498John Reck 119a447d29c65fb811cd184775a3476101a1cede929John Reck bool hasProjectionReceiver() const { 120a447d29c65fb811cd184775a3476101a1cede929John Reck return mDisplayListData && mDisplayListData->projectionReceiveIndex >= 0; 121a447d29c65fb811cd184775a3476101a1cede929John Reck } 122a447d29c65fb811cd184775a3476101a1cede929John Reck 123defb7f37fe67ef2389666f7adc5da1260df87017Chris Craik const char* getName() const { 124defb7f37fe67ef2389666f7adc5da1260df87017Chris Craik return mName.string(); 125defb7f37fe67ef2389666f7adc5da1260df87017Chris Craik } 126defb7f37fe67ef2389666f7adc5da1260df87017Chris Craik 127113e0824d6bddf4376240681f9cf6a2deded9498John Reck void setName(const char* name) { 128113e0824d6bddf4376240681f9cf6a2deded9498John Reck if (name) { 129113e0824d6bddf4376240681f9cf6a2deded9498John Reck char* lastPeriod = strrchr(name, '.'); 130113e0824d6bddf4376240681f9cf6a2deded9498John Reck if (lastPeriod) { 131113e0824d6bddf4376240681f9cf6a2deded9498John Reck mName.setTo(lastPeriod + 1); 132113e0824d6bddf4376240681f9cf6a2deded9498John Reck } else { 133113e0824d6bddf4376240681f9cf6a2deded9498John Reck mName.setTo(name); 134113e0824d6bddf4376240681f9cf6a2deded9498John Reck } 135113e0824d6bddf4376240681f9cf6a2deded9498John Reck } 136113e0824d6bddf4376240681f9cf6a2deded9498John Reck } 137113e0824d6bddf4376240681f9cf6a2deded9498John Reck 138ff941dcd815021bb20d6504eb486acb1e50592c3John Reck bool isPropertyFieldDirty(DirtyPropertyMask field) const { 139ff941dcd815021bb20d6504eb486acb1e50592c3John Reck return mDirtyPropertyFields & field; 140ff941dcd815021bb20d6504eb486acb1e50592c3John Reck } 141ff941dcd815021bb20d6504eb486acb1e50592c3John Reck 142ff941dcd815021bb20d6504eb486acb1e50592c3John Reck void setPropertyFieldsDirty(uint32_t fields) { 143ff941dcd815021bb20d6504eb486acb1e50592c3John Reck mDirtyPropertyFields |= fields; 144ff941dcd815021bb20d6504eb486acb1e50592c3John Reck } 145ff941dcd815021bb20d6504eb486acb1e50592c3John Reck 146e4267ea4f20740c37c01bfb6aefcf61fddc4566aJohn Reck const RenderProperties& properties() const { 147113e0824d6bddf4376240681f9cf6a2deded9498John Reck return mProperties; 148113e0824d6bddf4376240681f9cf6a2deded9498John Reck } 149113e0824d6bddf4376240681f9cf6a2deded9498John Reck 15052244fff29042926e21fa897ef5ab11148e35299John Reck RenderProperties& animatorProperties() { 15152244fff29042926e21fa897ef5ab11148e35299John Reck return mProperties; 15252244fff29042926e21fa897ef5ab11148e35299John Reck } 15352244fff29042926e21fa897ef5ab11148e35299John Reck 154d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const RenderProperties& stagingProperties() { 155d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mStagingProperties; 156d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 157d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 158d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck RenderProperties& mutateStagingProperties() { 159d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mStagingProperties; 160d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 161d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 162113e0824d6bddf4376240681f9cf6a2deded9498John Reck int getWidth() { 163113e0824d6bddf4376240681f9cf6a2deded9498John Reck return properties().getWidth(); 164113e0824d6bddf4376240681f9cf6a2deded9498John Reck } 165113e0824d6bddf4376240681f9cf6a2deded9498John Reck 166113e0824d6bddf4376240681f9cf6a2deded9498John Reck int getHeight() { 167113e0824d6bddf4376240681f9cf6a2deded9498John Reck return properties().getHeight(); 168113e0824d6bddf4376240681f9cf6a2deded9498John Reck } 169113e0824d6bddf4376240681f9cf6a2deded9498John Reck 170e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck ANDROID_API virtual void prepareTree(TreeInfo& info); 171dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck void destroyHardwareResources(); 172e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 173e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck // UI thread only! 17468bfe0a37a0dcef52abd81688d8520c5d16e1a85John Reck ANDROID_API void addAnimator(const sp<BaseRenderNodeAnimator>& animator); 175668f0e38ef0277d55d3118af37e17b8c435df85cJohn Reck 176119907cd2575c56b1ebf66348b52e67aaf6a88d8John Reck AnimatorManager& animators() { return mAnimatorManager; } 177119907cd2575c56b1ebf66348b52e67aaf6a88d8John Reck 17869e5adffb19135d51bde8e458f4907d7265f3e23Chris Craik void applyViewPropertyTransforms(mat4& matrix, bool true3dTransform = false) const; 17969e5adffb19135d51bde8e458f4907d7265f3e23Chris Craik 180113e0824d6bddf4376240681f9cf6a2deded9498John Reckprivate: 181a7090e0cfd7c719a6d4c03aae34f5db98754cbddChris Craik typedef key_value_pair_t<float, DrawRenderNodeOp*> ZDrawRenderNodeOpPair; 182113e0824d6bddf4376240681f9cf6a2deded9498John Reck 183a7090e0cfd7c719a6d4c03aae34f5db98754cbddChris Craik static size_t findNonNegativeIndex(const Vector<ZDrawRenderNodeOpPair>& nodes) { 184113e0824d6bddf4376240681f9cf6a2deded9498John Reck for (size_t i = 0; i < nodes.size(); i++) { 185113e0824d6bddf4376240681f9cf6a2deded9498John Reck if (nodes[i].key >= 0.0f) return i; 186113e0824d6bddf4376240681f9cf6a2deded9498John Reck } 187113e0824d6bddf4376240681f9cf6a2deded9498John Reck return nodes.size(); 188113e0824d6bddf4376240681f9cf6a2deded9498John Reck } 189113e0824d6bddf4376240681f9cf6a2deded9498John Reck 190113e0824d6bddf4376240681f9cf6a2deded9498John Reck enum ChildrenSelectMode { 191113e0824d6bddf4376240681f9cf6a2deded9498John Reck kNegativeZChildren, 192113e0824d6bddf4376240681f9cf6a2deded9498John Reck kPositiveZChildren 193113e0824d6bddf4376240681f9cf6a2deded9498John Reck }; 194113e0824d6bddf4376240681f9cf6a2deded9498John Reck 195a7090e0cfd7c719a6d4c03aae34f5db98754cbddChris Craik void computeOrderingImpl(DrawRenderNodeOp* opState, 1963f085429fd47ebd32ac2463b3eae2a5a6c17be25Chris Craik const SkPath* outlineOfProjectionSurface, 197a7090e0cfd7c719a6d4c03aae34f5db98754cbddChris Craik Vector<DrawRenderNodeOp*>* compositedChildrenOfProjectionSurface, 198113e0824d6bddf4376240681f9cf6a2deded9498John Reck const mat4* transformFromProjectionSurface); 199113e0824d6bddf4376240681f9cf6a2deded9498John Reck 200113e0824d6bddf4376240681f9cf6a2deded9498John Reck template <class T> 201b265e2ca50b6ceb2fd2987ef1f7d063b1bde19aeChris Craik inline void setViewProperties(OpenGLRenderer& renderer, T& handler); 202113e0824d6bddf4376240681f9cf6a2deded9498John Reck 2038afd0f245cc0c4a0366f39f41b5f78e47ee83be3Chris Craik void buildZSortedChildList(const DisplayListData::Chunk& chunk, 2048afd0f245cc0c4a0366f39f41b5f78e47ee83be3Chris Craik Vector<ZDrawRenderNodeOpPair>& zTranslatedNodes); 205113e0824d6bddf4376240681f9cf6a2deded9498John Reck 206b265e2ca50b6ceb2fd2987ef1f7d063b1bde19aeChris Craik template<class T> 207b265e2ca50b6ceb2fd2987ef1f7d063b1bde19aeChris Craik inline void issueDrawShadowOperation(const Matrix4& transformFromParent, T& handler); 208b265e2ca50b6ceb2fd2987ef1f7d063b1bde19aeChris Craik 209113e0824d6bddf4376240681f9cf6a2deded9498John Reck template <class T> 210c3e75f9d54b3629b3fd27afafa2e07bd07dad9b3Chris Craik inline void issueOperationsOf3dChildren(ChildrenSelectMode mode, 211c3e75f9d54b3629b3fd27afafa2e07bd07dad9b3Chris Craik const Matrix4& initialTransform, const Vector<ZDrawRenderNodeOpPair>& zTranslatedNodes, 21280d4902196899d1325cd9f52c06ae0174cf9bd4cChris Craik OpenGLRenderer& renderer, T& handler); 213113e0824d6bddf4376240681f9cf6a2deded9498John Reck 214113e0824d6bddf4376240681f9cf6a2deded9498John Reck template <class T> 215b265e2ca50b6ceb2fd2987ef1f7d063b1bde19aeChris Craik inline void issueOperationsOfProjectedChildren(OpenGLRenderer& renderer, T& handler); 216113e0824d6bddf4376240681f9cf6a2deded9498John Reck 217b265e2ca50b6ceb2fd2987ef1f7d063b1bde19aeChris Craik /** 218b265e2ca50b6ceb2fd2987ef1f7d063b1bde19aeChris Craik * Issue the RenderNode's operations into a handler, recursing for subtrees through 219a7090e0cfd7c719a6d4c03aae34f5db98754cbddChris Craik * DrawRenderNodeOp's defer() or replay() methods 220b265e2ca50b6ceb2fd2987ef1f7d063b1bde19aeChris Craik */ 221113e0824d6bddf4376240681f9cf6a2deded9498John Reck template <class T> 222b265e2ca50b6ceb2fd2987ef1f7d063b1bde19aeChris Craik inline void issueOperations(OpenGLRenderer& renderer, T& handler); 223113e0824d6bddf4376240681f9cf6a2deded9498John Reck 224113e0824d6bddf4376240681f9cf6a2deded9498John Reck class TextContainer { 225113e0824d6bddf4376240681f9cf6a2deded9498John Reck public: 226113e0824d6bddf4376240681f9cf6a2deded9498John Reck size_t length() const { 227113e0824d6bddf4376240681f9cf6a2deded9498John Reck return mByteLength; 228113e0824d6bddf4376240681f9cf6a2deded9498John Reck } 229113e0824d6bddf4376240681f9cf6a2deded9498John Reck 230113e0824d6bddf4376240681f9cf6a2deded9498John Reck const char* text() const { 231113e0824d6bddf4376240681f9cf6a2deded9498John Reck return (const char*) mText; 232113e0824d6bddf4376240681f9cf6a2deded9498John Reck } 233113e0824d6bddf4376240681f9cf6a2deded9498John Reck 234113e0824d6bddf4376240681f9cf6a2deded9498John Reck size_t mByteLength; 235113e0824d6bddf4376240681f9cf6a2deded9498John Reck const char* mText; 236113e0824d6bddf4376240681f9cf6a2deded9498John Reck }; 237113e0824d6bddf4376240681f9cf6a2deded9498John Reck 238f4198b713e43c0c0f9adac74203cf24c2a49b802John Reck void prepareTreeImpl(TreeInfo& info); 23925fbb3fa1138675379102a44405852555cefccbdJohn Reck void pushStagingPropertiesChanges(TreeInfo& info); 24025fbb3fa1138675379102a44405852555cefccbdJohn Reck void pushStagingDisplayListChanges(TreeInfo& info); 241f4198b713e43c0c0f9adac74203cf24c2a49b802John Reck void prepareSubTree(TreeInfo& info, DisplayListData* subtree); 24225fbb3fa1138675379102a44405852555cefccbdJohn Reck void applyLayerPropertiesToLayer(TreeInfo& info); 243a7c2ea20c43ab797bef5801530687e22e83def8fJohn Reck void prepareLayer(TreeInfo& info, uint32_t dirtyMask); 24425fbb3fa1138675379102a44405852555cefccbdJohn Reck void pushLayerUpdate(TreeInfo& info); 245dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck void deleteDisplayListData(); 2460a97330b98dd633b58dcfff405d94476c89e867dJohn Reck void damageSelf(TreeInfo& info); 247dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck 248dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck void incParentRefCount() { mParentCount++; } 249dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck void decParentRefCount(); 2508de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck 251113e0824d6bddf4376240681f9cf6a2deded9498John Reck String8 mName; 252113e0824d6bddf4376240681f9cf6a2deded9498John Reck 253ff941dcd815021bb20d6504eb486acb1e50592c3John Reck uint32_t mDirtyPropertyFields; 254113e0824d6bddf4376240681f9cf6a2deded9498John Reck RenderProperties mProperties; 255d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck RenderProperties mStagingProperties; 256d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 2578de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck bool mNeedsDisplayListDataSync; 258dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck // WARNING: Do not delete this directly, you must go through deleteDisplayListData()! 259113e0824d6bddf4376240681f9cf6a2deded9498John Reck DisplayListData* mDisplayListData; 2608de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck DisplayListData* mStagingDisplayListData; 261113e0824d6bddf4376240681f9cf6a2deded9498John Reck 26268bfe0a37a0dcef52abd81688d8520c5d16e1a85John Reck friend class AnimatorManager; 26368bfe0a37a0dcef52abd81688d8520c5d16e1a85John Reck AnimatorManager mAnimatorManager; 264e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 26525fbb3fa1138675379102a44405852555cefccbdJohn Reck // Owned by RT. Lifecycle is managed by prepareTree(), with the exception 26625fbb3fa1138675379102a44405852555cefccbdJohn Reck // being in ~RenderNode() which may happen on any thread. 26725fbb3fa1138675379102a44405852555cefccbdJohn Reck Layer* mLayer; 26825fbb3fa1138675379102a44405852555cefccbdJohn Reck 269113e0824d6bddf4376240681f9cf6a2deded9498John Reck /** 270113e0824d6bddf4376240681f9cf6a2deded9498John Reck * Draw time state - these properties are only set and used during rendering 271113e0824d6bddf4376240681f9cf6a2deded9498John Reck */ 272113e0824d6bddf4376240681f9cf6a2deded9498John Reck 273113e0824d6bddf4376240681f9cf6a2deded9498John Reck // for projection surfaces, contains a list of all children items 274a7090e0cfd7c719a6d4c03aae34f5db98754cbddChris Craik Vector<DrawRenderNodeOp*> mProjectedNodes; 275dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck 276dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck // How many references our parent(s) have to us. Typically this should alternate 277dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck // between 2 and 1 (when a staging push happens we inc first then dec) 278dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck // When this hits 0 we are no longer in the tree, so any hardware resources 279dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck // (specifically Layers) should be released. 280dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck // This is *NOT* thread-safe, and should therefore only be tracking 281dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck // mDisplayListData, not mStagingDisplayListData. 282dcba6725e8b9d3eba9ad7a01258d6aa974feafbaJohn Reck uint32_t mParentCount; 283113e0824d6bddf4376240681f9cf6a2deded9498John Reck}; // class RenderNode 284113e0824d6bddf4376240681f9cf6a2deded9498John Reck 285113e0824d6bddf4376240681f9cf6a2deded9498John Reck} /* namespace uirenderer */ 286113e0824d6bddf4376240681f9cf6a2deded9498John Reck} /* namespace android */ 287113e0824d6bddf4376240681f9cf6a2deded9498John Reck 288113e0824d6bddf4376240681f9cf6a2deded9498John Reck#endif /* RENDERNODE_H */ 289