Title: [274700] trunk/Source/WebCore
- Revision
- 274700
- Author
- [email protected]
- Date
- 2021-03-18 21:21:36 -0700 (Thu, 18 Mar 2021)
Log Message
Add a fast path for subdivideAndResolveStyle()
https://bugs.webkit.org/show_bug.cgi?id=223480
Reviewed by Myles Maxfield.
Most of the time, InlineTextBox::paint() will be painting text runs with no marked text,
so optimize subdivideAndResolveStyle() for this case.
This removes 1.6% of the time in painting in the MotionMark Design subtest.
* rendering/MarkedTextStyle.cpp:
(WebCore::subdivideAndResolveStyle):
(WebCore::coalesceAdjacentMarkedTexts): No need to do any work if there are zero or one
ranges.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (274699 => 274700)
--- trunk/Source/WebCore/ChangeLog 2021-03-19 04:20:11 UTC (rev 274699)
+++ trunk/Source/WebCore/ChangeLog 2021-03-19 04:21:36 UTC (rev 274700)
@@ -1,3 +1,20 @@
+2021-03-18 Simon Fraser <[email protected]>
+
+ Add a fast path for subdivideAndResolveStyle()
+ https://bugs.webkit.org/show_bug.cgi?id=223480
+
+ Reviewed by Myles Maxfield.
+
+ Most of the time, InlineTextBox::paint() will be painting text runs with no marked text,
+ so optimize subdivideAndResolveStyle() for this case.
+
+ This removes 1.6% of the time in painting in the MotionMark Design subtest.
+
+ * rendering/MarkedTextStyle.cpp:
+ (WebCore::subdivideAndResolveStyle):
+ (WebCore::coalesceAdjacentMarkedTexts): No need to do any work if there are zero or one
+ ranges.
+
2021-03-18 Aditya Keerthi <[email protected]>
[iOS] Update strings and icons in the file upload panel
Modified: trunk/Source/WebCore/rendering/MarkedTextStyle.cpp (274699 => 274700)
--- trunk/Source/WebCore/rendering/MarkedTextStyle.cpp 2021-03-19 04:20:11 UTC (rev 274699)
+++ trunk/Source/WebCore/rendering/MarkedTextStyle.cpp 2021-03-19 04:21:36 UTC (rev 274700)
@@ -120,16 +120,23 @@
if (textsToSubdivide.isEmpty())
return { };
+ Vector<StyledMarkedText> frontmostMarkedTexts;
+
+ auto& lineStyle = isFirstLine ? renderer.firstLineStyle() : renderer.style();
+ auto baseStyle = computeStyleForUnmarkedMarkedText(renderer, lineStyle, isFirstLine, paintInfo);
+
+ if (textsToSubdivide.size() == 1 && textsToSubdivide[0].type == MarkedText::Unmarked) {
+ StyledMarkedText styledMarkedText = textsToSubdivide[0];
+ styledMarkedText.style = WTFMove(baseStyle);
+ return { styledMarkedText };
+ }
+
auto markedTexts = subdivide(textsToSubdivide);
ASSERT(!markedTexts.isEmpty());
if (UNLIKELY(markedTexts.isEmpty()))
return { };
- auto& lineStyle = isFirstLine ? renderer.firstLineStyle() : renderer.style();
- auto baseStyle = computeStyleForUnmarkedMarkedText(renderer, lineStyle, isFirstLine, paintInfo);
-
// Compute frontmost overlapping styled marked texts.
- Vector<StyledMarkedText> frontmostMarkedTexts;
frontmostMarkedTexts.reserveInitialCapacity(markedTexts.size());
frontmostMarkedTexts.uncheckedAppend(resolveStyleForMarkedText(markedTexts[0], baseStyle, renderer, lineStyle, paintInfo));
for (auto it = markedTexts.begin() + 1, end = markedTexts.end(); it != end; ++it) {
@@ -147,8 +154,8 @@
Vector<StyledMarkedText> coalesceAdjacentMarkedTexts(const Vector<StyledMarkedText>& textsToCoalesce, MarkedTextStylesEqualityFunction areMarkedTextStylesEqual)
{
- if (textsToCoalesce.isEmpty())
- return { };
+ if (textsToCoalesce.size() <= 1)
+ return textsToCoalesce;
auto areAdjacentMarkedTextsWithSameStyle = [&] (const StyledMarkedText& a, const StyledMarkedText& b) {
return a.endOffset == b.startOffset && areMarkedTextStylesEqual(a.style, b.style);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes