diff options
author | John Reck <jreck@google.com> | 2019-03-14 13:15:28 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2019-03-18 09:34:11 -0700 |
commit | 322b8ab77462993fb2d84ed08bd93ba238b6b152 (patch) | |
tree | 1af6a0d66d6c77c8e93990a3ce7faa7377f6c2fe /libs/hwui/pipeline/skia/SkiaPipeline.cpp | |
parent | 59a599c1d34e0d70171672b6fa6bc52b81be3508 (diff) |
Remove old TaskManager system
Replace it with a newer, fancier, WorkQueue-inspired
one that's just a global common thread pool.
Test: hwuiunit passes
Change-Id: Ib5d03104a08bbac9a4ec67a1bfc0db2b35d6700f
Diffstat (limited to 'libs/hwui/pipeline/skia/SkiaPipeline.cpp')
-rw-r--r-- | libs/hwui/pipeline/skia/SkiaPipeline.cpp | 52 |
1 files changed, 11 insertions, 41 deletions
diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp index a00a36f93501..721a115c1381 100644 --- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp @@ -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--; |