diff options
Diffstat (limited to 'libs/hwui/renderthread/CanvasContext.cpp')
-rw-r--r-- | libs/hwui/renderthread/CanvasContext.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index 24821888e2eb..bba22071ecef 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -56,6 +56,22 @@ namespace android { namespace uirenderer { namespace renderthread { +namespace { +class ScopedActiveContext { +public: + ScopedActiveContext(CanvasContext* context) { sActiveContext = context; } + + ~ScopedActiveContext() { sActiveContext = nullptr; } + + static CanvasContext* getActiveContext() { return sActiveContext; } + +private: + static CanvasContext* sActiveContext; +}; + +CanvasContext* ScopedActiveContext::sActiveContext = nullptr; +} /* namespace */ + CanvasContext* CanvasContext::create(RenderThread& thread, bool translucent, RenderNode* rootRenderNode, IContextFactory* contextFactory) { auto renderType = Properties::getRenderPipelineType(); @@ -473,6 +489,7 @@ void CanvasContext::draw() { return; } + ScopedActiveContext activeContext(this); mCurrentFrameInfo->set(FrameInfoIndex::FrameInterval) = mRenderThread.timeLord().frameIntervalNanos(); @@ -880,6 +897,17 @@ SkRect CanvasContext::computeDirtyRect(const Frame& frame, SkRect* dirty) { return windowDirty; } +CanvasContext* CanvasContext::getActiveContext() { + return ScopedActiveContext::getActiveContext(); +} + +bool CanvasContext::mergeTransaction(ASurfaceTransaction* transaction, ASurfaceControl* control) { + if (!mASurfaceTransactionCallback) return false; + std::invoke(mASurfaceTransactionCallback, reinterpret_cast<int64_t>(transaction), + reinterpret_cast<int64_t>(control), getFrameNumber()); + return true; +} + } /* namespace renderthread */ } /* namespace uirenderer */ } /* namespace android */ |