From f854b5bffbdd13cfe7edad0ee157d6947ff99619 Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Sat, 27 Sep 2025 18:48:00 +0200 Subject: [PATCH] deco: reduce virtual calls in drop shadow damageEntire() in CHyprdDropShadow is pretty much called per window per frame, instead of all the PWINDOW-> virtual calls, store pos and size once and move the duplicated code to a lambda. reducing it a bit. shows up in profiling as minor waste. --- .../decorations/CHyprDropShadowDecoration.cpp | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/render/decorations/CHyprDropShadowDecoration.cpp b/src/render/decorations/CHyprDropShadowDecoration.cpp index 50841d6b..bcc4c84e 100644 --- a/src/render/decorations/CHyprDropShadowDecoration.cpp +++ b/src/render/decorations/CHyprDropShadowDecoration.cpp @@ -42,15 +42,19 @@ void CHyprDropShadowDecoration::damageEntire() { return; // disabled const auto PWINDOW = m_window.lock(); + const auto pos = PWINDOW->m_realPosition->value(); + const auto size = PWINDOW->m_realSize->value(); - CBox shadowBox = {PWINDOW->m_realPosition->value().x - m_extents.topLeft.x, PWINDOW->m_realPosition->value().y - m_extents.topLeft.y, - PWINDOW->m_realSize->value().x + m_extents.topLeft.x + m_extents.bottomRight.x, - PWINDOW->m_realSize->value().y + m_extents.topLeft.y + m_extents.bottomRight.y}; + CBox shadowBox = {pos.x - m_extents.topLeft.x, pos.y - m_extents.topLeft.y, pos.x + size.x + m_extents.bottomRight.x, pos.y + size.y + m_extents.bottomRight.y}; - const auto PWORKSPACE = PWINDOW->m_workspace; - if (PWORKSPACE && PWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOW->m_pinned) - shadowBox.translate(PWORKSPACE->m_renderOffset->value()); - shadowBox.translate(PWINDOW->m_floatingOffset); + const auto PWORKSPACE = PWINDOW->m_workspace; + const auto applyOffset = [&](CBox& b) { + if (PWORKSPACE && PWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOW->m_pinned) + b.translate(PWORKSPACE->m_renderOffset->value()); + b.translate(PWINDOW->m_floatingOffset); + }; + + applyOffset(shadowBox); static auto PSHADOWIGNOREWINDOW = CConfigValue("decoration:shadow:ignore_window"); const auto ROUNDING = PWINDOW->rounding(); @@ -59,9 +63,7 @@ void CHyprDropShadowDecoration::damageEntire() { CRegion shadowRegion(shadowBox); if (*PSHADOWIGNOREWINDOW) { CBox surfaceBox = PWINDOW->getWindowMainSurfaceBox(); - if (PWORKSPACE && PWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOW->m_pinned) - surfaceBox.translate(PWORKSPACE->m_renderOffset->value()); - surfaceBox.translate(PWINDOW->m_floatingOffset); + applyOffset(surfaceBox); surfaceBox.expand(-ROUNDINGSIZE); shadowRegion.subtract(CRegion(surfaceBox)); }