Title: [142398] trunk/Source/WebCore
- Revision
- 142398
- Author
- [email protected]
- Date
- 2013-02-10 05:44:02 -0800 (Sun, 10 Feb 2013)
Log Message
RenderText: Access characters through m_text instead of caching data pointers separately.
<http://webkit.org/b/109357>
Reviewed by Antti Koivisto.
Go through RenderText::m_text.impl() instead of caching the character data pointer.
RenderText should never have a null String in m_text so it's safe to access impl() directly.
We have assertions for this since before.
Removing this pointer shrinks RenderText by 8 bytes, allowing it to fit into a snugger size class.
749 KB progression on Membuster3.
* rendering/RenderText.cpp:
(SameSizeAsRenderText):
(WebCore::RenderText::RenderText):
(WebCore::RenderText::setTextInternal):
* rendering/RenderText.h:
(WebCore::RenderText::is8Bit):
(WebCore::RenderText::characters8):
(WebCore::RenderText::characters16):
(WebCore::RenderText::characterAt):
(WebCore::RenderText::operator[]):
(RenderText):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (142397 => 142398)
--- trunk/Source/WebCore/ChangeLog 2013-02-10 13:01:27 UTC (rev 142397)
+++ trunk/Source/WebCore/ChangeLog 2013-02-10 13:44:02 UTC (rev 142398)
@@ -1,3 +1,29 @@
+2013-02-10 Andreas Kling <[email protected]>
+
+ RenderText: Access characters through m_text instead of caching data pointers separately.
+ <http://webkit.org/b/109357>
+
+ Reviewed by Antti Koivisto.
+
+ Go through RenderText::m_text.impl() instead of caching the character data pointer.
+ RenderText should never have a null String in m_text so it's safe to access impl() directly.
+ We have assertions for this since before.
+
+ Removing this pointer shrinks RenderText by 8 bytes, allowing it to fit into a snugger size class.
+ 749 KB progression on Membuster3.
+
+ * rendering/RenderText.cpp:
+ (SameSizeAsRenderText):
+ (WebCore::RenderText::RenderText):
+ (WebCore::RenderText::setTextInternal):
+ * rendering/RenderText.h:
+ (WebCore::RenderText::is8Bit):
+ (WebCore::RenderText::characters8):
+ (WebCore::RenderText::characters16):
+ (WebCore::RenderText::characterAt):
+ (WebCore::RenderText::operator[]):
+ (RenderText):
+
2013-02-10 Jae Hyun Park <[email protected]>
Rename ENABLE(GLIB_SUPPORT) to USE(GLIB)
Modified: trunk/Source/WebCore/rendering/RenderText.cpp (142397 => 142398)
--- trunk/Source/WebCore/rendering/RenderText.cpp 2013-02-10 13:01:27 UTC (rev 142397)
+++ trunk/Source/WebCore/rendering/RenderText.cpp 2013-02-10 13:44:02 UTC (rev 142398)
@@ -59,7 +59,7 @@
uint32_t bitfields : 16;
float widths[4];
String text;
- void* pointers[3];
+ void* pointers[2];
};
COMPILE_ASSERT(sizeof(RenderText) == sizeof(SameSizeAsRenderText), RenderText_should_stay_small);
@@ -156,11 +156,6 @@
if (node && node->isDocumentNode())
setDocumentForAnonymous(static_cast<Document*>(node));
- m_is8Bit = m_text.is8Bit();
- if (is8Bit())
- m_data.characters8 = m_text.characters8();
- else
- m_data.characters16 = m_text.characters16();
m_isAllASCII = m_text.containsOnlyASCII();
m_canUseSimpleFontCodePath = computeCanUseSimpleFontCodePath();
setIsText();
@@ -1427,11 +1422,6 @@
ASSERT(m_text);
ASSERT(!isBR() || (textLength() == 1 && m_text[0] == '\n'));
- m_is8Bit = m_text.is8Bit();
- if (is8Bit())
- m_data.characters8 = m_text.characters8();
- else
- m_data.characters16 = m_text.characters16();
m_isAllASCII = m_text.containsOnlyASCII();
m_canUseSimpleFontCodePath = computeCanUseSimpleFontCodePath();
}
Modified: trunk/Source/WebCore/rendering/RenderText.h (142397 => 142398)
--- trunk/Source/WebCore/rendering/RenderText.h 2013-02-10 13:01:27 UTC (rev 142397)
+++ trunk/Source/WebCore/rendering/RenderText.h 2013-02-10 13:44:02 UTC (rev 142398)
@@ -72,11 +72,11 @@
virtual VisiblePosition positionForPoint(const LayoutPoint&);
- bool is8Bit() const { return m_is8Bit; }
- const LChar* characters8() const { ASSERT(m_is8Bit); return m_data.characters8; }
- const UChar* characters16() const { ASSERT(!m_is8Bit); return m_data.characters16; }
+ bool is8Bit() const { return m_text.is8Bit(); }
+ const LChar* characters8() const { return m_text.impl()->characters8(); }
+ const UChar* characters16() const { return m_text.impl()->characters16(); }
const UChar* characters() const { return m_text.characters(); }
- UChar characterAt(unsigned i) const { return m_is8Bit ? characters8()[i] : characters16()[i]; }
+ UChar characterAt(unsigned i) const { return is8Bit() ? characters8()[i] : characters16()[i]; }
UChar operator[](unsigned i) const { return characterAt(i); }
unsigned textLength() const { return m_text.length(); } // non virtual implementation of length()
void positionLineBox(InlineBox*);
@@ -191,7 +191,6 @@
// just dirtying everything when character data is modified (e.g., appended/inserted
// or removed).
bool m_containsReversedText : 1;
- bool m_is8Bit : 1;
bool m_isAllASCII : 1;
bool m_canUseSimpleFontCodePath : 1;
mutable bool m_knownToHaveNoOverflowAndNoFallbackFonts : 1;
@@ -203,10 +202,6 @@
float m_endMinWidth;
String m_text;
- union {
- const LChar* characters8;
- const UChar* characters16;
- } m_data;
InlineTextBox* m_firstTextBox;
InlineTextBox* m_lastTextBox;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes