Commit 76f4f5a8 authored by Oriol Brufau's avatar Oriol Brufau Committed by Commit Bot

[Editing] Fix perf regression from r814053

Before r814053, VisiblePosition::Create had a fast path for positions
with downstream affinity, always returning the backward canonical
position with downstream affinity.

But since r814053, that case chooses between the backward canonical
position with downstream affinity and the forward canonical position.
The code calls InSameLine() in order to decide, but this is slow.
So it caused a perf regression in modify-selection.html

This patch adds back a fast path for downstream affinity in case the
backward and forward canonical positions are equal, which is usual.
This fixes the perf regression in modify-selection.html

Bug: 1135577
Change-Id: Icb07c25efe8d21c04eb3659292c880af258cf97e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2453291Reviewed-by: default avatarXiaocheng Hu <xiaochengh@chromium.org>
Commit-Queue: Oriol Brufau <obrufau@igalia.com>
Cr-Commit-Position: refs/heads/master@{#815212}
parent eef6a03c
...@@ -116,6 +116,12 @@ VisiblePositionTemplate<Strategy> VisiblePositionTemplate<Strategy>::Create( ...@@ -116,6 +116,12 @@ VisiblePositionTemplate<Strategy> VisiblePositionTemplate<Strategy>::Create(
: SnapForward(position_with_affinity.GetPosition()); : SnapForward(position_with_affinity.GetPosition());
DCHECK(forward_position.IsNotNull()); DCHECK(forward_position.IsNotNull());
// Fast path to avoid slow InSameLine() below in common cases.
if (position_with_affinity.Affinity() == TextAffinity::kDownstream &&
backward_position_downstream == forward_position) {
return VisiblePositionTemplate<Strategy>(backward_position_downstream);
}
// When not at a line wrap, make sure to end up with the backward canonical // When not at a line wrap, make sure to end up with the backward canonical
// position with |TextAffinity::Downstream| affinity. // position with |TextAffinity::Downstream| affinity.
if (InSameLine(backward_position_upstream, forward_position)) if (InSameLine(backward_position_upstream, forward_position))
......
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