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

Reply via email to