diff options
author | John Reck <jreck@google.com> | 2017-01-25 10:58:30 -0800 |
---|---|---|
committer | John Reck <jreck@google.com> | 2017-01-25 12:24:40 -0800 |
commit | 2de950d5a8b47c7b4648ada1b1260ce4b7342798 (patch) | |
tree | d374208f819ffd994c51f258b9732b231ba7d9a1 /libs/hwui/renderthread/RenderProxy.cpp | |
parent | df7f28352029766755a4187786db12351ce843c6 (diff) |
Overhaul RenderNode's DisplayList management
* Move mValid to native
* Have destroyHardwareResources destroy everything
* Remove flaky mParentCount checks in setStaging
* All tree updates have an internal observer to
ensure onRemovedFromTree() is a reliable signal
* onRemovedFromTree() immediately releases resources
to avoid displaylist "leaks"
Test: Unit tests for validity added & pass, manually
verified that b/34072929 doesn't repro
Bug: 34072929
Change-Id: I856534b4ed1b7f009fc4b7cd13209b97fa42a71c
Diffstat (limited to 'libs/hwui/renderthread/RenderProxy.cpp')
-rw-r--r-- | libs/hwui/renderthread/RenderProxy.cpp | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index 022e871315a9..fb79272e18af 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -230,19 +230,18 @@ int64_t* RenderProxy::frameInfo() { return mDrawFrameTask.frameInfo(); } -int RenderProxy::syncAndDrawFrame(TreeObserver* observer) { - return mDrawFrameTask.drawFrame(observer); +int RenderProxy::syncAndDrawFrame() { + return mDrawFrameTask.drawFrame(); } -CREATE_BRIDGE2(destroy, CanvasContext* context, TreeObserver* observer) { - args->context->destroy(args->observer); +CREATE_BRIDGE1(destroy, CanvasContext* context) { + args->context->destroy(); return nullptr; } -void RenderProxy::destroy(TreeObserver* observer) { +void RenderProxy::destroy() { SETUP_TASK(destroy); args->context = mContext; - args->observer = observer; // destroyCanvasAndSurface() needs a fence as when it returns the // underlying BufferQueue is going to be released from under // the render thread. @@ -282,16 +281,15 @@ DeferredLayerUpdater* RenderProxy::createTextureLayer() { return layer; } -CREATE_BRIDGE3(buildLayer, CanvasContext* context, RenderNode* node, TreeObserver* observer) { - args->context->buildLayer(args->node, args->observer); +CREATE_BRIDGE2(buildLayer, CanvasContext* context, RenderNode* node) { + args->context->buildLayer(args->node); return nullptr; } -void RenderProxy::buildLayer(RenderNode* node, TreeObserver* observer) { +void RenderProxy::buildLayer(RenderNode* node) { SETUP_TASK(buildLayer); args->context = mContext; args->node = node; - args->observer = observer; postAndWait(task); } @@ -328,15 +326,14 @@ void RenderProxy::detachSurfaceTexture(DeferredLayerUpdater* layer) { postAndWait(task); } -CREATE_BRIDGE2(destroyHardwareResources, CanvasContext* context, TreeObserver* observer) { - args->context->destroyHardwareResources(args->observer); +CREATE_BRIDGE1(destroyHardwareResources, CanvasContext* context) { + args->context->destroyHardwareResources(); return nullptr; } -void RenderProxy::destroyHardwareResources(TreeObserver* observer) { +void RenderProxy::destroyHardwareResources() { SETUP_TASK(destroyHardwareResources); args->context = mContext; - args->observer = observer; postAndWait(task); } |