<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>44107</bug_id>
          
          <creation_ts>2010-08-17 07:07:26 -0700</creation_ts>
          <short_desc>CSS: Make rgb() and rgba() fast paths case-insensitive</short_desc>
          <delta_ts>2010-08-18 13:05:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Performance</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>265517</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-17 07:07:26 -0700</bug_when>
    <thetext>The fast path in CSSParser::parseColor() could easily catch RGB() and RGBA() as well.

Instead of equalIgnoringCase(), we can do inline character comparison and gain some speed while we&apos;re at it, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265521</commentid>
    <comment_count>1</comment_count>
      <attachid>64588</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-17 07:13:12 -0700</bug_when>
    <thetext>Created attachment 64588
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265865</commentid>
    <comment_count>2</comment_count>
      <attachid>64588</attachid>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-08-17 17:25:24 -0700</bug_when>
    <thetext>Comment on attachment 64588
Proposed patch

&gt; -    if (name.startsWith(&quot;rgba(&quot;)) {
&gt; +    if (mightBeRGBA(characters, length)) {

Will there be a (minor) behavior difference IF the input is invalid e.g. &quot;rgba(foo&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265872</commentid>
    <comment_count>3</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-17 17:36:54 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 64588 [details])
&gt; &gt; -    if (name.startsWith(&quot;rgba(&quot;)) {
&gt; &gt; +    if (mightBeRGBA(characters, length)) {
&gt; 
&gt; Will there be a (minor) behavior difference IF the input is invalid e.g. &quot;rgba(foo&quot;?

The invalid string &quot;rgba(foo&quot; will fail via Color::setNamedColor() below instead of inside the fast rgba() parser.

Behavior won&apos;t change but you have a point - it will be slightly slower for invalid strings. I will update the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266158</commentid>
    <comment_count>4</comment_count>
      <attachid>64719</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-18 09:24:52 -0700</bug_when>
    <thetext>Created attachment 64719
Proposed patch v2

Updated to avoid performance regression for invalid colors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266206</commentid>
    <comment_count>5</comment_count>
      <attachid>64719</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-18 10:26:01 -0700</bug_when>
    <thetext>Comment on attachment 64719
Proposed patch v2

&gt; +static inline bool mightBeRGBA(const UChar* characters, unsigned length)
&gt; +{
&gt; +    if (length &lt; 5)
&gt; +        return false;
&gt; +    return characters[4] == &apos;(&apos;
&gt; +        &amp;&amp; (characters[0] == &apos;r&apos; || characters[0] == &apos;R&apos;)
&gt; +        &amp;&amp; (characters[1] == &apos;g&apos; || characters[1] == &apos;G&apos;)
&gt; +        &amp;&amp; (characters[2] == &apos;b&apos; || characters[2] == &apos;B&apos;)
&gt; +        &amp;&amp; (characters[3] == &apos;a&apos; || characters[3] == &apos;A&apos;);
&gt; +}

This kind of check can be done considerably more efficiently like this:

    &amp;&amp; (characters[0] | 0x20) == &apos;r&apos;
    &amp;&amp; (characters[1] | 0x20) == &apos;b&apos;

r=me as-is but consider my faster version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266248</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-18 10:56:29 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; r=me as-is but consider my faster version

Indeed, Ariya was saying the same thing on IRC. I will land with that modification. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266328</commentid>
    <comment_count>7</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-18 13:05:31 -0700</bug_when>
    <thetext>Committed r65626: &lt;http://trac.webkit.org/changeset/65626&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64588</attachid>
            <date>2010-08-17 07:13:12 -0700</date>
            <delta_ts>2010-08-17 18:48:00 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-44107.diff</filename>
            <type>text/plain</type>
            <size>2641</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTI4OGU0ZC4uN2E5YmJiOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0wOC0xNyAgQW5kcmVhcyBLbGlu
ZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENTUzogTWFrZSByZ2IoKSBhbmQgcmdiYSgpIGZhc3QgcGF0
aHMgY2FzZS1pbnNlbnNpdGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDQxMDcKKworICAgICAgICBBbHNvIGlubGluZWQgdGhlIHN0cmluZyBjb21w
YXJpc29ucyBhZ2FpbnN0ICJyZ2IoIiBhbmQgInJnYmEoIgorICAgICAgICB3aGljaCBpcyBmYXN0
ZXIgYW5kIGF2b2lkcyBjcmVhdGluZyBhIHRlbXBvcmFyeSBTdHJpbmcgb2JqZWN0LgorCisgICAg
ICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptaWdodEJlUkdCQSk6
CisgICAgICAgIChXZWJDb3JlOjptaWdodEJlUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VDb2xvcik6CisKIDIwMTAtMDgtMTcgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYS4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3Bw
CmluZGV4IGU1MTI2YTkuLjg2YjcwOTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMzc5Niw2ICszNzk2LDI5
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUFscGhhVmFsdWUoY29uc3QgVUNoYXIqJiBzdHJp
bmcsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyCiAgICAgcmV0dXJuICpmb3VuZFRlcm1pbmF0b3Ig
PT0gdGVybWluYXRvcjsKIH0KIAorc3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVSR0JBKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gU2hvcnRlc3Qg
cG9zc2libGU6ICJyZ2JhKDAsMCwwLDApIgorICAgIGlmIChsZW5ndGggPCAxMykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjaGFyYWN0ZXJzWzRdID09ICcoJworICAgICAgICAm
JiAoY2hhcmFjdGVyc1swXSA9PSAncicgfHwgY2hhcmFjdGVyc1swXSA9PSAnUicpCisgICAgICAg
ICYmIChjaGFyYWN0ZXJzWzFdID09ICdnJyB8fCBjaGFyYWN0ZXJzWzFdID09ICdHJykKKyAgICAg
ICAgJiYgKGNoYXJhY3RlcnNbMl0gPT0gJ2InIHx8IGNoYXJhY3RlcnNbMl0gPT0gJ0InKQorICAg
ICAgICAmJiAoY2hhcmFjdGVyc1szXSA9PSAnYScgfHwgY2hhcmFjdGVyc1szXSA9PSAnQScpOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgbWlnaHRCZVJHQihjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIFNob3J0ZXN0IHBvc3NpYmxlOiAicmdiKDAs
MCwwKSIKKyAgICBpZiAobGVuZ3RoIDwgMTApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gY2hhcmFjdGVyc1s0XSA9PSAnKCcKKyAgICAgICAgJiYgKGNoYXJhY3RlcnNbMF0gPT0g
J3InIHx8IGNoYXJhY3RlcnNbMF0gPT0gJ1InKQorICAgICAgICAmJiAoY2hhcmFjdGVyc1sxXSA9
PSAnZycgfHwgY2hhcmFjdGVyc1sxXSA9PSAnRycpCisgICAgICAgICYmIChjaGFyYWN0ZXJzWzJd
ID09ICdiJyB8fCBjaGFyYWN0ZXJzWzJdID09ICdCJyk7Cit9CisKIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUNvbG9yKGNvbnN0IFN0cmluZyAmbmFtZSwgUkdCQTMyJiByZ2IsIGJvb2wgc3RyaWN0KQog
ewogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CkBAIC0z
ODEyLDcgKzM4MzUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcg
Jm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmljdCkKICAgICB9CiAKICAgICAvLyBUcnkgcmdi
YSgpIHN5bnRheC4KLSAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJyZ2JhKCIpKSB7CisgICAgaWYg
KG1pZ2h0QmVSR0JBKGNoYXJhY3RlcnMsIGxlbmd0aCkpIHsKICAgICAgICAgY29uc3QgVUNoYXIq
IGN1cnJlbnQgPSBjaGFyYWN0ZXJzICsgNTsKICAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGNo
YXJhY3RlcnMgKyBsZW5ndGg7CiAgICAgICAgIGludCByZWQ7CkBAIC0zODM0LDcgKzM4NTcsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYg
cmdiLCBib29sIHN0cmljdCkKICAgICB9CiAKICAgICAvLyBUcnkgcmdiKCkgc3ludGF4LgotICAg
IGlmIChuYW1lLnN0YXJ0c1dpdGgoInJnYigiKSkgeworICAgIGlmIChtaWdodEJlUkdCKGNoYXJh
Y3RlcnMsIGxlbmd0aCkpIHsKICAgICAgICAgY29uc3QgVUNoYXIqIGN1cnJlbnQgPSBjaGFyYWN0
ZXJzICsgNDsKICAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7
CiAgICAgICAgIGludCByZWQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64719</attachid>
            <date>2010-08-18 09:24:52 -0700</date>
            <delta_ts>2010-08-18 10:26:01 -0700</delta_ts>
            <desc>Proposed patch v2</desc>
            <filename>bug-44107-v2.diff</filename>
            <type>text/plain</type>
            <size>2571</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjlkOTQ3NC4uYmQ1YjgwOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0wOC0xOCAgQW5kcmVhcyBLbGlu
ZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENTUzogTWFrZSByZ2IoKSBhbmQgcmdiYSgpIGZhc3QgcGF0
aHMgY2FzZS1pbnNlbnNpdGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDQxMDcKKworICAgICAgICBBbHNvIGlubGluZWQgdGhlIHN0cmluZyBjb21w
YXJpc29ucyBhZ2FpbnN0ICJyZ2IoIiBhbmQgInJnYmEoIgorICAgICAgICB3aGljaCBpcyBmYXN0
ZXIgYW5kIGF2b2lkcyBjcmVhdGluZyBhIHRlbXBvcmFyeSBTdHJpbmcgb2JqZWN0LgorCisgICAg
ICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptaWdodEJlUkdCQSk6
CisgICAgICAgIChXZWJDb3JlOjptaWdodEJlUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VDb2xvcik6CisKIDIwMTAtMDgtMTggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJl
dmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2
NTYwMy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuY3BwCmluZGV4IGU1MTI2YTkuLmQxNjVmNzQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAt
Mzc5Niw2ICszNzk2LDI3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUFscGhhVmFsdWUoY29u
c3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyCiAgICAgcmV0dXJuICpm
b3VuZFRlcm1pbmF0b3IgPT0gdGVybWluYXRvcjsKIH0KIAorc3RhdGljIGlubGluZSBib29sIG1p
Z2h0QmVSR0JBKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgaWYgKGxlbmd0aCA8IDUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2hh
cmFjdGVyc1s0XSA9PSAnKCcKKyAgICAgICAgJiYgKGNoYXJhY3RlcnNbMF0gPT0gJ3InIHx8IGNo
YXJhY3RlcnNbMF0gPT0gJ1InKQorICAgICAgICAmJiAoY2hhcmFjdGVyc1sxXSA9PSAnZycgfHwg
Y2hhcmFjdGVyc1sxXSA9PSAnRycpCisgICAgICAgICYmIChjaGFyYWN0ZXJzWzJdID09ICdiJyB8
fCBjaGFyYWN0ZXJzWzJdID09ICdCJykKKyAgICAgICAgJiYgKGNoYXJhY3RlcnNbM10gPT0gJ2En
IHx8IGNoYXJhY3RlcnNbM10gPT0gJ0EnKTsKK30KKworc3RhdGljIGlubGluZSBib29sIG1pZ2h0
QmVSR0IoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBp
ZiAobGVuZ3RoIDwgNCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjaGFyYWN0
ZXJzWzNdID09ICcoJworICAgICAgICAmJiAoY2hhcmFjdGVyc1swXSA9PSAncicgfHwgY2hhcmFj
dGVyc1swXSA9PSAnUicpCisgICAgICAgICYmIChjaGFyYWN0ZXJzWzFdID09ICdnJyB8fCBjaGFy
YWN0ZXJzWzFdID09ICdHJykKKyAgICAgICAgJiYgKGNoYXJhY3RlcnNbMl0gPT0gJ2InIHx8IGNo
YXJhY3RlcnNbMl0gPT0gJ0InKTsKK30KKwogYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29u
c3QgU3RyaW5nICZuYW1lLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3QpCiB7CiAgICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJhY3RlcnMoKTsKQEAgLTM4MTIsNyArMzgzMyw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyAmbmFtZSwgUkdCQTMy
JiByZ2IsIGJvb2wgc3RyaWN0KQogICAgIH0KIAogICAgIC8vIFRyeSByZ2JhKCkgc3ludGF4Lgot
ICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoInJnYmEoIikpIHsKKyAgICBpZiAobWlnaHRCZVJHQkEo
Y2hhcmFjdGVycywgbGVuZ3RoKSkgewogICAgICAgICBjb25zdCBVQ2hhciogY3VycmVudCA9IGNo
YXJhY3RlcnMgKyA1OwogICAgICAgICBjb25zdCBVQ2hhciogZW5kID0gY2hhcmFjdGVycyArIGxl
bmd0aDsKICAgICAgICAgaW50IHJlZDsKQEAgLTM4MzQsNyArMzg1NSw3IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyAmbmFtZSwgUkdCQTMyJiByZ2IsIGJvb2wgc3Ry
aWN0KQogICAgIH0KIAogICAgIC8vIFRyeSByZ2IoKSBzeW50YXguCi0gICAgaWYgKG5hbWUuc3Rh
cnRzV2l0aCgicmdiKCIpKSB7CisgICAgaWYgKG1pZ2h0QmVSR0IoY2hhcmFjdGVycywgbGVuZ3Ro
KSkgewogICAgICAgICBjb25zdCBVQ2hhciogY3VycmVudCA9IGNoYXJhY3RlcnMgKyA0OwogICAg
ICAgICBjb25zdCBVQ2hhciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKICAgICAgICAgaW50
IHJlZDsK
</data>
<flag name="review"
          id="53341"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>