diff options
author | John Reck <jreck@google.com> | 2014-04-04 16:20:08 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2014-04-07 14:53:08 -0700 |
commit | 087bc0c14bdccf7c258dce0cdef46a69a839b427 (patch) | |
tree | cab73aeed8e9a0bc8e74243a35c026ab0b321e08 /libs/hwui/renderthread/DrawFrameTask.h | |
parent | ce16215d7b4d9bedfc62e172dc44ab439afef13a (diff) |
Refcount RenderNode
Change-Id: I7a86db8acc2b78ef33d987a43a119f5933d7d752
Diffstat (limited to 'libs/hwui/renderthread/DrawFrameTask.h')
-rw-r--r-- | libs/hwui/renderthread/DrawFrameTask.h | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/libs/hwui/renderthread/DrawFrameTask.h b/libs/hwui/renderthread/DrawFrameTask.h index 5450dd57133e..4e9b24487b47 100644 --- a/libs/hwui/renderthread/DrawFrameTask.h +++ b/libs/hwui/renderthread/DrawFrameTask.h @@ -18,6 +18,7 @@ #include <utils/Condition.h> #include <utils/Mutex.h> +#include <utils/StrongPointer.h> #include <utils/Vector.h> #include "RenderTask.h" @@ -36,9 +37,16 @@ namespace renderthread { class CanvasContext; class RenderThread; -struct SetDisplayListData { - RenderNode* targetNode; - DisplayListData* newData; +class SetDisplayListData { +public: + // This ctor exists for Vector's usage + SetDisplayListData(); + SetDisplayListData(RenderNode* node, DisplayListData* newData); + ~SetDisplayListData(); + void apply() const; +private: + sp<RenderNode> mTargetNode; + DisplayListData* mNewData; }; /* @@ -61,10 +69,18 @@ public: void setRenderNode(RenderNode* renderNode); void setDirty(int left, int top, int right, int bottom); void drawFrame(RenderThread* renderThread); + void flushStateChanges(RenderThread* renderThread); virtual void run(); private: + enum TaskMode { + MODE_INVALID, + MODE_FULL, + MODE_STATE_ONLY, + }; + + void postAndWait(RenderThread* renderThread, TaskMode mode); void syncFrameState(); void unblockUiThread(); static void drawRenderNode(CanvasContext* context, RenderNode* renderNode, Rect* dirty); @@ -81,7 +97,8 @@ private: /********************************************* * Single frame data *********************************************/ - RenderNode* mRenderNode; + TaskMode mTaskMode; + sp<RenderNode> mRenderNode; Rect mDirty; Vector<SetDisplayListData> mDisplayListDataUpdates; |