diff options
author | Huihong Luo <huisinro@google.com> | 2021-01-15 14:27:06 -0800 |
---|---|---|
committer | Jorim Jaggi <jjaggi@google.com> | 2021-02-16 17:38:12 +0100 |
commit | 5fdf7b8d26f3cd1a2f2fb8a441d40d33270d3b77 (patch) | |
tree | 42fb177d3a385875f96f560e5abc6ab35d034d7c /libs/hwui/renderthread/CanvasContext.cpp | |
parent | d8385e060c12acc21010956f4fbe57daa526a41a (diff) |
Add SurfaceControl to hwui
add a method, setSurfaceControl, for java layer to pass surface control to the render thread
Bug: 173671170
Test: call setSurfaceControl method in ViewRootImpl.java
Change-Id: I886a79c377938f19cf38b9058f2bec64e1439000
Diffstat (limited to 'libs/hwui/renderthread/CanvasContext.cpp')
-rw-r--r-- | libs/hwui/renderthread/CanvasContext.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index 65afcc3a2558..9543d47640e6 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -133,6 +133,7 @@ void CanvasContext::removeRenderNode(RenderNode* node) { void CanvasContext::destroy() { stopDrawing(); setSurface(nullptr); + setSurfaceControl(nullptr); freePrefetchedLayers(); destroyHardwareResources(); mAnimationContext->destroy(); @@ -173,6 +174,19 @@ void CanvasContext::setSurface(ANativeWindow* window, bool enableTimeout) { setupPipelineSurface(); } +void CanvasContext::setSurfaceControl(ASurfaceControl* surfaceControl) { + if (surfaceControl == mSurfaceControl) return; + + auto funcs = mRenderThread.getASurfaceControlFunctions(); + if (mSurfaceControl != nullptr) { + funcs.releaseFunc(mSurfaceControl); + } + mSurfaceControl = surfaceControl; + if (mSurfaceControl != nullptr) { + funcs.acquireFunc(mSurfaceControl); + } +} + void CanvasContext::setupPipelineSurface() { bool hasSurface = mRenderPipeline->setSurface( mNativeSurface ? mNativeSurface->getNativeWindow() : nullptr, mSwapBehavior); |