summaryrefslogtreecommitdiff
path: root/libs/hwui/pipeline/skia/SkiaPipeline.cpp
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2019-03-14 13:15:28 -0700
committerJohn Reck <jreck@google.com>2019-03-18 09:34:11 -0700
commit322b8ab77462993fb2d84ed08bd93ba238b6b152 (patch)
tree1af6a0d66d6c77c8e93990a3ce7faa7377f6c2fe /libs/hwui/pipeline/skia/SkiaPipeline.cpp
parent59a599c1d34e0d70171672b6fa6bc52b81be3508 (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.cpp52
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--;