From 19815de7d76c37ecd24b455712fdbe1fa0e0b4af Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Tue, 9 Jul 2024 16:08:38 +0900 Subject: [PATCH] renderer: ++optimization skip locking if the thread number is 0. --- src/common/tvgLock.h | 11 ++++++++--- src/renderer/tvgRender.cpp | 14 ++++++++++++++ src/renderer/tvgRender.h | 13 ++----------- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/common/tvgLock.h b/src/common/tvgLock.h index d8bf7269..59f68d0d 100644 --- a/src/common/tvgLock.h +++ b/src/common/tvgLock.h @@ -28,6 +28,7 @@ #define _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR #include +#include "tvgTaskScheduler.h" namespace tvg { @@ -42,13 +43,17 @@ namespace tvg { ScopedLock(Key& k) { - k.mtx.lock(); - key = &k; + if (TaskScheduler::threads() > 0) { + k.mtx.lock(); + key = &k; + } } ~ScopedLock() { - key->mtx.unlock(); + if (TaskScheduler::threads() > 0) { + key->mtx.unlock(); + } } }; diff --git a/src/renderer/tvgRender.cpp b/src/renderer/tvgRender.cpp index 90432d65..6ecaf77b 100644 --- a/src/renderer/tvgRender.cpp +++ b/src/renderer/tvgRender.cpp @@ -32,6 +32,20 @@ /* External Class Implementation */ /************************************************************************/ +uint32_t RenderMethod::ref() +{ + ScopedLock lock(key); + return (++refCnt); +} + + +uint32_t RenderMethod::unref() +{ + ScopedLock lock(key); + return (--refCnt); +} + + void RenderTransform::override(const Matrix& m) { this->m = m; diff --git a/src/renderer/tvgRender.h b/src/renderer/tvgRender.h index 96567645..ff557480 100644 --- a/src/renderer/tvgRender.h +++ b/src/renderer/tvgRender.h @@ -248,17 +248,8 @@ private: Key key; public: - uint32_t ref() - { - ScopedLock lock(key); - return (++refCnt); - } - - uint32_t unref() - { - ScopedLock lock(key); - return (--refCnt); - } + uint32_t ref(); + uint32_t unref(); virtual ~RenderMethod() {} virtual RenderData prepare(const RenderShape& rshape, RenderData data, const RenderTransform* transform, Array& clips, uint8_t opacity, RenderUpdateFlag flags, bool clipper) = 0;