From 1f05c249af66c4b8980d944bd92fa2d225423041 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Fri, 4 Sep 2020 12:12:18 +0900 Subject: [PATCH] sw_engine: step backward optimization. As profiled, raster parallelization is not so efficient, we revert this behavior. We will come again with a better fine-tuned method. --- src/lib/sw_engine/tvgSwRenderer.cpp | 23 ++++++++--------------- src/lib/sw_engine/tvgSwRenderer.h | 3 +-- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/lib/sw_engine/tvgSwRenderer.cpp b/src/lib/sw_engine/tvgSwRenderer.cpp index 0d77d386..24b5a16f 100644 --- a/src/lib/sw_engine/tvgSwRenderer.cpp +++ b/src/lib/sw_engine/tvgSwRenderer.cpp @@ -98,7 +98,8 @@ SwRenderer::~SwRenderer() bool SwRenderer::clear() { - if (this->valid() || tasks.size() > 0) return false; + for (auto task : tasks) task->get(); + tasks.clear(); return flush(); } @@ -106,8 +107,6 @@ bool SwRenderer::clear() bool SwRenderer::flush() { - this->get(); //complete rendering - for (auto task : tasks) task->get(); tasks.clear(); @@ -135,21 +134,13 @@ bool SwRenderer::target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t bool SwRenderer::preRender() -{ - //before we start rendering, we should finish all preparing tasks - for (auto task : tasks) task->get(); - - TaskScheduler::request(this); - - return true; -} - - -void SwRenderer::run() { rasterClear(surface); + //before we start rendering, we should finish all preparing tasks for (auto task : tasks) { + task->get(); + uint8_t r, g, b, a; if (auto fill = task->sdata->fill()) { rasterGradientShape(surface, &task->shape, fill->id()); @@ -161,7 +152,9 @@ void SwRenderer::run() if (a > 0) rasterStroke(surface, &task->shape, r, g, b, a); } tasks.clear(); -}; + + return true; +} bool SwRenderer::dispose(TVG_UNUSED const Shape& sdata, void *data) diff --git a/src/lib/sw_engine/tvgSwRenderer.h b/src/lib/sw_engine/tvgSwRenderer.h index 67d2f159..8f4abab7 100644 --- a/src/lib/sw_engine/tvgSwRenderer.h +++ b/src/lib/sw_engine/tvgSwRenderer.h @@ -28,7 +28,7 @@ struct SwTask; namespace tvg { -class SwRenderer : public RenderMethod, public Task +class SwRenderer : public RenderMethod { public: void* prepare(const Shape& shape, void* data, const RenderTransform* transform, RenderUpdateFlag flags) override; @@ -39,7 +39,6 @@ public: bool flush() override; uint32_t ref() override; uint32_t unref() override; - void run() override; static SwRenderer* inst(); static int init();