Loading libs/hwui/pipeline/skia/SkiaDisplayList.h +1 −1 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ public: * Use the linear allocator to create any SkDrawables needed by the display * list. This could be dangerous as these objects are ref-counted, so we * need to monitor that they don't extend beyond the lifetime of the class * that creates them. * that creates them. Allocator dtor invokes all SkDrawable dtors. */ template<class T, typename... Params> SkDrawable* allocateDrawable(Params&&... params) { Loading libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ void SkiaRecordingCanvas::drawRoundRect(uirenderer::CanvasPropertyPrimitive* lef uirenderer::CanvasPropertyPrimitive* top, uirenderer::CanvasPropertyPrimitive* right, uirenderer::CanvasPropertyPrimitive* bottom, uirenderer::CanvasPropertyPrimitive* rx, uirenderer::CanvasPropertyPrimitive* ry, uirenderer::CanvasPropertyPaint* paint) { // Destructor of drawables created with allocateDrawable, will be invoked by ~LinearAllocator. drawDrawable(mDisplayList->allocateDrawable<AnimatedRoundRect>(left, top, right, bottom, rx, ry, paint)); } Loading Loading @@ -92,13 +93,14 @@ void SkiaRecordingCanvas::insertReorderBarrier(bool enableReorder) { void SkiaRecordingCanvas::drawLayer(uirenderer::DeferredLayerUpdater* layerUpdater) { if (layerUpdater != nullptr && layerUpdater->backingLayer() != nullptr) { uirenderer::Layer* layer = layerUpdater->backingLayer(); // Create a ref-counted drawable, which is kept alive by sk_sp in SkLiteDL. sk_sp<SkDrawable> drawable(new LayerDrawable(layer)); drawDrawable(drawable.get()); } } void SkiaRecordingCanvas::drawRenderNode(uirenderer::RenderNode* renderNode) { // record the child node // Record the child node. Drawable dtor will be invoked when mChildNodes deque is cleared. mDisplayList->mChildNodes.emplace_back(renderNode, asSkCanvas(), true, mCurrentBarrier); auto& renderNodeDrawable = mDisplayList->mChildNodes.back(); drawDrawable(&renderNodeDrawable); Loading @@ -113,6 +115,7 @@ void SkiaRecordingCanvas::drawRenderNode(uirenderer::RenderNode* renderNode) { void SkiaRecordingCanvas::callDrawGLFunction(Functor* functor, uirenderer::GlFunctorLifecycleListener* listener) { // Drawable dtor will be invoked when mChildFunctors deque is cleared. mDisplayList->mChildFunctors.emplace_back(functor, listener, asSkCanvas()); drawDrawable(&mDisplayList->mChildFunctors.back()); } Loading Loading
libs/hwui/pipeline/skia/SkiaDisplayList.h +1 −1 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ public: * Use the linear allocator to create any SkDrawables needed by the display * list. This could be dangerous as these objects are ref-counted, so we * need to monitor that they don't extend beyond the lifetime of the class * that creates them. * that creates them. Allocator dtor invokes all SkDrawable dtors. */ template<class T, typename... Params> SkDrawable* allocateDrawable(Params&&... params) { Loading
libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ void SkiaRecordingCanvas::drawRoundRect(uirenderer::CanvasPropertyPrimitive* lef uirenderer::CanvasPropertyPrimitive* top, uirenderer::CanvasPropertyPrimitive* right, uirenderer::CanvasPropertyPrimitive* bottom, uirenderer::CanvasPropertyPrimitive* rx, uirenderer::CanvasPropertyPrimitive* ry, uirenderer::CanvasPropertyPaint* paint) { // Destructor of drawables created with allocateDrawable, will be invoked by ~LinearAllocator. drawDrawable(mDisplayList->allocateDrawable<AnimatedRoundRect>(left, top, right, bottom, rx, ry, paint)); } Loading Loading @@ -92,13 +93,14 @@ void SkiaRecordingCanvas::insertReorderBarrier(bool enableReorder) { void SkiaRecordingCanvas::drawLayer(uirenderer::DeferredLayerUpdater* layerUpdater) { if (layerUpdater != nullptr && layerUpdater->backingLayer() != nullptr) { uirenderer::Layer* layer = layerUpdater->backingLayer(); // Create a ref-counted drawable, which is kept alive by sk_sp in SkLiteDL. sk_sp<SkDrawable> drawable(new LayerDrawable(layer)); drawDrawable(drawable.get()); } } void SkiaRecordingCanvas::drawRenderNode(uirenderer::RenderNode* renderNode) { // record the child node // Record the child node. Drawable dtor will be invoked when mChildNodes deque is cleared. mDisplayList->mChildNodes.emplace_back(renderNode, asSkCanvas(), true, mCurrentBarrier); auto& renderNodeDrawable = mDisplayList->mChildNodes.back(); drawDrawable(&renderNodeDrawable); Loading @@ -113,6 +115,7 @@ void SkiaRecordingCanvas::drawRenderNode(uirenderer::RenderNode* renderNode) { void SkiaRecordingCanvas::callDrawGLFunction(Functor* functor, uirenderer::GlFunctorLifecycleListener* listener) { // Drawable dtor will be invoked when mChildFunctors deque is cleared. mDisplayList->mChildFunctors.emplace_back(functor, listener, asSkCanvas()); drawDrawable(&mDisplayList->mChildFunctors.back()); } Loading