<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[208653] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/208653">208653</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-11-12 09:54:42 -0800 (Sat, 12 Nov 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Speed up setting attributes of input elements of type 'text'
https://bugs.webkit.org/show_bug.cgi?id=164674

Reviewed by Ryosuke Niwa.

Speed up setting attributes of input elements of type 'text' by calling
updateInnerTextValue() only when needed. It was previously called
whenever an attribute was set, no matter it could impact its text value
or not.

No new tests, no Web-exposed behavior change.

* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::parseAttribute):
* html/InputType.cpp:
(WebCore::InputType::attributeChanged):
* html/InputType.h:
* html/TextFieldInputType.cpp:
(WebCore::TextFieldInputType::attributeChanged):
* html/TextFieldInputType.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLInputElementcpp">trunk/Source/WebCore/html/HTMLInputElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlInputTypecpp">trunk/Source/WebCore/html/InputType.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlInputTypeh">trunk/Source/WebCore/html/InputType.h</a></li>
<li><a href="#trunkSourceWebCorehtmlTextFieldInputTypecpp">trunk/Source/WebCore/html/TextFieldInputType.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlTextFieldInputTypeh">trunk/Source/WebCore/html/TextFieldInputType.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (208652 => 208653)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-11-12 17:43:40 UTC (rev 208652)
+++ trunk/Source/WebCore/ChangeLog        2016-11-12 17:54:42 UTC (rev 208653)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2016-11-12  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Speed up setting attributes of input elements of type 'text'
+        https://bugs.webkit.org/show_bug.cgi?id=164674
+
+        Reviewed by Ryosuke Niwa.
+
+        Speed up setting attributes of input elements of type 'text' by calling
+        updateInnerTextValue() only when needed. It was previously called
+        whenever an attribute was set, no matter it could impact its text value
+        or not.
+
+        No new tests, no Web-exposed behavior change.
+
+        * html/HTMLInputElement.cpp:
+        (WebCore::HTMLInputElement::parseAttribute):
+        * html/InputType.cpp:
+        (WebCore::InputType::attributeChanged):
+        * html/InputType.h:
+        * html/TextFieldInputType.cpp:
+        (WebCore::TextFieldInputType::attributeChanged):
+        * html/TextFieldInputType.h:
+
</ins><span class="cx"> 2016-11-12  Dan Bernstein  &lt;mitz@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Tried to fix the 32-bit build.
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLInputElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (208652 => 208653)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLInputElement.cpp        2016-11-12 17:43:40 UTC (rev 208652)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp        2016-11-12 17:54:42 UTC (rev 208653)
</span><span class="lines">@@ -780,7 +780,8 @@
</span><span class="cx"> #endif
</span><span class="cx">     else
</span><span class="cx">         HTMLTextFormControlElement::parseAttribute(name, value);
</span><del>-    m_inputType-&gt;attributeChanged();
</del><ins>+
+    m_inputType-&gt;attributeChanged(name);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void HTMLInputElement::parserDidSetAttributes()
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlInputTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/InputType.cpp (208652 => 208653)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/InputType.cpp        2016-11-12 17:43:40 UTC (rev 208652)
+++ trunk/Source/WebCore/html/InputType.cpp        2016-11-12 17:54:42 UTC (rev 208653)
</span><span class="lines">@@ -906,7 +906,7 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void InputType::attributeChanged()
</del><ins>+void InputType::attributeChanged(const QualifiedName&amp;)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlInputTypeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/InputType.h (208652 => 208653)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/InputType.h        2016-11-12 17:43:40 UTC (rev 208652)
+++ trunk/Source/WebCore/html/InputType.h        2016-11-12 17:54:42 UTC (rev 208653)
</span><span class="lines">@@ -257,7 +257,7 @@
</span><span class="cx">     virtual bool supportsReadOnly() const;
</span><span class="cx">     virtual void updateInnerTextValue();
</span><span class="cx">     virtual void updatePlaceholderText();
</span><del>-    virtual void attributeChanged();
</del><ins>+    virtual void attributeChanged(const QualifiedName&amp;);
</ins><span class="cx">     virtual void multipleAttributeChanged();
</span><span class="cx">     virtual void disabledAttributeChanged();
</span><span class="cx">     virtual void readonlyAttributeChanged();
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlTextFieldInputTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/TextFieldInputType.cpp (208652 => 208653)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/TextFieldInputType.cpp        2016-11-12 17:43:40 UTC (rev 208652)
+++ trunk/Source/WebCore/html/TextFieldInputType.cpp        2016-11-12 17:54:42 UTC (rev 208653)
</span><span class="lines">@@ -346,11 +346,10 @@
</span><span class="cx">     m_container = nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void TextFieldInputType::attributeChanged()
</del><ins>+void TextFieldInputType::attributeChanged(const QualifiedName&amp; attributeName)
</ins><span class="cx"> {
</span><del>-    // FIXME: Updating the inner text on any attribute update should
-    // be unnecessary. We should figure out what attributes affect.
-    updateInnerTextValue();
</del><ins>+    if (attributeName == valueAttr || attributeName == placeholderAttr)
+        updateInnerTextValue();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void TextFieldInputType::disabledAttributeChanged()
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlTextFieldInputTypeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/TextFieldInputType.h (208652 => 208653)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/TextFieldInputType.h        2016-11-12 17:43:40 UTC (rev 208652)
+++ trunk/Source/WebCore/html/TextFieldInputType.h        2016-11-12 17:54:42 UTC (rev 208653)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx">     virtual bool needsContainer() const;
</span><span class="cx">     void createShadowSubtree() override;
</span><span class="cx">     void destroyShadowSubtree() override;
</span><del>-    void attributeChanged() final;
</del><ins>+    void attributeChanged(const QualifiedName&amp;) final;
</ins><span class="cx">     void disabledAttributeChanged() final;
</span><span class="cx">     void readonlyAttributeChanged() final;
</span><span class="cx">     bool supportsReadOnly() const final;
</span></span></pre>
</div>
</div>

</body>
</html>