From e21dab4df1031fac8f9fff160c1f3ed89cc91a98 Mon Sep 17 00:00:00 2001 From: yjx Date: Wed, 21 Feb 2024 16:42:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B7=A8=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=B4=A9=E6=BA=83=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yjx Change-Id: I7a4770233af8ac81a559bbcec4926ff2c606c5ad --- .../2d_graphics/include/recording/draw_cmd.h | 2 +- .../src/drawing/recording/draw_cmd.cpp | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/rosen/modules/2d_graphics/include/recording/draw_cmd.h b/rosen/modules/2d_graphics/include/recording/draw_cmd.h index 60c0b68b8c..e6a15e6f48 100644 --- a/rosen/modules/2d_graphics/include/recording/draw_cmd.h +++ b/rosen/modules/2d_graphics/include/recording/draw_cmd.h @@ -122,7 +122,7 @@ public: const DrawCmdList& cmdList_; private: - static std::unordered_map opUnmarshallingFuncLUT_; + static std::unordered_map* opUnmarshallingFuncLUT_; }; class GenerateCachedOpItemPlayer { diff --git a/rosen/modules/2d_graphics/src/drawing/recording/draw_cmd.cpp b/rosen/modules/2d_graphics/src/drawing/recording/draw_cmd.cpp index 79faf765d8..fdb769c7c3 100644 --- a/rosen/modules/2d_graphics/src/drawing/recording/draw_cmd.cpp +++ b/rosen/modules/2d_graphics/src/drawing/recording/draw_cmd.cpp @@ -222,23 +222,28 @@ bool GenerateCachedOpItemPlayer::GenerateCachedOpItem(uint32_t type, void* handl } /* UnmarshallingPlayer */ -std::unordered_map UnmarshallingPlayer::opUnmarshallingFuncLUT_ = {}; +std::unordered_map* + UnmarshallingPlayer::opUnmarshallingFuncLUT_ = nullptr; bool UnmarshallingPlayer::RegisterUnmarshallingFunc(uint32_t type, UnmarshallingPlayer::UnmarshallingFunc func) { - return opUnmarshallingFuncLUT_.emplace(type, func).second; + if (!opUnmarshallingFuncLUT_) { + static std::unordered_map opUnmarshallingFuncLUT = {}; + opUnmarshallingFuncLUT_ = &opUnmarshallingFuncLUT; + } + return opUnmarshallingFuncLUT_->emplace(type, func).second; } UnmarshallingPlayer::UnmarshallingPlayer(const DrawCmdList& cmdList) : cmdList_(cmdList) {} std::shared_ptr UnmarshallingPlayer::Unmarshalling(uint32_t type, void* handle) { - if (type == DrawOpItem::OPITEM_HEAD) { + if (type == DrawOpItem::OPITEM_HEAD || !opUnmarshallingFuncLUT_) { return nullptr; } - auto it = opUnmarshallingFuncLUT_.find(type); - if (it == opUnmarshallingFuncLUT_.end() || it->second == nullptr) { + auto it = opUnmarshallingFuncLUT_->find(type); + if (it == opUnmarshallingFuncLUT_->end() || it->second == nullptr) { return nullptr; } -- Gitee