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

Commit 09e2fbe6 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Remove old TaskManager system"

parents b4264999 322b8ab7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@
#include <renderthread/CanvasContext.h>
#include <TreeInfo.h>
#include <hwui/Paint.h>
#include <utils/TraceUtils.h>

#include "core_jni_helpers.h"

+2 −2
Original line number Diff line number Diff line
@@ -191,7 +191,7 @@ cc_defaults {
        "surfacetexture/EGLConsumer.cpp",
        "surfacetexture/ImageConsumer.cpp",
        "surfacetexture/SurfaceTexture.cpp",
        "thread/TaskManager.cpp",
        "thread/CommonPool.cpp",
        "utils/Blur.cpp",
        "utils/Color.cpp",
        "utils/GLUtils.cpp",
@@ -308,6 +308,7 @@ cc_test {
        "tests/unit/main.cpp",
        "tests/unit/CacheManagerTests.cpp",
        "tests/unit/CanvasContextTests.cpp",
        "tests/unit/CommonPoolTests.cpp",
        "tests/unit/DamageAccumulatorTests.cpp",
        "tests/unit/DeferredLayerUpdaterTests.cpp",
        "tests/unit/FatVectorTests.cpp",
@@ -381,7 +382,6 @@ cc_benchmark {
        "tests/microbench/LinearAllocatorBench.cpp",
        "tests/microbench/PathParserBench.cpp",
        "tests/microbench/RenderNodeBench.cpp",
        "tests/microbench/TaskManagerBench.cpp",
    ],
}

+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include "hwui/Bitmap.h"
#include "utils/Color.h"
#include "utils/MathUtils.h"
#include "utils/TraceUtils.h"

using namespace android::uirenderer::renderthread;

+11 −41
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <SkPictureRecorder.h>
#include "TreeInfo.h"
#include "VectorDrawable.h"
#include "thread/CommonPool.h"
#include "utils/TraceUtils.h"

#include <unistd.h>
@@ -49,10 +50,6 @@ SkiaPipeline::~SkiaPipeline() {
    unpinImages();
}

TaskManager* SkiaPipeline::getTaskManager() {
    return mRenderThread.cacheManager().getTaskManager();
}

void SkiaPipeline::onDestroyHardwareResources() {
    unpinImages();
    mRenderThread.cacheManager().trimStaleResources();
@@ -225,42 +222,21 @@ void SkiaPipeline::renderVectorDrawableCache() {
    }
}

class SkiaPipeline::SavePictureProcessor : public TaskProcessor<bool> {
public:
    explicit SavePictureProcessor(TaskManager* taskManager) : TaskProcessor<bool>(taskManager) {}

    struct SavePictureTask : public Task<bool> {
        sk_sp<SkData> data;
        std::string filename;
    };

    void savePicture(const sk_sp<SkData>& data, const std::string& filename) {
        sp<SavePictureTask> task(new SavePictureTask());
        task->data = data;
        task->filename = filename;
        TaskProcessor<bool>::add(task);
    }

    virtual void onProcess(const sp<Task<bool>>& task) override {
        ATRACE_NAME("SavePictureTask");
        SavePictureTask* t = static_cast<SavePictureTask*>(task.get());

        if (0 == access(t->filename.c_str(), F_OK)) {
            task->setResult(false);
static void savePictureAsync(const sk_sp<SkData>& data, const std::string& filename) {
    CommonPool::post([data, filename] {
        if (0 == access(filename.c_str(), F_OK)) {
            return;
        }

        SkFILEWStream stream(t->filename.c_str());
        SkFILEWStream stream(filename.c_str());
        if (stream.isValid()) {
            stream.write(t->data->data(), t->data->size());
            stream.write(data->data(), data->size());
            stream.flush();
            SkDebugf("SKP Captured Drawing Output (%d bytes) for frame. %s", stream.bytesWritten(),
                     t->filename.c_str());
                     filename.c_str());
        }

        task->setResult(true);
    });
}
};

SkCanvas* SkiaPipeline::tryCapture(SkSurface* surface) {
    if (CC_UNLIKELY(Properties::skpCaptureEnabled)) {
@@ -297,16 +273,10 @@ void SkiaPipeline::endCapture(SkSurface* surface) {
                ATRACE_END();

                // offload saving to file in a different thread
                if (!mSavePictureProcessor.get()) {
                    TaskManager* taskManager = getTaskManager();
                    mSavePictureProcessor = new SavePictureProcessor(
                            taskManager->canRunTasks() ? taskManager : nullptr);
                }
                if (1 == mCaptureSequence) {
                    mSavePictureProcessor->savePicture(data, mCapturedFile);
                    savePictureAsync(data, mCapturedFile);
                } else {
                    mSavePictureProcessor->savePicture(
                            data,
                    savePictureAsync(data,
                            mCapturedFile + "_" + std::to_string(mCaptureSequence));
                }
                mCaptureSequence--;
+1 −7
Original line number Diff line number Diff line
@@ -33,8 +33,6 @@ public:
    explicit SkiaPipeline(renderthread::RenderThread& thread);
    virtual ~SkiaPipeline();

    TaskManager* getTaskManager() override;

    void onDestroyHardwareResources() override;

    bool pinImages(std::vector<SkImage*>& mutableImages) override;
@@ -157,11 +155,7 @@ private:
     *  mCaptureSequence counts how many frames are left to take in the sequence.
     */
    int mCaptureSequence = 0;
    /**
     *  mSavePictureProcessor is used to run the file saving code in a separate thread.
     */
    class SavePictureProcessor;
    sp<SavePictureProcessor> mSavePictureProcessor;

    /**
     *  mRecorder holds the current picture recorder. We could store it on the stack to support
     *  parallel tryCapture calls (not really needed).
Loading