Loading libs/hwui/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -672,6 +672,7 @@ cc_benchmark { srcs: [ "tests/microbench/main.cpp", "tests/microbench/CanvasOpBench.cpp", "tests/microbench/DisplayListCanvasBench.cpp", "tests/microbench/LinearAllocatorBench.cpp", "tests/microbench/PathParserBench.cpp", Loading libs/hwui/DisplayList.h +3 −2 Original line number Diff line number Diff line Loading @@ -16,14 +16,15 @@ #pragma once #include "pipeline/skia/SkiaDisplayList.h" namespace android { namespace uirenderer { namespace VectorDrawable { class Tree; }; namespace skiapipeline { class SkiaDisplayList; } typedef uirenderer::VectorDrawable::Tree VectorDrawableRoot; /** Loading libs/hwui/RenderNode.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -380,7 +380,7 @@ void RenderNode::deleteDisplayList(TreeObserver& observer, TreeInfo* info) { if (mDisplayList) { mDisplayList->updateChildren( [&observer, info](RenderNode* child) { child->decParentRefCount(observer, info); }); if (!mDisplayList->reuseDisplayList(this, info ? &info->canvasContext : nullptr)) { if (!mDisplayList->reuseDisplayList(this)) { delete mDisplayList; } } Loading libs/hwui/canvas/CanvasFrontend.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -21,7 +21,14 @@ namespace android::uirenderer { CanvasStateHelper::CanvasStateHelper(int width, int height) { resetState(width, height); } void CanvasStateHelper::resetState(int width, int height) { mInitialBounds = SkIRect::MakeWH(width, height); mSaveStack.clear(); mClipStack.clear(); mTransformStack.clear(); mSaveStack.emplace_back(); mClipStack.emplace_back().setRect(mInitialBounds); mTransformStack.emplace_back(); Loading libs/hwui/canvas/CanvasFrontend.h +18 −6 Original line number Diff line number Diff line Loading @@ -57,9 +57,7 @@ protected: } bool internalSave(SaveEntry saveEntry); bool internalSave(SaveFlags::Flags flags) { return internalSave(flagsToSaveEntry(flags)); } void internalSaveLayer(const SkCanvas::SaveLayerRec& layerRec) { internalSave({ .clip = true, Loading Loading @@ -90,6 +88,8 @@ protected: return mClipStack[mCurrentClipIndex]; } void resetState(int width, int height); public: int saveCount() const { return mSaveStack.size(); } Loading Loading @@ -186,14 +186,26 @@ public: submit(std::move(op)); } const CanvasOpReceiver& receiver() const { return mReceiver; } const CanvasOpReceiver& receiver() const { return *mReceiver; } CanvasOpReceiver finish() { auto ret = std::move(mReceiver.value()); mReceiver.reset(); return std::move(ret); } template<class... Args> void reset(int newWidth, int newHeight, Args&&... args) { resetState(newWidth, newHeight); mReceiver.emplace(std::forward<Args>(args)...); } private: CanvasOpReceiver mReceiver; std::optional<CanvasOpReceiver> mReceiver; template <CanvasOpType T> void submit(CanvasOp<T>&& op) { mReceiver.push_container(CanvasOpContainer(std::move(op), transform())); mReceiver->push_container(CanvasOpContainer(std::move(op), transform())); } }; Loading Loading
libs/hwui/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -672,6 +672,7 @@ cc_benchmark { srcs: [ "tests/microbench/main.cpp", "tests/microbench/CanvasOpBench.cpp", "tests/microbench/DisplayListCanvasBench.cpp", "tests/microbench/LinearAllocatorBench.cpp", "tests/microbench/PathParserBench.cpp", Loading
libs/hwui/DisplayList.h +3 −2 Original line number Diff line number Diff line Loading @@ -16,14 +16,15 @@ #pragma once #include "pipeline/skia/SkiaDisplayList.h" namespace android { namespace uirenderer { namespace VectorDrawable { class Tree; }; namespace skiapipeline { class SkiaDisplayList; } typedef uirenderer::VectorDrawable::Tree VectorDrawableRoot; /** Loading
libs/hwui/RenderNode.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -380,7 +380,7 @@ void RenderNode::deleteDisplayList(TreeObserver& observer, TreeInfo* info) { if (mDisplayList) { mDisplayList->updateChildren( [&observer, info](RenderNode* child) { child->decParentRefCount(observer, info); }); if (!mDisplayList->reuseDisplayList(this, info ? &info->canvasContext : nullptr)) { if (!mDisplayList->reuseDisplayList(this)) { delete mDisplayList; } } Loading
libs/hwui/canvas/CanvasFrontend.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -21,7 +21,14 @@ namespace android::uirenderer { CanvasStateHelper::CanvasStateHelper(int width, int height) { resetState(width, height); } void CanvasStateHelper::resetState(int width, int height) { mInitialBounds = SkIRect::MakeWH(width, height); mSaveStack.clear(); mClipStack.clear(); mTransformStack.clear(); mSaveStack.emplace_back(); mClipStack.emplace_back().setRect(mInitialBounds); mTransformStack.emplace_back(); Loading
libs/hwui/canvas/CanvasFrontend.h +18 −6 Original line number Diff line number Diff line Loading @@ -57,9 +57,7 @@ protected: } bool internalSave(SaveEntry saveEntry); bool internalSave(SaveFlags::Flags flags) { return internalSave(flagsToSaveEntry(flags)); } void internalSaveLayer(const SkCanvas::SaveLayerRec& layerRec) { internalSave({ .clip = true, Loading Loading @@ -90,6 +88,8 @@ protected: return mClipStack[mCurrentClipIndex]; } void resetState(int width, int height); public: int saveCount() const { return mSaveStack.size(); } Loading Loading @@ -186,14 +186,26 @@ public: submit(std::move(op)); } const CanvasOpReceiver& receiver() const { return mReceiver; } const CanvasOpReceiver& receiver() const { return *mReceiver; } CanvasOpReceiver finish() { auto ret = std::move(mReceiver.value()); mReceiver.reset(); return std::move(ret); } template<class... Args> void reset(int newWidth, int newHeight, Args&&... args) { resetState(newWidth, newHeight); mReceiver.emplace(std::forward<Args>(args)...); } private: CanvasOpReceiver mReceiver; std::optional<CanvasOpReceiver> mReceiver; template <CanvasOpType T> void submit(CanvasOp<T>&& op) { mReceiver.push_container(CanvasOpContainer(std::move(op), transform())); mReceiver->push_container(CanvasOpContainer(std::move(op), transform())); } }; Loading