Commit 937a034d authored by Chris Harrelson's avatar Chris Harrelson Committed by Commit Bot

Micro-optimize UpdateSnapContainerData for no-op cases

This reduces the snapping-related code paths in the referenced
bug by about 4x.

Bug: 504567

Change-Id: I4a48eef9935dbb9bfb75d7ab2a0b921f3f5b2c8f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1860403
Commit-Queue: Chris Harrelson <chrishtr@chromium.org>
Reviewed-by: default avatarMajid Valipour <majidvp@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706081}
parent 37d44dbb
...@@ -149,10 +149,19 @@ void SnapCoordinator::UpdateAllSnapContainerData() { ...@@ -149,10 +149,19 @@ void SnapCoordinator::UpdateAllSnapContainerData() {
} }
void SnapCoordinator::UpdateSnapContainerData(LayoutBox& snap_container) { void SnapCoordinator::UpdateSnapContainerData(LayoutBox& snap_container) {
cc::SnapContainerData snap_container_data(
GetPhysicalSnapType(snap_container));
ScrollableArea* scrollable_area = ScrollableAreaForSnapping(snap_container); ScrollableArea* scrollable_area = ScrollableAreaForSnapping(snap_container);
const auto* old_snap_container_data = scrollable_area->GetSnapContainerData();
auto snap_type = GetPhysicalSnapType(snap_container);
// Scrollers that don't have any snap areas assigned to them and don't snap
// require no further processing. These are the most common types and thus
// returning as early as possible ensures efficiency.
if (!old_snap_container_data && snap_type.is_none)
return;
cc::SnapContainerData snap_container_data(snap_type);
DCHECK(scrollable_area); DCHECK(scrollable_area);
DCHECK(snap_containers_.Contains(&snap_container)); DCHECK(snap_containers_.Contains(&snap_container));
...@@ -217,12 +226,11 @@ void SnapCoordinator::UpdateSnapContainerData(LayoutBox& snap_container) { ...@@ -217,12 +226,11 @@ void SnapCoordinator::UpdateSnapContainerData(LayoutBox& snap_container) {
} }
} }
const auto* old_snap_container_data = scrollable_area->GetSnapContainerData();
if (!old_snap_container_data || if (!old_snap_container_data ||
*old_snap_container_data != snap_container_data) *old_snap_container_data != snap_container_data) {
snap_container.SetNeedsPaintPropertyUpdate(); snap_container.SetNeedsPaintPropertyUpdate();
scrollable_area->SetSnapContainerData(snap_container_data);
scrollable_area->SetSnapContainerData(snap_container_data); }
} }
static cc::ScrollSnapAlign GetPhysicalAlignment( static cc::ScrollSnapAlign GetPhysicalAlignment(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment