Make RuleData support up to 8191 selectors
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Mar 2013 04:54:39 +0000 (04:54 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Mar 2013 04:54:39 +0000 (04:54 +0000)
https://bugs.webkit.org/show_bug.cgi?id=111663

Patch by Philippe Liard <pliard@chromium.org> on 2013-03-06
Reviewed by Andreas Kling.

r125294 made RuleData consume less memory by replacing a pointer with
an index encoded on 12 bits.
This unfortunately breaks Chrome for Android (and others) when a lot of
CSS is used or more precisely when selectorIndex cannot be stored on 12
bits.

Threfore this change decreases the number of bits used to store
m_position by 1 (from 19 to 18) and adds this extra bit to
m_selectorIndex so that values up to 8191 can be stored safely without
overflowing.

* css/RuleSet.h:
(RuleData):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@145034 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/css/RuleSet.h

index 78ff018..96618a6 100644 (file)
@@ -1,3 +1,24 @@
+2013-03-06  Philippe Liard  <pliard@chromium.org>
+
+        Make RuleData support up to 8191 selectors
+        https://bugs.webkit.org/show_bug.cgi?id=111663
+
+        Reviewed by Andreas Kling.
+
+        r125294 made RuleData consume less memory by replacing a pointer with
+        an index encoded on 12 bits.
+        This unfortunately breaks Chrome for Android (and others) when a lot of
+        CSS is used or more precisely when selectorIndex cannot be stored on 12
+        bits.
+
+        Threfore this change decreases the number of bits used to store
+        m_position by 1 (from 19 to 18) and adds this extra bit to
+        m_selectorIndex so that values up to 8191 can be stored safely without
+        overflowing.
+
+        * css/RuleSet.h:
+        (RuleData):
+
 2013-03-06  Seokju Kwon  <seokju.kwon@gmail.com>
 
         Web Inspector: Remove unused code from contextmenu of element panel
index 41bea21..421925f 100644 (file)
@@ -78,10 +78,10 @@ public:
 
 private:
     StyleRule* m_rule;
-    unsigned m_selectorIndex : 12;
+    unsigned m_selectorIndex : 13;
     // This number was picked fairly arbitrarily. We can probably lower it if we need to.
     // Some simple testing showed <100,000 RuleData's on large sites.
-    unsigned m_position : 19;
+    unsigned m_position : 18;
     unsigned m_hasFastCheckableSelector : 1;
     unsigned m_specificity : 24;
     unsigned m_hasMultipartSelector : 1;