WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Fix CSSPrimitiveValue::cssText() to use StringBuilder
0001-Fix-CSSPrimitiveValue-cssText-min.patch (text/plain), 12.88 KB, created by
Oliver Varga
on 2011-08-25 01:35:12 PDT
(
hide
)
Description:
Fix CSSPrimitiveValue::cssText() to use StringBuilder
Filename:
MIME Type:
Creator:
Oliver Varga
Created:
2011-08-25 01:35:12 PDT
Size:
12.88 KB
patch
obsolete
>From 95730809c53278bc70a02aba5d569a9043801566 Mon Sep 17 00:00:00 2001 >From: Oliver Varga <voliver@inf.u-szeged.hu> >Date: Thu, 25 Aug 2011 10:32:16 +0200 >Subject: [PATCH] Fix CSSPrimitiveValue::cssText min > >--- > Source/WebCore/ChangeLog | 16 +++ > Source/WebCore/css/CSSPrimitiveValue.cpp | 172 +++++++++++++++++------------- > 2 files changed, 115 insertions(+), 73 deletions(-) > >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index c52c9a1..788f000 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,19 @@ >+2011-08-25 Oliver Varga <voliver@inf.u-szeged.hu> >+ >+ Fix CSSPrimitiveValue::cssText() to use StringBuilder. >+ https://bugs.webkit.org/show_bug.cgi?id=66851 >+ >+ Replace the string concatenation (+, +=, and Vector<Uchar> append()) >+ to the much faster StringBuilder append(). >+ The change was requested by Darin Adler. >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ No new tests this is only a minimal performance tweak. >+ >+ * css/CSSPrimitiveValue.cpp: >+ (WebCore::CSSPrimitiveValue::cssText): >+ > 2011-08-23 Pavel Feldman <pfeldman@google.com> > > Web Inspector: annotate and prepare for compilation first 14 JavaScript files within 4 modules. >diff --git a/Source/WebCore/css/CSSPrimitiveValue.cpp b/Source/WebCore/css/CSSPrimitiveValue.cpp >index 9816da5..4bf6f8c 100644 >--- a/Source/WebCore/css/CSSPrimitiveValue.cpp >+++ b/Source/WebCore/css/CSSPrimitiveValue.cpp >@@ -39,6 +39,7 @@ > #include <wtf/DecimalNumber.h> > #include <wtf/StdLibExtras.h> > #include <wtf/text/StringBuffer.h> >+#include <wtf/text/StringBuilder.h> > > #if ENABLE(DASHBOARD_SUPPORT) > #include "DashboardRegion.h" >@@ -627,129 +628,150 @@ String CSSPrimitiveValue::cssText() const > return cssTextCache().get(this); > } > >- String text; >+ StringBuilder text; > switch (m_type) { > case CSS_UNKNOWN: > // FIXME > break; > case CSS_NUMBER: > case CSS_PARSER_INTEGER: >- text = formatNumber(m_value.num); >+ text.append(formatNumber(m_value.num)); > break; > case CSS_PERCENTAGE: >- text = formatNumber(m_value.num) + "%"; >+ text.append(formatNumber(m_value.num)); >+ text.append('%'); > break; > case CSS_EMS: >- text = formatNumber(m_value.num) + "em"; >+ text.append(formatNumber(m_value.num)); >+ text.append("em"); > break; > case CSS_EXS: >- text = formatNumber(m_value.num) + "ex"; >+ text.append(formatNumber(m_value.num)); >+ text.append("ex"); > break; > case CSS_REMS: >- text = formatNumber(m_value.num) + "rem"; >+ text.append(formatNumber(m_value.num)); >+ text.append("rem"); > break; > case CSS_PX: >- text = formatNumber(m_value.num) + "px"; >+ text.append(formatNumber(m_value.num)); >+ text.append("px"); > break; > case CSS_CM: >- text = formatNumber(m_value.num) + "cm"; >+ text.append(formatNumber(m_value.num)); >+ text.append("cm"); > break; > case CSS_MM: >- text = formatNumber(m_value.num) + "mm"; >+ text.append(formatNumber(m_value.num)); >+ text.append("mm"); > break; > case CSS_IN: >- text = formatNumber(m_value.num) + "in"; >+ text.append(formatNumber(m_value.num)); >+ text.append("in"); > break; > case CSS_PT: >- text = formatNumber(m_value.num) + "pt"; >+ text.append(formatNumber(m_value.num)); >+ text.append("pt"); > break; > case CSS_PC: >- text = formatNumber(m_value.num) + "pc"; >+ text.append(formatNumber(m_value.num)); >+ text.append("pc"); > break; > case CSS_DEG: >- text = formatNumber(m_value.num) + "deg"; >+ text.append(formatNumber(m_value.num)); >+ text.append("deg"); > break; > case CSS_RAD: >- text = formatNumber(m_value.num) + "rad"; >+ text.append(formatNumber(m_value.num)); >+ text.append("rad"); > break; > case CSS_GRAD: >- text = formatNumber(m_value.num) + "grad"; >+ text.append(formatNumber(m_value.num)); >+ text.append("grad"); > break; > case CSS_MS: >- text = formatNumber(m_value.num) + "ms"; >+ text.append(formatNumber(m_value.num)); >+ text.append("ms"); > break; > case CSS_S: >- text = formatNumber(m_value.num) + "s"; >+ text.append(formatNumber(m_value.num)); >+ text.append('s'); > break; > case CSS_HZ: >- text = formatNumber(m_value.num) + "hz"; >+ text.append(formatNumber(m_value.num)); >+ text.append("hz"); > break; > case CSS_KHZ: >- text = formatNumber(m_value.num) + "khz"; >+ text.append(formatNumber(m_value.num)); >+ text.append("khz"); > break; > case CSS_TURN: >- text = formatNumber(m_value.num) + "turn"; >+ text.append(formatNumber(m_value.num)); >+ text.append("turn"); > break; > case CSS_DIMENSION: > // FIXME > break; > case CSS_STRING: >- text = quoteCSSStringIfNeeded(m_value.string); >+ text.append(quoteCSSStringIfNeeded(m_value.string)); > break; > case CSS_FROM_FLOW: >- text = "-webkit-from-flow(" + quoteCSSStringIfNeeded(m_value.string) + ")"; >+ text.append("-webkit-from-flow("); >+ text.append(quoteCSSStringIfNeeded(m_value.string)); >+ text.append(')'); > break; > case CSS_URI: >- text = "url(" + quoteCSSURLIfNeeded(m_value.string) + ")"; >+ text.append("url("); >+ text.append(quoteCSSURLIfNeeded(m_value.string)); >+ text.append(')'); > break; > case CSS_IDENT: >- text = valueOrPropertyName(m_value.ident); >+ text.append(valueOrPropertyName(m_value.ident)); > break; > case CSS_ATTR: { > DEFINE_STATIC_LOCAL(const String, attrParen, ("attr(")); > >- Vector<UChar> result; >- result.reserveInitialCapacity(6 + m_value.string->length()); >+ StringBuilder result; > >- append(result, attrParen); >- append(result, m_value.string); >- result.uncheckedAppend(')'); >+ result.append(attrParen); >+ result.append(m_value.string); >+ result.append(')'); > >- text = String::adopt(result); >+ text.append(result.toString()); > break; > } > case CSS_COUNTER_NAME: >- text = "counter("; >- text += m_value.string; >- text += ")"; >+ text.append("counter("); >+ text.append(m_value.string); >+ text.append(')'); > break; > case CSS_COUNTER: >- text = "counter("; >- text += String::number(m_value.num); >- text += ")"; >+ text.append("counter("); >+ text.append(String::number(m_value.num)); >+ text.append(')'); > // FIXME: Add list-style and separator > break; > case CSS_RECT: { > DEFINE_STATIC_LOCAL(const String, rectParen, ("rect(")); > > Rect* rectVal = getRectValue(); >- Vector<UChar> result; >- result.reserveInitialCapacity(32); >- append(result, rectParen); > >- append(result, rectVal->top()->cssText()); >+ StringBuilder result; >+ result.append(rectParen); >+ >+ result.append(rectVal->top()->cssText()); > result.append(' '); > >- append(result, rectVal->right()->cssText()); >+ result.append(rectVal->right()->cssText()); > result.append(' '); > >- append(result, rectVal->bottom()->cssText()); >+ result.append(rectVal->bottom()->cssText()); > result.append(' '); > >- append(result, rectVal->left()->cssText()); >+ result.append(rectVal->left()->cssText()); > result.append(')'); > >- text = String::adopt(result); >+ text.append(result.toString()); > break; > } > case CSS_RGBCOLOR: >@@ -763,45 +785,46 @@ String CSSPrimitiveValue::cssText() const > Color::parseHexColor(m_value.string, rgbColor); > Color color(rgbColor); > >- Vector<UChar> result; >- result.reserveInitialCapacity(32); >+ StringBuilder result; > if (color.hasAlpha()) >- append(result, rgbaParen); >+ result.append(rgbaParen); > else >- append(result, rgbParen); >+ result.append(rgbParen); > >- appendNumber(result, static_cast<unsigned char>(color.red())); >- append(result, commaSpace); >+ result.append(String::number(color.red())); >+ result.append(commaSpace); > >- appendNumber(result, static_cast<unsigned char>(color.green())); >- append(result, commaSpace); >+ result.append(String::number(color.green())); >+ result.append(commaSpace); > >- appendNumber(result, static_cast<unsigned char>(color.blue())); >+ result.append(String::number(color.blue())); > if (color.hasAlpha()) { >- append(result, commaSpace); >- append(result, String::number(color.alpha() / 256.0f)); >+ result.append(commaSpace); >+ result.append(String::number(color.alpha() / 256.0f)); > } > > result.append(')'); >- text = String::adopt(result); >+ >+ text.append(result.toString()); > break; > } > case CSS_PAIR: >- text = m_value.pair->first()->cssText(); >- text += " "; >- text += m_value.pair->second()->cssText(); >+ text.append(m_value.pair->first()->cssText()); >+ text.append(' '); >+ text.append(m_value.pair->second()->cssText()); > break; > #if ENABLE(DASHBOARD_SUPPORT) > case CSS_DASHBOARD_REGION: > for (DashboardRegion* region = getDashboardRegionValue(); region; region = region->m_next.get()) { > if (!text.isEmpty()) > text.append(' '); >- text += "dashboard-region("; >- text += region->m_label; >+ >+ text.append("dashboard-region("); >+ text.append("region->m_label"); > if (region->m_isCircle) >- text += " circle"; >+ text.append(" circle"); > else if (region->m_isRectangle) >- text += " rectangle"; >+ text.append(" rectangle"); > else > break; > if (region->top()->m_type == CSS_IDENT && region->top()->getIdent() == CSSValueInvalid) { >@@ -813,32 +836,35 @@ String CSSPrimitiveValue::cssText() const > ASSERT(region->left()->getIdent() == CSSValueInvalid); > } else { > text.append(' '); >- text += region->top()->cssText() + " "; >- text += region->right()->cssText() + " "; >- text += region->bottom()->cssText() + " "; >- text += region->left()->cssText(); >+ text.append(region->top()->cssText()); >+ text.append(' '); >+ text.append(region->right()->cssText()); >+ text.append(' '); >+ text.append(region->bottom()->cssText()); >+ text.append(' '); >+ text.append(region->left()->cssText()); > } >- text += ")"; >+ text.append(")"); > } > break; > #endif > case CSS_PARSER_OPERATOR: { > char c = static_cast<char>(m_value.ident); >- text = String(&c, 1U); >+ text.append(String(&c, 1U)); > break; > } > case CSS_PARSER_IDENTIFIER: >- text = quoteCSSStringIfNeeded(m_value.string); >+ text.append(quoteCSSStringIfNeeded(m_value.string)); > break; > case CSS_SHAPE: >- text = m_value.shape->cssText(); >+ text.append(m_value.shape->cssText()); > break; > } > > ASSERT(!cssTextCache().contains(this)); >- cssTextCache().set(this, text); >+ cssTextCache().set(this, text.toString()); > m_hasCachedCSSText = true; >- return text; >+ return text.toString(); > } > > void CSSPrimitiveValue::addSubresourceStyleURLs(ListHashSet<KURL>& urls, const CSSStyleSheet* styleSheet) >-- >1.7.0.4 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
darin
:
review-
darin
:
commit-queue-
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 66851
:
104982
|
105141
|
105144
|
105339
|
107345
|
107347
|
111022
|
111257
|
111441
|
111570
|
111571
|
111955
|
111969
|
112126
|
113473
|
121666