Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ab5dac8d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add initial benchmarks for CanvasOp"

parents bf33f709 b5eeb18f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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",
+3 −2
Original line number Diff line number Diff line
@@ -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;

/**
+1 −1
Original line number Diff line number Diff line
@@ -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;
        }
    }
+7 −0
Original line number Diff line number Diff line
@@ -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();
+18 −6
Original line number Diff line number Diff line
@@ -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,
@@ -90,6 +88,8 @@ protected:
        return mClipStack[mCurrentClipIndex];
    }

    void resetState(int width, int height);

public:
    int saveCount() const { return mSaveStack.size(); }

@@ -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