diff --git a/window_scene/session/host/include/pc_fold_screen_manager.h b/window_scene/session/host/include/pc_fold_screen_manager.h index 54b2a835944eed6f1ccc9e98f6ffc446e0f2ece4..eea01796fa10bea7c6e55cc2b5c77d8d37e90848 100644 --- a/window_scene/session/host/include/pc_fold_screen_manager.h +++ b/window_scene/session/host/include/pc_fold_screen_manager.h @@ -45,6 +45,7 @@ public: SuperFoldStatus GetScreenFoldStatus() const; bool IsHalfFolded(DisplayId displayId) const; bool IsHalfFoldedOnMainDisplay(DisplayId displayId) const; + bool IsHalfFoldedDisplayId(DisplayId displayId) const; void UpdateSystemKeyboardStatus(bool hasSystemKeyboard); bool HasSystemKeyboard() const; diff --git a/window_scene/session/host/include/scene_session.h b/window_scene/session/host/include/scene_session.h index c2c21246582496a0c886943040b720dc6d18a4ef..67b19550018eb820240297a81d2c29212b42e095 100644 --- a/window_scene/session/host/include/scene_session.h +++ b/window_scene/session/host/include/scene_session.h @@ -934,7 +934,7 @@ private: bool AdjustRectByAspectRatio(WSRect& rect); bool SaveAspectRatio(float ratio); WSError UpdateRectForDrag(const WSRect& rect); - void UpdateSessionRectPosYFromClient(WSRect& rect); + void UpdateSessionRectPosYFromClient(SizeChangeReason reason, DisplayId configDisplayId, WSRect& rect); /* * Window Decor diff --git a/window_scene/session/host/include/session.h b/window_scene/session/host/include/session.h index 0aeacf4ccb7fd9d459c08945a607057198504587..206bf3a0ae336c8e79cd6184cf98a4bd0d090b15 100644 --- a/window_scene/session/host/include/session.h +++ b/window_scene/session/host/include/session.h @@ -582,6 +582,9 @@ public: bool IsDragAccessible() const; void SetSingleHandTransform(const SingleHandTransform& transform); SingleHandTransform GetSingleHandTransform() const; + void SetClientDisplayId(DisplayId displayId); + DisplayId GetClientDisplayId() const; + void UpdateDisplayIdByParentSession(DisplayId& updatedDisplayId); /* * Screen Lock @@ -754,7 +757,8 @@ protected: float clientScaleY_ = 1.0f; float clientPivotX_ = 0.0f; float clientPivotY_ = 0.0f; - DisplayId lastUpdatedDisplayId_ = 0; + DisplayId clientDisplayId_ = 0; // Window displayId on the client + DisplayId configDisplayId_ = 0; SuperFoldStatus lastScreenFoldStatus_ = SuperFoldStatus::UNKNOWN; /* diff --git a/window_scene/session/host/src/pc_fold_screen_manager.cpp b/window_scene/session/host/src/pc_fold_screen_manager.cpp index 6f103f4d3cbd2f48b58a5991d4376c05d2d69f4a..3eedc101a3eacf57e43b6511cc691ee764f3ba3f 100644 --- a/window_scene/session/host/src/pc_fold_screen_manager.cpp +++ b/window_scene/session/host/src/pc_fold_screen_manager.cpp @@ -44,7 +44,10 @@ const RSAnimationTimingCurve THROW_SLIP_CURVE = constexpr int32_t RULE_TRANS_X = 48; // dp constexpr int32_t MIN_DECOR_HEIGHT = 37; constexpr WSRect RECT_ZERO = { 0, 0, 0, 0 }; + +// all displayId constexpr DisplayId DEFAULT_DISPLAY_ID = 0; +constexpr DisplayId VIRTUAL_DISPLAY_ID = 999; } // namespace WM_IMPLEMENT_SINGLE_INSTANCE(PcFoldScreenManager); @@ -108,6 +111,13 @@ bool PcFoldScreenManager::IsHalfFoldedOnMainDisplay(DisplayId displayId) const return screenFoldStatus_ == SuperFoldStatus::HALF_FOLDED && displayId == DEFAULT_DISPLAY_ID; } +bool PcFoldScreenManager::IsHalfFoldedDisplayId(DisplayId displayId) const +{ + std::shared_lock lock(displayInfoMutex_); + return screenFoldStatus_ == SuperFoldStatus::HALF_FOLDED && + (displayId == DEFAULT_DISPLAY_ID || displayId == VIRTUAL_DISPLAY_ID); +} + void PcFoldScreenManager::UpdateSystemKeyboardStatus(bool hasSystemKeyboard) { TLOGI(WmsLogTag::WMS_KEYBOARD, "status: %{public}d", hasSystemKeyboard); diff --git a/window_scene/session/host/src/scene_session.cpp b/window_scene/session/host/src/scene_session.cpp index 01c2c31ddbd3b9a64ec606e356a7fe3b11a1e48f..e7f9bc209e69b1863205c512adb9cbc38f30ab4b 100644 --- a/window_scene/session/host/src/scene_session.cpp +++ b/window_scene/session/host/src/scene_session.cpp @@ -1550,7 +1550,12 @@ void SceneSession::UpdateSessionRectInner(const WSRect& rect, SizeChangeReason r DisplayId displayId = GetSessionProperty() != nullptr ? GetSessionProperty()->GetDisplayId() : DISPLAY_ID_INVALID; TLOGI(WmsLogTag::WMS_LAYOUT, "Get displayId: %{public}" PRIu64, displayId); - NotifySessionRectChange(newRequestRect, newReason, displayId, rectAnimationConfig); + auto notifyRect = newRequestRect; + if (PcFoldScreenManager::GetInstance().IsHalfFolded(GetScreenId())) { + newReason = SizeChangeReason::UNDEFINED; + notifyRect = rect; + } + NotifySessionRectChange(notifyRect, newReason, displayId, rectAnimationConfig); } else { if (!Session::IsScbCoreEnabled()) { SetSessionRect(rect); @@ -1563,14 +1568,30 @@ void SceneSession::UpdateSessionRectInner(const WSRect& rect, SizeChangeReason r newWinRect.ToString().c_str()); } -void SceneSession::UpdateSessionRectPosYFromClient(WSRect& rect) +void SceneSession::UpdateSessionRectPosYFromClient(SizeChangeReason reason, DisplayId configDisplayId, WSRect& rect) { if (!PcFoldScreenManager::GetInstance().IsHalfFolded(GetScreenId())) { + TLOGI(WmsLogTag::WMS_LAYOUT, "winId: %{public}d, displayId: %{public}" PRIu64, + GetPersistentId(), GetScreenId()); + return; + } + if (reason != SizeChangeReason::RESIZE) { + configDisplayId_ = configDisplayId; + } + if (configDisplayId_ != DISPLAY_ID_INVALID && + !PcFoldScreenManager::GetInstance().IsHalfFoldedDisplayId(configDisplayId_)) { + TLOGI(WmsLogTag::WMS_LAYOUT, "winId: %{public}d, configDisplayId: %{public}" PRIu64, + GetPersistentId(), configDisplayId_); return; } - TLOGD(WmsLogTag::WMS_LAYOUT, "windowId: %{public}d, lastUpdatedDisplayId_: %{public}" PRIu64, - GetPersistentId(), lastUpdatedDisplayId_); - if (lastUpdatedDisplayId_ != VIRTUAL_DISPLAY_ID) { + auto clientDisplayId = clientDisplayId_; + if (WindowHelper::IsSubWindow(GetWindowType()) || WindowHelper::IsSystemWindow(GetWindowType())) { + UpdateDisplayIdByParentSession(clientDisplayId); + } + TLOGI(WmsLogTag::WMS_LAYOUT, "winId: %{public}d, input: %{public}s, screenId: %{public}" PRIu64 + ", clientDisplayId: %{public}" PRIu64 ", configDisplayId: %{public}" PRIu64, + GetPersistentId(), rect.ToString().c_str(), GetScreenId(), clientDisplayId, configDisplayId_); + if (configDisplayId_ != VIRTUAL_DISPLAY_ID && clientDisplayId != VIRTUAL_DISPLAY_ID) { return; } const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = @@ -1578,7 +1599,7 @@ void SceneSession::UpdateSessionRectPosYFromClient(WSRect& rect) auto lowerScreenPosY = defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; rect.posY_ += lowerScreenPosY; - TLOGI(WmsLogTag::WMS_LAYOUT, "windowId: %{public}d, lowerScreenPosY: %{public}d, output: %{public}s", + TLOGI(WmsLogTag::WMS_LAYOUT, "winId: %{public}d, lowerScreenPosY: %{public}d, output: %{public}s", GetPersistentId(), lowerScreenPosY, rect.ToString().c_str()); } @@ -1594,7 +1615,7 @@ WSError SceneSession::UpdateSessionRect( } WSRect newRect = rect; UpdateCrossAxisOfLayout(rect); - UpdateSessionRectPosYFromClient(newRect); + UpdateSessionRectPosYFromClient(reason, moveConfiguration.displayId, newRect); if (isGlobal && WindowHelper::IsSubWindow(Session::GetWindowType()) && (systemConfig_.IsPhoneWindow() || (systemConfig_.IsPadWindow() && !IsFreeMultiWindowMode()))) { diff --git a/window_scene/session/host/src/session.cpp b/window_scene/session/host/src/session.cpp index d029fcec12ae2ec554a0738ae5af5d2a8f7f093c..e40ca39f67ce3a1fe874308e8d79a82a818c4265 100644 --- a/window_scene/session/host/src/session.cpp +++ b/window_scene/session/host/src/session.cpp @@ -968,7 +968,7 @@ WSError Session::UpdateSizeChangeReason(SizeChangeReason reason) WSError Session::UpdateClientDisplayId(DisplayId displayId) { - if (displayId == lastUpdatedDisplayId_) { + if (displayId == clientDisplayId_) { return WSError::WS_DO_NOTHING; } if (sessionStage_ == nullptr) { @@ -976,8 +976,8 @@ WSError Session::UpdateClientDisplayId(DisplayId displayId) return WSError::WS_ERROR_NULLPTR; } TLOGI(WmsLogTag::WMS_LAYOUT, "windowId: %{public}d move display %{public}" PRIu64 " from %{public}" PRIu64, - GetPersistentId(), displayId, lastUpdatedDisplayId_); - lastUpdatedDisplayId_ = displayId; + GetPersistentId(), displayId, clientDisplayId_); + clientDisplayId_ = displayId; sessionStage_->UpdateDisplayId(displayId); return WSError::WS_OK; } @@ -989,9 +989,11 @@ DisplayId Session::TransformGlobalRectToRelativeRect(WSRect& rect) const int32_t lowerScreenPosY = defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; TLOGD(WmsLogTag::WMS_LAYOUT, "lowerScreenPosY: %{public}d", lowerScreenPosY); - DisplayId updatedDisplayId = GetScreenId(); + DisplayId updatedDisplayId = DEFAULT_DISPLAY_ID; if (rect.posY_ >= lowerScreenPosY) { - updatedDisplayId = VIRTUAL_DISPLAY_ID; + if (WindowHelper::IsMainWindow(GetWindowType())) { + updatedDisplayId = VIRTUAL_DISPLAY_ID; + } rect.posY_ -= lowerScreenPosY; } return updatedDisplayId; @@ -1008,21 +1010,31 @@ void Session::UpdateClientRectPosYAndDisplayId(WSRect& rect) TLOGD(WmsLogTag::WMS_LAYOUT, "Error status"); return; } + if (GetScreenId() != DISPLAY_ID_INVALID && + !PcFoldScreenManager::GetInstance().IsHalfFoldedDisplayId(GetScreenId())) { + TLOGI(WmsLogTag::WMS_LAYOUT, "winId: %{public}d, displayId: %{public}" PRIu64 " not need", + GetPersistentId(), GetScreenId()); + return; + } TLOGI(WmsLogTag::WMS_LAYOUT, "lastStatus: %{public}d, curStatus: %{public}d", lastScreenFoldStatus_, currScreenFoldStatus); if (currScreenFoldStatus == SuperFoldStatus::EXPANDED) { lastScreenFoldStatus_ = currScreenFoldStatus; auto ret = UpdateClientDisplayId(DEFAULT_DISPLAY_ID); - TLOGI(WmsLogTag::WMS_LAYOUT, "JustUpdateId: windowId: %{public}d, result: %{public}d", + TLOGI(WmsLogTag::WMS_LAYOUT, "JustUpdateId: winId: %{public}d, result: %{public}d", GetPersistentId(), ret); return; } WSRect lastRect = rect; auto updatedDisplayId = TransformGlobalRectToRelativeRect(rect); + if (WindowHelper::IsSubWindow(GetWindowType()) || WindowHelper::IsSystemWindow(GetWindowType())) { + UpdateDisplayIdByParentSession(updatedDisplayId); + } auto ret = UpdateClientDisplayId(updatedDisplayId); lastScreenFoldStatus_ = currScreenFoldStatus; - TLOGI(WmsLogTag::WMS_LAYOUT, "CalculatedRect: windowId: %{public}d, input: %{public}s, output: %{public}s," - " result: %{public}d", GetPersistentId(), lastRect.ToString().c_str(), rect.ToString().c_str(), ret); + TLOGI(WmsLogTag::WMS_LAYOUT, "CalculatedRect: winId: %{public}d, input: %{public}s, output: %{public}s," + " result: %{public}d, clientDisplayId: %{public}" PRIu64, GetPersistentId(), lastRect.ToString().c_str(), + rect.ToString().c_str(), ret, updatedDisplayId); } void Session::SetSingleHandTransform(const SingleHandTransform& transform) @@ -1128,6 +1140,9 @@ __attribute__((no_sanitize("cfi"))) WSError Session::ConnectInner(const sptrSetDisplayId(clientDisplayId_); + } return WSError::WS_OK; } @@ -3908,4 +3923,26 @@ WindowMetaInfo Session::GetWindowMetaInfoForWindowInfo() const windowMetaInfo.abilityName = GetSessionInfo().abilityName_; return windowMetaInfo; } + +DisplayId Session::GetClientDisplayId() const +{ + return clientDisplayId_; +} + +void Session::SetClientDisplayId(DisplayId displayid) +{ + clientDisplayId_ = displayid; +} + +void Session::UpdateDisplayIdByParentSession(DisplayId& updatedDisplayId) +{ + if (auto parentSession = GetParentSession()) { + TLOGI(WmsLogTag::WMS_MAIN, "winId: %{public}d, parentWinId: %{public}d, parentClientDisplay: %{public}" PRIu64, + GetPersistentId(), parentSession->GetPersistentId(), parentSession->GetClientDisplayId()); + updatedDisplayId = parentSession->GetClientDisplayId(); + } else if (GetClientDisplayId() == VIRTUAL_DISPLAY_ID) { + TLOGI(WmsLogTag::WMS_MAIN, "winId: %{public}d, no parentSession, but init virtual display", GetPersistentId()); + updatedDisplayId = VIRTUAL_DISPLAY_ID; + } +} } // namespace OHOS::Rosen \ No newline at end of file diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 7b4ba55332588abf829e15e7ec9d45ed8c087954..8747131d6894e3d1ccceb4ee3bf4680ab98632cf 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -841,6 +841,7 @@ private: std::vector>& filteredSessions); bool IsGetWindowLayoutInfoNeeded(const sptr& session) const; int32_t GetFoldLowerScreenPosY() const; + DisplayId UpdateSpecificSessionClientDisplayId(const sptr& property); /* * Window Rotate Animation diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 8c55db1bdd58e393c96bbf633e7f191a8d1d684d..99af0afb0bd1d9e1e18cce9f673b210e058b6e31 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -2873,7 +2873,6 @@ WSError SceneSessionManager::CreateAndConnectSpecificSession(const sptrGetParentPersistentId()); if (parentSession) { auto parentProperty = parentSession->GetSessionProperty(); @@ -2883,7 +2882,7 @@ WSError SceneSessionManager::CreateAndConnectSpecificSession(const sptrSetSubWindowLevel(parentProperty->GetSubWindowLevel() + 1); } - + auto initClientDisplayId = UpdateSpecificSessionClientDisplayId(property); TLOGI(WmsLogTag::WMS_LIFE, "The corner radius is %{public}f", appWindowSceneConfig_.floatCornerRadius_); property->SetWindowCornerRadius(appWindowSceneConfig_.floatCornerRadius_); bool shouldBlock = (property->GetWindowType() == WindowType::WINDOW_TYPE_FLOAT && @@ -2921,8 +2920,8 @@ WSError SceneSessionManager::CreateAndConnectSpecificSession(const sptrSetClientDisplayId(initClientDisplayId); newSession->GetSessionProperty()->SetWindowCornerRadius(property->GetWindowCornerRadius()); property->SetSystemCalling(isSystemCalling); auto errCode = newSession->ConnectInner( @@ -13045,4 +13045,22 @@ WSError SceneSessionManager::CloneWindow(int32_t fromPersistentId, int32_t toPer return WSError::WS_OK; }, __func__); } + +DisplayId SceneSessionManager::UpdateSpecificSessionClientDisplayId(const sptr& property) +{ + auto initClientDisplayId = DEFAULT_DISPLAY_ID; + // SubWindow + if (auto parentSession = GetSceneSession(property->GetParentPersistentId())) { + if (property->GetDisplayId() == VIRTUAL_DISPLAY_ID) { + property->SetDisplayId(DEFAULT_DISPLAY_ID); + initClientDisplayId = parentSession->GetClientDisplayId(); + } + } + // SystemWindow + if (property->GetDisplayId() == VIRTUAL_DISPLAY_ID) { + property->SetDisplayId(DEFAULT_DISPLAY_ID); + initClientDisplayId = VIRTUAL_DISPLAY_ID; + } + return initClientDisplayId; +} } // namespace OHOS::Rosen diff --git a/window_scene/test/unittest/scene_session_test.cpp b/window_scene/test/unittest/scene_session_test.cpp index b9be04c074d860f8693952a60c3a491a4e7f83aa..efd24a3e280d6d36f81cbc56d77cf92aa03b5f4a 100644 --- a/window_scene/test/unittest/scene_session_test.cpp +++ b/window_scene/test/unittest/scene_session_test.cpp @@ -1538,27 +1538,25 @@ HWTEST_F(SceneSessionTest, UpdateSessionRectPosYFromClient01, Function | SmallTe PcFoldScreenManager::GetInstance().UpdateFoldScreenStatus(0, SuperFoldStatus::EXPANDED, { 0, 0, 2472, 1648 }, { 0, 1648, 2472, 1648 }, { 0, 1624, 2472, 1648 }); WSRect rect = {0, 0, 0, 0}; - sceneSession->UpdateSessionRectPosYFromClient(rect); + sceneSession->UpdateSessionRectPosYFromClient(SizeChangeReason::UNDEFINED, 0, rect); EXPECT_EQ(rect.posY_, 0); PcFoldScreenManager::GetInstance().UpdateFoldScreenStatus(0, SuperFoldStatus::KEYBOARD, { 0, 0, 2472, 1648 }, { 0, 1648, 2472, 1648 }, { 0, 1624, 2472, 1648 }); rect = {0, 100, 0, 0}; - sceneSession->UpdateSessionRectPosYFromClient(rect); + sceneSession->UpdateSessionRectPosYFromClient(SizeChangeReason::UNDEFINED, 0, rect); EXPECT_EQ(rect.posY_, 100); PcFoldScreenManager::GetInstance().UpdateFoldScreenStatus(0, SuperFoldStatus::HALF_FOLDED, { 0, 0, 2472, 1648 }, { 0, 1648, 2472, 1648 }, { 0, 1649, 2472, 40 }); - const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = - PcFoldScreenManager::GetInstance().GetDisplayRects(); - sceneSession->lastUpdatedDisplayId_ = 0; + sceneSession->clientDisplayId_ = 0; rect = {0, 100, 100, 100}; - sceneSession->UpdateSessionRectPosYFromClient(rect); + sceneSession->UpdateSessionRectPosYFromClient(SizeChangeReason::UNDEFINED, 0, rect); EXPECT_EQ(rect.posY_, 100); - sceneSession->lastUpdatedDisplayId_ = 999; + sceneSession->clientDisplayId_ = 999; rect = {0, 100, 100, 100}; auto rect2 = rect; - sceneSession->UpdateSessionRectPosYFromClient(rect); - EXPECT_EQ(rect.posY_, rect2.posY_ + defaultDisplayRect.height_ + foldCreaseRect.height_ / 2); + sceneSession->UpdateSessionRectPosYFromClient(SizeChangeReason::UNDEFINED, 0, rect); + EXPECT_EQ(rect.posY_, rect2.posY_); } /** diff --git a/window_scene/test/unittest/session_test.cpp b/window_scene/test/unittest/session_test.cpp index 6a15b5e247f9d5e4505e3bebe52b30d6813da223..dde00cc665238bc16f1ba5eba11575d96d807022 100644 --- a/window_scene/test/unittest/session_test.cpp +++ b/window_scene/test/unittest/session_test.cpp @@ -206,22 +206,22 @@ HWTEST_F(WindowSessionTest, UpdateClientDisplayId01, Function | SmallTest | Leve { ASSERT_NE(session_, nullptr); session_->sessionStage_ = nullptr; - session_->lastUpdatedDisplayId_ = 0; + session_->clientDisplayId_ = 0; DisplayId updatedDisplayId = 0; EXPECT_EQ(session_->UpdateClientDisplayId(updatedDisplayId), WSError::WS_DO_NOTHING); - EXPECT_EQ(updatedDisplayId, session_->lastUpdatedDisplayId_); + EXPECT_EQ(updatedDisplayId, session_->clientDisplayId_); updatedDisplayId = 10; EXPECT_EQ(session_->UpdateClientDisplayId(updatedDisplayId), WSError::WS_ERROR_NULLPTR); - EXPECT_NE(updatedDisplayId, session_->lastUpdatedDisplayId_); + EXPECT_NE(updatedDisplayId, session_->clientDisplayId_); ASSERT_NE(mockSessionStage_, nullptr); session_->sessionStage_ = mockSessionStage_; updatedDisplayId = 0; EXPECT_EQ(session_->UpdateClientDisplayId(updatedDisplayId), WSError::WS_DO_NOTHING); - EXPECT_EQ(updatedDisplayId, session_->lastUpdatedDisplayId_); + EXPECT_EQ(updatedDisplayId, session_->clientDisplayId_); updatedDisplayId = 100; EXPECT_EQ(session_->UpdateClientDisplayId(updatedDisplayId), WSError::WS_OK); - EXPECT_EQ(updatedDisplayId, session_->lastUpdatedDisplayId_); + EXPECT_EQ(updatedDisplayId, session_->clientDisplayId_); } /** diff --git a/wm/src/window_session_impl.cpp b/wm/src/window_session_impl.cpp index 46d74504ae2ed23c17794b4f2b24b7b4a2df945f..0303a09514481035b43b0b48fa77344442fc1283 100644 --- a/wm/src/window_session_impl.cpp +++ b/wm/src/window_session_impl.cpp @@ -726,9 +726,9 @@ WSError WindowSessionImpl::UpdateRect(const WSRect& rect, SizeChangeReason reaso property_->SetRequestRect(wmRect); TLOGI(WmsLogTag::WMS_LAYOUT, "%{public}s, preRect:%{public}s, reason:%{public}u, hasRSTransaction:%{public}d" - ", duration:%{public}d, [name:%{public}s, id:%{public}d]", rect.ToString().c_str(), preRect.ToString().c_str(), - wmReason, config.rsTransaction_ != nullptr, config.animationDuration_, - GetWindowName().c_str(), GetPersistentId()); + ", duration:%{public}d, [name:%{public}s, id:%{public}d], clientDisplayId: %{public}" PRIu64, + rect.ToString().c_str(), preRect.ToString().c_str(), wmReason, config.rsTransaction_ != nullptr, + config.animationDuration_, GetWindowName().c_str(), GetPersistentId(), property_->GetDisplayId()); HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "WindowSessionImpl::UpdateRect id: %d [%d, %d, %u, %u] reason: %u hasRSTransaction: %u", GetPersistentId(), wmRect.posX_, wmRect.posY_, wmRect.width_, wmRect.height_, wmReason, config.rsTransaction_ != nullptr);