From 5c9de677be045016eba00beb130f19c1a3e8c809 Mon Sep 17 00:00:00 2001 From: koroltang Date: Wed, 12 Feb 2025 14:46:26 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E7=94=A8=E6=88=AA=E5=9B=BELRU?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: koroltang --- window_scene/session/host/src/session.cpp | 10 +-------- .../src/scene_session_manager.cpp | 22 +++++++++++++++---- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/window_scene/session/host/src/session.cpp b/window_scene/session/host/src/session.cpp index d1560b1a88..4e22bac5af 100644 --- a/window_scene/session/host/src/session.cpp +++ b/window_scene/session/host/src/session.cpp @@ -2398,15 +2398,7 @@ void Session::SaveSnapshot(bool useFfrt, bool needPersist) if (!requirePersist) { return; } - std::function func = [weakThis]() { - auto session = weakThis.promote(); - if (session && - (session->GetSystemConfig().IsPcWindow() || - session->GetSystemConfig().freeMultiWindowEnable_)) { - session->ResetSnapshot(); - } - }; - session->scenePersistence_->SaveSnapshot(pixelMap, func); + session->scenePersistence_->SaveSnapshot(pixelMap); }; if (!useFfrt) { task(); diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 250b338e00..fa90ff3a62 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -130,7 +130,9 @@ constexpr uint32_t MAX_SUB_WINDOW_LEVEL = 10; constexpr uint64_t VIRTUAL_DISPLAY_ID = 999; constexpr uint32_t DEFAULT_LOCK_SCREEN_ZORDER = 2000; constexpr int32_t MAX_LOCK_STATUS_CACHE_SIZE = 1000; -constexpr std::size_t SNAPSHOT_CACHE_CAPACITY = 3; +constexpr std::size_t MAX_SNAPSHOT_IN_RECENT_PC = 24; +constexpr std::size_t MAX_SNAPSHOT_IN_RECENT_PAD = 8; +constexpr std::size_t MAX_SNAPSHOT_IN_RECENT_PHONE = 3; const std::map STRING_TO_DISPLAY_ORIENTATION_MAP = { {"unspecified", OHOS::AppExecFwk::DisplayOrientation::UNSPECIFIED}, @@ -330,7 +332,20 @@ SceneSessionManager::SceneSessionManager() : rsInterface_(RSInterfaces::GetInsta [this](const sptr& remoteObject) { this->ClearAllCollaboratorSessions(); }); scbDumpSubscriber_ = ScbDumpSubscriber::Subscribe(); - snapshotLRUCache_ = std::make_unique(SNAPSHOT_CACHE_CAPACITY); + + const static std::unordered_map SNAPSHOT_CACHE_CAPACITY_MAP = { + {WindowUIType::PC_WINDOW, MAX_SNAPSHOT_IN_RECENT_PC}, + {WindowUIType::PAD_WINDOW, MAX_SNAPSHOT_IN_RECENT_PAD}, + {WindowUIType::PHONE_WINDOW, MAX_SNAPSHOT_IN_RECENT_PHONE}, + {WindowUIType::INVALID_WINDOW, MAX_SNAPSHOT_IN_RECENT_PHONE}, + }; + std::size_t snapCapacity = SNAPSHOT_CACHE_CAPACITY_MAP.at(WindowUIType::INVALID_WINDOW); + if (SNAPSHOT_CACHE_CAPACITY_MAP.find(systemConfig_.windowUIType_) != SNAPSHOT_CACHE_CAPACITY_MAP.end()) { + snapCapacity = SNAPSHOT_CACHE_CAPACITY_MAP.at(systemConfig_.windowUIType_); + } else { + TLOGI(WmsLogTag::WMS_PATTERN, "invalid type: %{public}hhu", systemConfig_.windowUIType_); + } + snapshotLRUCache_ = std::make_unique(snapCapacity); listenerController_ = std::make_shared(); windowFocusController_ = sptr::MakeSptr(); @@ -2521,8 +2536,7 @@ WSError SceneSessionManager::RequestSceneSessionBackground(const sptrEditSessionInfo().callingTokenId_ = 0; } - if (WindowHelper::IsMainWindow(sceneSession->GetWindowType()) && - systemConfig_.IsPcWindow() && !systemConfig_.freeMultiWindowEnable_) { + if (SessionHelper::IsMainWindow(sceneSession->GetWindowType())) { PutSnapshotToCache(persistentId); } -- Gitee