<!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>[210755] trunk/Websites/perf.webkit.org</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/210755">210755</a></dd>
<dt>Author</dt> <dd>rniwa@webkit.org</dd>
<dt>Date</dt> <dd>2017-01-13 18:53:57 -0800 (Fri, 13 Jan 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>Instrument calls to render()
https://bugs.webkit.org/show_bug.cgi?id=167037

Reviewed by Sam Weinig.

Wrap every call to render() by newly added ComponentBase.updateRendering() to instrument it.
Also, use arrow functions instead of this.render.bind or regular closures for simplicity.

Currently, we're making 5100 calls to render() while opening the summary page, and that's way too high.

* public/v3/components/analysis-results-viewer.js:
(AnalysisResultsViewer.prototype._expandBetween):
* public/v3/components/bar-graph-group.js:
(BarGraphGroup.prototype.updateGroupRendering): Renamed form render() as BarGraphGroup is not a component.
* public/v3/components/base.js:
(ComponentBase.prototype.updateRendering): Added. Instruments render() call.
* public/v3/components/chart-pane-base.js:
(ChartPaneBase.prototype.fetchAnalysisTasks):
(ChartPaneBase.prototype._mainSelectionDidZoom):
(ChartPaneBase.prototype._updateStatus):
(ChartPaneBase.prototype._requestOpeningCommitViewer):
(ChartPaneBase.prototype._keyup):
(ChartPaneBase.prototype.render):
* public/v3/components/commit-log-viewer.js:
* public/v3/components/customizable-test-group-form.js:
(CustomizableTestGroupForm):
(CustomizableTestGroupForm.prototype._customize):
* public/v3/components/editable-text.js:
(EditableText.prototype._didUpdate):
* public/v3/components/pane-selector.js:
(PaneSelector.prototype._selectedItem):
* public/v3/components/results-table.js:
(ResultsTable.prototype.render):
* public/v3/components/time-series-chart.js:
(TimeSeriesChart._renderEnqueuedCharts):
* public/v3/pages/analysis-category-page.js:
(AnalysisCategoryPage.prototype.open):
(AnalysisCategoryPage.prototype.updateFromSerializedState):
(AnalysisCategoryPage.prototype.filterDidChange):
(AnalysisCategoryPage.prototype.render):
* public/v3/pages/analysis-task-page.js:
(AnalysisTaskChartPane.prototype._updateStatus):
(AnalysisTaskPage.prototype.updateFromSerializedState):
(AnalysisTaskPage.prototype._didFetchTask):
(AnalysisTaskPage.prototype._didFetchRelatedAnalysisTasks):
(AnalysisTaskPage.prototype._didFetchMeasurement):
(AnalysisTaskPage.prototype._didFetchTestGroups):
(AnalysisTaskPage.prototype._showAllTestGroups):
(AnalysisTaskPage.prototype._didFetchAnalysisResults):
(AnalysisTaskPage.prototype.render):
(AnalysisTaskPage.prototype._renderTestGroupList.):
(AnalysisTaskPage.prototype._renderTestGroupList):
(AnalysisTaskPage.prototype._createTestGroupListItem):
(AnalysisTaskPage.prototype._showTestGroup):
(AnalysisTaskPage.prototype._didStartEditingTaskName):
(AnalysisTaskPage.prototype._updateTaskName):
(AnalysisTaskPage.prototype._updateTestGroupName):
(AnalysisTaskPage.prototype._hideCurrentTestGroup):
(AnalysisTaskPage.prototype._updateChangeType):
(AnalysisTaskPage.prototype._associateBug):
(AnalysisTaskPage.prototype._dissociateBug):
(AnalysisTaskPage.prototype._associateCommit):
(AnalysisTaskPage.prototype._dissociateCommit):
(AnalysisTaskPage.prototype._chartSelectionDidChange):
(AnalysisTaskPage.prototype._selectedRowInAnalysisResultsViewer):
* public/v3/pages/build-request-queue-page.js:
(BuildRequestQueuePage.prototype.open.):
(BuildRequestQueuePage.prototype.open):
* public/v3/pages/chart-pane.js:
(ChartPane.prototype.setOpenRepository):
(ChartPane.prototype._trendLineTypeDidChange):
(ChartPane.prototype._updateTrendLine):
* public/v3/pages/charts-page.js:
(ChartsPage.prototype.updateFromSerializedState):
(ChartsPage.prototype._updateDomainsFromSerializedState):
(ChartsPage.prototype.setNumberOfDaysFromToolbar):
(ChartsPage.prototype._didMutatePaneList):
(ChartsPage.prototype.render):
* public/v3/pages/charts-toolbar.js:
(ChartsToolbar.prototype.render):
* public/v3/pages/create-analysis-task-page.js:
(CreateAnalysisTaskPage.prototype.updateFromSerializedState):
* public/v3/pages/dashboard-page.js:
(DashboardPage.prototype.updateFromSerializedState):
(DashboardPage.prototype._fetchedData):
* public/v3/pages/heading.js:
(Heading.prototype.render):
* public/v3/pages/page-with-heading.js:
(PageWithHeading.prototype.render):
* public/v3/pages/page.js:
(Page.prototype.open):
* public/v3/pages/summary-page.js:
(SummaryPage.prototype.open):
(SummaryPage.prototype.this._renderQueue.push):
(SummaryPage):
(SummaryPage.prototype._renderCell):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkWebsitesperfwebkitorgChangeLog">trunk/Websites/perf.webkit.org/ChangeLog</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentsanalysisresultsviewerjs">trunk/Websites/perf.webkit.org/public/v3/components/analysis-results-viewer.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentsbargraphgroupjs">trunk/Websites/perf.webkit.org/public/v3/components/bar-graph-group.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentsbasejs">trunk/Websites/perf.webkit.org/public/v3/components/base.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentschartpanebasejs">trunk/Websites/perf.webkit.org/public/v3/components/chart-pane-base.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentscommitlogviewerjs">trunk/Websites/perf.webkit.org/public/v3/components/commit-log-viewer.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentscustomizabletestgroupformjs">trunk/Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentseditabletextjs">trunk/Websites/perf.webkit.org/public/v3/components/editable-text.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentspaneselectorjs">trunk/Websites/perf.webkit.org/public/v3/components/pane-selector.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentsresultstablejs">trunk/Websites/perf.webkit.org/public/v3/components/results-table.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentstimeserieschartjs">trunk/Websites/perf.webkit.org/public/v3/components/time-series-chart.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3pagesanalysiscategorypagejs">trunk/Websites/perf.webkit.org/public/v3/pages/analysis-category-page.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3pagesanalysistaskpagejs">trunk/Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3pagesbuildrequestqueuepagejs">trunk/Websites/perf.webkit.org/public/v3/pages/build-request-queue-page.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3pageschartpanejs">trunk/Websites/perf.webkit.org/public/v3/pages/chart-pane.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3pageschartspagejs">trunk/Websites/perf.webkit.org/public/v3/pages/charts-page.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3pageschartstoolbarjs">trunk/Websites/perf.webkit.org/public/v3/pages/charts-toolbar.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3pagescreateanalysistaskpagejs">trunk/Websites/perf.webkit.org/public/v3/pages/create-analysis-task-page.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3pagesdashboardpagejs">trunk/Websites/perf.webkit.org/public/v3/pages/dashboard-page.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3pagesheadingjs">trunk/Websites/perf.webkit.org/public/v3/pages/heading.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3pagespagewithheadingjs">trunk/Websites/perf.webkit.org/public/v3/pages/page-with-heading.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3pagespagejs">trunk/Websites/perf.webkit.org/public/v3/pages/page.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3pagessummarypagejs">trunk/Websites/perf.webkit.org/public/v3/pages/summary-page.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkWebsitesperfwebkitorgChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/ChangeLog (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/ChangeLog        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/ChangeLog        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -1,3 +1,102 @@
</span><ins>+2017-01-13  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
+
+        Instrument calls to render()
+        https://bugs.webkit.org/show_bug.cgi?id=167037
+
+        Reviewed by Sam Weinig.
+
+        Wrap every call to render() by newly added ComponentBase.updateRendering() to instrument it.
+        Also, use arrow functions instead of this.render.bind or regular closures for simplicity.
+
+        Currently, we're making 5100 calls to render() while opening the summary page, and that's way too high.
+
+        * public/v3/components/analysis-results-viewer.js:
+        (AnalysisResultsViewer.prototype._expandBetween):
+        * public/v3/components/bar-graph-group.js:
+        (BarGraphGroup.prototype.updateGroupRendering): Renamed form render() as BarGraphGroup is not a component.
+        * public/v3/components/base.js:
+        (ComponentBase.prototype.updateRendering): Added. Instruments render() call.
+        * public/v3/components/chart-pane-base.js:
+        (ChartPaneBase.prototype.fetchAnalysisTasks):
+        (ChartPaneBase.prototype._mainSelectionDidZoom):
+        (ChartPaneBase.prototype._updateStatus):
+        (ChartPaneBase.prototype._requestOpeningCommitViewer):
+        (ChartPaneBase.prototype._keyup):
+        (ChartPaneBase.prototype.render):
+        * public/v3/components/commit-log-viewer.js:
+        * public/v3/components/customizable-test-group-form.js:
+        (CustomizableTestGroupForm):
+        (CustomizableTestGroupForm.prototype._customize):
+        * public/v3/components/editable-text.js:
+        (EditableText.prototype._didUpdate):
+        * public/v3/components/pane-selector.js:
+        (PaneSelector.prototype._selectedItem):
+        * public/v3/components/results-table.js:
+        (ResultsTable.prototype.render):
+        * public/v3/components/time-series-chart.js:
+        (TimeSeriesChart._renderEnqueuedCharts):
+        * public/v3/pages/analysis-category-page.js:
+        (AnalysisCategoryPage.prototype.open):
+        (AnalysisCategoryPage.prototype.updateFromSerializedState):
+        (AnalysisCategoryPage.prototype.filterDidChange):
+        (AnalysisCategoryPage.prototype.render):
+        * public/v3/pages/analysis-task-page.js:
+        (AnalysisTaskChartPane.prototype._updateStatus):
+        (AnalysisTaskPage.prototype.updateFromSerializedState):
+        (AnalysisTaskPage.prototype._didFetchTask):
+        (AnalysisTaskPage.prototype._didFetchRelatedAnalysisTasks):
+        (AnalysisTaskPage.prototype._didFetchMeasurement):
+        (AnalysisTaskPage.prototype._didFetchTestGroups):
+        (AnalysisTaskPage.prototype._showAllTestGroups):
+        (AnalysisTaskPage.prototype._didFetchAnalysisResults):
+        (AnalysisTaskPage.prototype.render):
+        (AnalysisTaskPage.prototype._renderTestGroupList.):
+        (AnalysisTaskPage.prototype._renderTestGroupList):
+        (AnalysisTaskPage.prototype._createTestGroupListItem):
+        (AnalysisTaskPage.prototype._showTestGroup):
+        (AnalysisTaskPage.prototype._didStartEditingTaskName):
+        (AnalysisTaskPage.prototype._updateTaskName):
+        (AnalysisTaskPage.prototype._updateTestGroupName):
+        (AnalysisTaskPage.prototype._hideCurrentTestGroup):
+        (AnalysisTaskPage.prototype._updateChangeType):
+        (AnalysisTaskPage.prototype._associateBug):
+        (AnalysisTaskPage.prototype._dissociateBug):
+        (AnalysisTaskPage.prototype._associateCommit):
+        (AnalysisTaskPage.prototype._dissociateCommit):
+        (AnalysisTaskPage.prototype._chartSelectionDidChange):
+        (AnalysisTaskPage.prototype._selectedRowInAnalysisResultsViewer):
+        * public/v3/pages/build-request-queue-page.js:
+        (BuildRequestQueuePage.prototype.open.):
+        (BuildRequestQueuePage.prototype.open):
+        * public/v3/pages/chart-pane.js:
+        (ChartPane.prototype.setOpenRepository):
+        (ChartPane.prototype._trendLineTypeDidChange):
+        (ChartPane.prototype._updateTrendLine):
+        * public/v3/pages/charts-page.js:
+        (ChartsPage.prototype.updateFromSerializedState):
+        (ChartsPage.prototype._updateDomainsFromSerializedState):
+        (ChartsPage.prototype.setNumberOfDaysFromToolbar):
+        (ChartsPage.prototype._didMutatePaneList):
+        (ChartsPage.prototype.render):
+        * public/v3/pages/charts-toolbar.js:
+        (ChartsToolbar.prototype.render):
+        * public/v3/pages/create-analysis-task-page.js:
+        (CreateAnalysisTaskPage.prototype.updateFromSerializedState):
+        * public/v3/pages/dashboard-page.js:
+        (DashboardPage.prototype.updateFromSerializedState):
+        (DashboardPage.prototype._fetchedData):
+        * public/v3/pages/heading.js:
+        (Heading.prototype.render):
+        * public/v3/pages/page-with-heading.js:
+        (PageWithHeading.prototype.render):
+        * public/v3/pages/page.js:
+        (Page.prototype.open):
+        * public/v3/pages/summary-page.js:
+        (SummaryPage.prototype.open):
+        (SummaryPage.prototype.this._renderQueue.push):
+        (SummaryPage):
+        (SummaryPage.prototype._renderCell):
+
</ins><span class="cx"> 2017-01-12  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Outliers are not hidden in v3 UI
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentsanalysisresultsviewerjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/analysis-results-viewer.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/analysis-results-viewer.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/components/analysis-results-viewer.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -260,7 +260,7 @@
</span><span class="cx">         for (var i = indexBeforeStart + 1; i &lt; indexAfterEnd; i += increment)
</span><span class="cx">             this._expandedPoints.add(series.findPointByIndex(i));
</span><span class="cx">         this._shouldRenderTable = true;
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static htmlTemplate()
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentsbargraphgroupjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/bar-graph-group.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/bar-graph-group.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/components/bar-graph-group.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -13,9 +13,9 @@
</span><span class="cx">         return newBar;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    render()
</del><ins>+    updateGroupRendering()
</ins><span class="cx">     {
</span><del>-        Instrumentation.startMeasuringTime('BarGraphGroup', 'render');
</del><ins>+        Instrumentation.startMeasuringTime('BarGraphGroup', 'updateGroupRendering');
</ins><span class="cx"> 
</span><span class="cx">         var min = Infinity;
</span><span class="cx">         var max = -Infinity;
</span><span class="lines">@@ -35,10 +35,10 @@
</span><span class="cx">             var start = min - (range - diff) / 2;
</span><span class="cx"> 
</span><span class="cx">             entry.bar.update((value - start) / range, formattedValue);
</span><del>-            entry.bar.render();
</del><ins>+            entry.bar.updateRendering();
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        Instrumentation.endMeasuringTime('BarGraphGroup', 'render');
</del><ins>+        Instrumentation.endMeasuringTime('BarGraphGroup', 'updateGroupRendering');
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentsbasejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/base.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/base.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/components/base.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -12,6 +12,13 @@
</span><span class="cx">     content() { return this._shadow; }
</span><span class="cx">     render() { }
</span><span class="cx"> 
</span><ins>+    updateRendering()
+    {
+        Instrumentation.startMeasuringTime('ComponentBase', 'updateRendering');
+        this.render();
+        Instrumentation.endMeasuringTime('ComponentBase', 'updateRendering');
+    }
+
</ins><span class="cx">     renderReplace(element, content) { ComponentBase.renderReplace(element, content); }
</span><span class="cx"> 
</span><span class="cx">     static renderReplace(element, content)
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentschartpanebasejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/chart-pane-base.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/chart-pane-base.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/components/chart-pane-base.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -96,7 +96,7 @@
</span><span class="cx">         AnalysisTask.fetchByPlatformAndMetric(this._platformId, this._metricId, noCache).then(function (tasks) {
</span><span class="cx">             self._tasksForAnnotations = tasks;
</span><span class="cx">             self._renderedAnnotations = false;
</span><del>-            self.render();
</del><ins>+            self.updateRendering();
</ins><span class="cx">         });
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -132,7 +132,7 @@
</span><span class="cx">     {
</span><span class="cx">         this._overviewChart.setSelection(selection, this);
</span><span class="cx">         this._mainChart.setSelection(null);
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _indicatorDidChange(indicatorID, isLocked)
</span><span class="lines">@@ -148,8 +148,9 @@
</span><span class="cx">     _updateStatus()
</span><span class="cx">     {
</span><span class="cx">         var range = this._mainChartStatus.updateRevisionList();
</span><del>-        this._commitLogViewer.view(range.repository, range.from, range.to).then(this.render.bind(this));
-        this.render();
</del><ins>+        const updateRendering = () =&gt; { this.updateRendering(); };
+        this._commitLogViewer.view(range.repository, range.from, range.to).then(updateRendering);
+        updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _openAnalysisTask(annotation)
</span><span class="lines">@@ -164,8 +165,9 @@
</span><span class="cx">     _requestOpeningCommitViewer(repository, from, to)
</span><span class="cx">     {
</span><span class="cx">         this._mainChartStatus.setCurrentRepository(repository);
</span><del>-        this._commitLogViewer.view(repository, from, to).then(this.render.bind(this));
-        this.render();
</del><ins>+        const updateRendering = () =&gt; { this.updateRendering(); };
+        this._commitLogViewer.view(repository, from, to).then(updateRendering);
+        updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _keyup(event)
</span><span class="lines">@@ -189,7 +191,7 @@
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx"> 
</span><span class="cx">         event.preventDefault();
</span><span class="cx">         event.stopPropagation();
</span><span class="lines">@@ -215,12 +217,12 @@
</span><span class="cx">         this._renderAnnotations();
</span><span class="cx"> 
</span><span class="cx">         if (this._mainChartStatus)
</span><del>-            this._mainChartStatus.render();
</del><ins>+            this._mainChartStatus.updateRendering();
</ins><span class="cx"> 
</span><span class="cx">         var body = this.content().querySelector('.chart-pane-body');
</span><span class="cx">         if (this._commitLogViewer &amp;&amp; this._commitLogViewer.currentRepository()) {
</span><span class="cx">             body.classList.add('has-second-sidebar');
</span><del>-            this._commitLogViewer.render();
</del><ins>+            this._commitLogViewer.updateRendering();
</ins><span class="cx">         } else
</span><span class="cx">             body.classList.remove('has-second-sidebar');
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentscommitlogviewerjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/commit-log-viewer.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/commit-log-viewer.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/components/commit-log-viewer.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> 
</span><span class="cx">         if (!to) {
</span><span class="cx">             this._fetchingPromise = null;
</span><del>-            this.render();
</del><ins>+            this.updateRendering();
</ins><span class="cx">             return Promise.resolve(null);
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx"> 
</span><span class="cx">         var self = this;
</span><span class="cx">         var spinnerTimer = setTimeout(function () {
</span><del>-            self.render();
</del><ins>+            self.updateRendering();
</ins><span class="cx">         }, 300);
</span><span class="cx"> 
</span><span class="cx">         this._fetchingPromise.then(function (commits) {
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentscustomizabletestgroupformjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -8,7 +8,7 @@
</span><span class="cx">         this._renderedRepositorylist = null;
</span><span class="cx">         this._customized = false;
</span><span class="cx">         this._nameControl = this.content().querySelector('.name');
</span><del>-        this._nameControl.oninput = this.render.bind(this);
</del><ins>+        this._nameControl.oninput = () =&gt; { this.updateRendering(); }
</ins><span class="cx">         this.content().querySelector('a').onclick = this._customize.bind(this);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -28,7 +28,7 @@
</span><span class="cx">     {
</span><span class="cx">         event.preventDefault();
</span><span class="cx">         this._customized = true;
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _computeRootSetMap()
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentseditabletextjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/editable-text.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/editable-text.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/components/editable-text.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -73,7 +73,7 @@
</span><span class="cx">     {
</span><span class="cx">         this._inEditingMode = false;
</span><span class="cx">         this._updatingPromise = null;
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static htmlTemplate()
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentspaneselectorjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/pane-selector.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/pane-selector.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/components/pane-selector.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -167,7 +167,7 @@
</span><span class="cx">             if (data instanceof Metric &amp;&amp; data.test().onlyContainsSingleMetric())
</span><span class="cx">                 this._currentPath.splice(this._currentPath.length - 2, 1);
</span><span class="cx">         }
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     setCallback(callback)
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentsresultstablejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/results-table.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/results-table.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/components/results-table.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx">         this.renderReplace(this.content().querySelector('.results-table-extra-repositories'),
</span><span class="cx">             extraRepositories.map(function (commit) { return element('li', commit.title()); }));
</span><span class="cx"> 
</span><del>-        barGraphGroup.render();
</del><ins>+        barGraphGroup.updateGroupRendering();
</ins><span class="cx"> 
</span><span class="cx">         Instrumentation.endMeasuringTime('ResultsTable', 'render');
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentstimeserieschartjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/time-series-chart.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/time-series-chart.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/components/time-series-chart.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx">     static _renderEnqueuedCharts()
</span><span class="cx">     {
</span><span class="cx">         for (var chart of TimeSeriesChart._chartQueue)
</span><del>-            chart.render();
</del><ins>+            chart.updateRendering();
</ins><span class="cx">         TimeSeriesChart._chartQueue = null;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3pagesanalysiscategorypagejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/pages/analysis-category-page.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/pages/analysis-category-page.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/pages/analysis-category-page.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -23,10 +23,10 @@
</span><span class="cx">         var self = this;
</span><span class="cx">         AnalysisTask.fetchAll().then(function () {
</span><span class="cx">             self._fetched = true;
</span><del>-            self.render();
</del><ins>+            self.updateRendering();
</ins><span class="cx">         }, function (error) {
</span><span class="cx">             self._errorMessage = 'Failed to fetch the list of analysis tasks: ' + error;
</span><del>-            self.render();
</del><ins>+            self.updateRendering();
</ins><span class="cx">         });
</span><span class="cx">         super.open(state);
</span><span class="cx">     }
</span><span class="lines">@@ -59,12 +59,12 @@
</span><span class="cx">             this._categoryToolbar.setFilter(state.filter);
</span><span class="cx"> 
</span><span class="cx">         if (!isOpen)
</span><del>-            this.render();
</del><ins>+            this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     filterDidChange(shouldUpdateState)
</span><span class="cx">     {
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">         if (shouldUpdateState)
</span><span class="cx">             this.scheduleUrlStateUpdate();
</span><span class="cx">     }
</span><span class="lines">@@ -74,7 +74,7 @@
</span><span class="cx">         Instrumentation.startMeasuringTime('AnalysisCategoryPage', 'render');
</span><span class="cx"> 
</span><span class="cx">         super.render();
</span><del>-        this._categoryToolbar.render();
</del><ins>+        this._categoryToolbar.updateRendering();
</ins><span class="cx"> 
</span><span class="cx">         if (this._errorMessage) {
</span><span class="cx">             console.assert(!this._fetched);
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3pagesanalysistaskpagejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -19,7 +19,7 @@
</span><span class="cx">     _updateStatus()
</span><span class="cx">     {
</span><span class="cx">         super._updateStatus();
</span><del>-        this._page.render();
</del><ins>+        this._page.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     selectedPoints()
</span><span class="lines">@@ -101,7 +101,7 @@
</span><span class="cx">             var taskId = parseInt(state.remainingRoute);
</span><span class="cx">             AnalysisTask.fetchById(taskId).then(this._didFetchTask.bind(this), function (error) {
</span><span class="cx">                 self._errorMessage = `Failed to fetch the analysis task ${state.remainingRoute}: ${error}`;
</span><del>-                self.render();
</del><ins>+                self.updateRendering();
</ins><span class="cx">             });
</span><span class="cx">             this._fetchRelatedInfoForTaskId(taskId);
</span><span class="cx">         } else if (state.buildRequest) {
</span><span class="lines">@@ -110,7 +110,7 @@
</span><span class="cx">                 self._fetchRelatedInfoForTaskId(task.id());
</span><span class="cx">             }, function (error) {
</span><span class="cx">                 self._errorMessage = `Failed to fetch the analysis task for the build request ${buildRequestId}: ${error}`;
</span><del>-                self.render();
</del><ins>+                self.updateRendering();
</ins><span class="cx">             });
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -146,7 +146,7 @@
</span><span class="cx">         this._chartPane.setOverviewDomain(domain[0], domain[1]);
</span><span class="cx">         this._chartPane.setMainDomain(domain[0], domain[1]);
</span><span class="cx"> 
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx"> 
</span><span class="cx">         return task;
</span><span class="cx">     }
</span><span class="lines">@@ -154,7 +154,7 @@
</span><span class="cx">     _didFetchRelatedAnalysisTasks(relatedTasks)
</span><span class="cx">     {
</span><span class="cx">         this._relatedTasks = relatedTasks;
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _didFetchMeasurement()
</span><span class="lines">@@ -171,7 +171,7 @@
</span><span class="cx"> 
</span><span class="cx">         this._startPoint = startPoint;
</span><span class="cx">         this._endPoint = endPoint;
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _didFetchTestGroups(testGroups)
</span><span class="lines">@@ -179,7 +179,7 @@
</span><span class="cx">         this._testGroups = testGroups.sort(function (a, b) { return +a.createdAt() - b.createdAt(); });
</span><span class="cx">         this._didUpdateTestGroupHiddenState();
</span><span class="cx">         this._assignTestResultsIfPossible();
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _showAllTestGroups()
</span><span class="lines">@@ -186,7 +186,7 @@
</span><span class="cx">     {
</span><span class="cx">         this._showHiddenTestGroups = true;
</span><span class="cx">         this._didUpdateTestGroupHiddenState();
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _didUpdateTestGroupHiddenState()
</span><span class="lines">@@ -206,7 +206,7 @@
</span><span class="cx">     {
</span><span class="cx">         this._analysisResults = results;
</span><span class="cx">         if (this._assignTestResultsIfPossible())
</span><del>-            this.render();
</del><ins>+            this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _assignTestResultsIfPossible()
</span><span class="lines">@@ -233,7 +233,7 @@
</span><span class="cx"> 
</span><span class="cx">         this.content().querySelector('.error-message').textContent = this._errorMessage || '';
</span><span class="cx"> 
</span><del>-        this._chartPane.render();
</del><ins>+        this._chartPane.updateRendering();
</ins><span class="cx"> 
</span><span class="cx">         var element = ComponentBase.createElement;
</span><span class="cx">         var link = ComponentBase.createLink;
</span><span class="lines">@@ -264,18 +264,18 @@
</span><span class="cx">         } else
</span><span class="cx">             repositoryList = Repository.sortByNamePreferringOnesWithURL(Repository.all());
</span><span class="cx"> 
</span><del>-        this._bugList.render();
</del><ins>+        this._bugList.updateRendering();
</ins><span class="cx"> 
</span><span class="cx">         this._causeList.setKindList(repositoryList);
</span><del>-        this._causeList.render();
</del><ins>+        this._causeList.updateRendering();
</ins><span class="cx"> 
</span><span class="cx">         this._fixList.setKindList(repositoryList);
</span><del>-        this._fixList.render();
</del><ins>+        this._fixList.updateRendering();
</ins><span class="cx"> 
</span><span class="cx">         this.content().querySelector('.analysis-task-status').style.display = this._task ? null : 'none';
</span><span class="cx">         this.content().querySelector('.overview-chart').style.display = this._task ? null : 'none';
</span><span class="cx">         this.content().querySelector('.test-group-view').style.display = this._task &amp;&amp; this._testGroups &amp;&amp; this._testGroups.length ? null : 'none';
</span><del>-        this._taskNameLabel.render();
</del><ins>+        this._taskNameLabel.updateRendering();
</ins><span class="cx"> 
</span><span class="cx">         if (this._relatedTasks &amp;&amp; this._task) {
</span><span class="cx">             var router = this.router();
</span><span class="lines">@@ -296,7 +296,7 @@
</span><span class="cx">         var a = selectedRange['A'];
</span><span class="cx">         var b = selectedRange['B'];
</span><span class="cx">         this._newTestGroupFormForViewer.setRootSetMap(a &amp;&amp; b ? {'A': a.rootSet(), 'B': b.rootSet()} : null);
</span><del>-        this._newTestGroupFormForViewer.render();
</del><ins>+        this._newTestGroupFormForViewer.updateRendering();
</ins><span class="cx">         this._newTestGroupFormForViewer.element().style.display = this._triggerable ? null : 'none';
</span><span class="cx"> 
</span><span class="cx">         this._renderTestGroupList();
</span><span class="lines">@@ -308,13 +308,13 @@
</span><span class="cx">         var points = this._chartPane.selectedPoints();
</span><span class="cx">         this._newTestGroupFormForChart.setRootSetMap(points &amp;&amp; points.length &gt;= 2 ?
</span><span class="cx">                 {'A': points[0].rootSet(), 'B': points[points.length - 1].rootSet()} : null);
</span><del>-        this._newTestGroupFormForChart.render();
</del><ins>+        this._newTestGroupFormForChart.updateRendering();
</ins><span class="cx">         this._newTestGroupFormForChart.element().style.display = this._triggerable ? null : 'none';
</span><span class="cx"> 
</span><span class="cx">         this._analysisResultsViewer.setCurrentTestGroup(this._currentTestGroup);
</span><del>-        this._analysisResultsViewer.render();
</del><ins>+        this._analysisResultsViewer.updateRendering();
</ins><span class="cx"> 
</span><del>-        this._testGroupResultsTable.render();
</del><ins>+        this._testGroupResultsTable.updateRendering();
</ins><span class="cx"> 
</span><span class="cx">         Instrumentation.endMeasuringTime('AnalysisTaskPage', 'render');
</span><span class="cx">     }
</span><span class="lines">@@ -356,7 +356,7 @@
</span><span class="cx">             for (var testGroup of this._filteredTestGroups) {
</span><span class="cx">                 var label = this._testGroupLabelMap.get(testGroup);
</span><span class="cx">                 label.setText(testGroup.label());
</span><del>-                label.render();
</del><ins>+                label.updateRendering();
</ins><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -364,7 +364,7 @@
</span><span class="cx">     _createTestGroupListItem(group)
</span><span class="cx">     {
</span><span class="cx">         var text = new EditableText(group.label());
</span><del>-        text.setStartedEditingCallback(function () { return text.render(); });
</del><ins>+        text.setStartedEditingCallback(() =&gt; { return text.updateRendering(); });
</ins><span class="cx">         text.setUpdateCallback(this._updateTestGroupName.bind(this, group));
</span><span class="cx"> 
</span><span class="cx">         this._testGroupLabelMap.set(group, text);
</span><span class="lines">@@ -408,7 +408,7 @@
</span><span class="cx"> 
</span><span class="cx">             this._renderedCurrentTestGroup = this._currentTestGroup;
</span><span class="cx">         }
</span><del>-        this._retryForm.render();
</del><ins>+        this._retryForm.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _showTestGroup(testGroup)
</span><span class="lines">@@ -415,24 +415,23 @@
</span><span class="cx">     {
</span><span class="cx">         this._currentTestGroup = testGroup;        
</span><span class="cx">         this._testGroupResultsTable.setTestGroup(this._currentTestGroup);
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _didStartEditingTaskName()
</span><span class="cx">     {
</span><del>-        this._taskNameLabel.render();
</del><ins>+        this._taskNameLabel.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _updateTaskName()
</span><span class="cx">     {
</span><span class="cx">         console.assert(this._task);
</span><del>-        this._taskNameLabel.render();
</del><ins>+        this._taskNameLabel.updateRendering();
</ins><span class="cx"> 
</span><del>-        var self = this;
-        return self._task.updateName(self._taskNameLabel.editedText()).then(function () {
-            self.render();
-        }, function (error) {
-            self.render();
</del><ins>+        return this._task.updateName(this._taskNameLabel.editedText()).then(() =&gt; {
+            this.updateRendering();
+        }, (error) =&gt; {
+            this.updateRendering();
</ins><span class="cx">             alert('Failed to update the name: ' + error);
</span><span class="cx">         });
</span><span class="cx">     }
</span><span class="lines">@@ -440,13 +439,12 @@
</span><span class="cx">     _updateTestGroupName(testGroup)
</span><span class="cx">     {
</span><span class="cx">         var label = this._testGroupLabelMap.get(testGroup);
</span><del>-        label.render();
</del><ins>+        label.updateRendering();
</ins><span class="cx"> 
</span><del>-        var self = this;
-        return testGroup.updateName(label.editedText()).then(function () {
-            self.render();
-        }, function (error) {
-            self.render();
</del><ins>+        return testGroup.updateName(label.editedText()).then(() =&gt; {
+            this.updateRendering();
+        }, (error) =&gt; {
+            this.updateRendering();
</ins><span class="cx">             alert('Failed to hide the test name: ' + error);
</span><span class="cx">         });
</span><span class="cx">     }
</span><span class="lines">@@ -453,14 +451,13 @@
</span><span class="cx"> 
</span><span class="cx">     _hideCurrentTestGroup()
</span><span class="cx">     {
</span><del>-        var self = this;
</del><span class="cx">         console.assert(this._currentTestGroup);
</span><del>-        return this._currentTestGroup.updateHiddenFlag(!this._currentTestGroup.isHidden()).then(function () {
-            self._didUpdateTestGroupHiddenState();
-            self.render();
</del><ins>+        return this._currentTestGroup.updateHiddenFlag(!this._currentTestGroup.isHidden()).then(() =&gt; {
+            this._didUpdateTestGroupHiddenState();
+            this.updateRendering();
</ins><span class="cx">         }, function (error) {
</span><del>-            self._mayHaveMutatedTestGroupHiddenState();
-            self.render();
</del><ins>+            this._mayHaveMutatedTestGroupHiddenState();
+            this.updateRendering();
</ins><span class="cx">             alert('Failed to update the group: ' + error);
</span><span class="cx">         });
</span><span class="cx">     }
</span><span class="lines">@@ -474,9 +471,9 @@
</span><span class="cx">         if (newChangeType == 'unconfirmed')
</span><span class="cx">             newChangeType = null;
</span><span class="cx"> 
</span><del>-        var render = this.render.bind(this);
-        return this._task.updateChangeType(newChangeType).then(render, function (error) {
-            render();
</del><ins>+        const updateRendering = () =&gt; { this.updateRendering(); };
+        return this._task.updateChangeType(newChangeType).then(updateRendering, (error) =&gt; {
+            updateRendering();
</ins><span class="cx">             alert('Failed to update the status: ' + error);
</span><span class="cx">         });
</span><span class="cx">     }
</span><span class="lines">@@ -486,9 +483,9 @@
</span><span class="cx">         console.assert(tracker instanceof BugTracker);
</span><span class="cx">         bugNumber = parseInt(bugNumber);
</span><span class="cx"> 
</span><del>-        var render = this.render.bind(this);
-        return this._task.associateBug(tracker, bugNumber).then(render, function (error) {
-            render();
</del><ins>+        const updateRendering = () =&gt; { this.updateRendering(); };
+        return this._task.associateBug(tracker, bugNumber).then(updateRendering, (error) =&gt; {
+            updateRendering();
</ins><span class="cx">             alert('Failed to associate the bug: ' + error);
</span><span class="cx">         });
</span><span class="cx">     }
</span><span class="lines">@@ -495,9 +492,9 @@
</span><span class="cx"> 
</span><span class="cx">     _dissociateBug(bug)
</span><span class="cx">     {
</span><del>-        var render = this.render.bind(this);
-        return this._task.dissociateBug(bug).then(render, function (error) {
-            render();
</del><ins>+        const updateRendering = () =&gt; { this.updateRendering(); };
+        return this._task.dissociateBug(bug).then(updateRendering, (error) =&gt; {
+            updateRendering();
</ins><span class="cx">             alert('Failed to dissociate the bug: ' + error);
</span><span class="cx">         });
</span><span class="cx">     }
</span><span class="lines">@@ -504,9 +501,9 @@
</span><span class="cx"> 
</span><span class="cx">     _associateCommit(kind, repository, revision)
</span><span class="cx">     {
</span><del>-        var render = this.render.bind(this);
-        return this._task.associateCommit(kind, repository, revision).then(render, function (error) {
-            render();
</del><ins>+        const updateRendering = () =&gt; { this.updateRendering(); };
+        return this._task.associateCommit(kind, repository, revision).then(updateRendering, (error) =&gt; {
+            updateRendering();
</ins><span class="cx">             if (error == 'AmbiguousRevision')
</span><span class="cx">                 alert('There are multiple revisions that match the specified string: ' + revision);
</span><span class="cx">             else if (error == 'CommitNotFound')
</span><span class="lines">@@ -518,9 +515,9 @@
</span><span class="cx"> 
</span><span class="cx">     _dissociateCommit(commit)
</span><span class="cx">     {
</span><del>-        var render = this.render.bind(this);
-        return this._task.dissociateCommit(commit).then(render, function (error) {
-            render();
</del><ins>+        const updateRendering = () =&gt; { this.updateRendering(); };
+        return this._task.dissociateCommit(commit).then(updateRendering, (error) =&gt; {
+            updateRendering();
</ins><span class="cx">             alert('Failed to dissociate the commit: ' + error);
</span><span class="cx">         });
</span><span class="cx">     }
</span><span class="lines">@@ -542,7 +539,7 @@
</span><span class="cx">     _chartSelectionDidChange()
</span><span class="cx">     {
</span><span class="cx">         this._selectionWasModifiedByUser = true;
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _createNewTestGroupFromChart(name, repetitionCount, rootSetMap)
</span><span class="lines">@@ -552,7 +549,7 @@
</span><span class="cx"> 
</span><span class="cx">     _selectedRowInAnalysisResultsViewer()
</span><span class="cx">     {
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _createNewTestGroupFromViewer(name, repetitionCount, rootSetMap)
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3pagesbuildrequestqueuepagejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/pages/build-request-queue-page.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/pages/build-request-queue-page.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/pages/build-request-queue-page.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -18,16 +18,16 @@
</span><span class="cx"> 
</span><span class="cx">                 BuildRequest.fetchForTriggerable(entry.name).then(function (requests) {
</span><span class="cx">                     triggerable.buildRequests = requests;
</span><del>-                    self.render();
</del><ins>+                    self.updateRendering();
</ins><span class="cx">                 });
</span><span class="cx"> 
</span><span class="cx">                 return triggerable;
</span><span class="cx">             });
</span><del>-            self.render();
</del><ins>+            self.updateRendering();
</ins><span class="cx">         });
</span><span class="cx"> 
</span><span class="cx">         AnalysisTask.fetchAll().then(function () {
</span><del>-            self.render();
</del><ins>+            self.updateRendering();
</ins><span class="cx">         });
</span><span class="cx"> 
</span><span class="cx">         super.open(state);
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3pageschartpanejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/pages/chart-pane.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/pages/chart-pane.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/pages/chart-pane.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -186,8 +186,8 @@
</span><span class="cx">     {
</span><span class="cx">         if (repository != this._commitLogViewer.currentRepository()) {
</span><span class="cx">             var range = this._mainChartStatus.setCurrentRepository(repository);
</span><del>-            this._commitLogViewer.view(repository, range.from, range.to).then(this.render.bind(this));
-            this.render();
</del><ins>+            this._commitLogViewer.view(repository, range.from, range.to).then(() =&gt; { this.updateRendering(); });
+            this.updateRendering();
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -448,7 +448,7 @@
</span><span class="cx"> 
</span><span class="cx">         this._updateTrendLine();
</span><span class="cx">         this._chartsPage.graphOptionsDidChange();
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _defaultParametersForTrendLine(type)
</span><span class="lines">@@ -493,7 +493,7 @@
</span><span class="cx"> 
</span><span class="cx">         if (!currentTrendLineType.execute) {
</span><span class="cx">             this._mainChart.clearTrendLines();
</span><del>-            this.render();
</del><ins>+            this.updateRendering();
</ins><span class="cx">         } else {
</span><span class="cx">             // Wait for all trendlines to be ready. Otherwise we might see FOC when the domain is expanded.
</span><span class="cx">             Promise.all(sourceList.map(function (source, sourceIndex) {
</span><span class="lines">@@ -502,7 +502,7 @@
</span><span class="cx">                         self._mainChart.setTrendLine(sourceIndex, trendlineSeries);
</span><span class="cx">                 });
</span><span class="cx">             })).then(function () {
</span><del>-                self.render();
</del><ins>+                self.updateRendering();
</ins><span class="cx">             });
</span><span class="cx">         }
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3pageschartspagejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/pages/charts-page.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/pages/charts-page.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/pages/charts-page.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -79,7 +79,7 @@
</span><span class="cx">         if (newPaneList) {
</span><span class="cx">             this._paneList = newPaneList;
</span><span class="cx">             this._paneListChanged = true;
</span><del>-            this.render();
</del><ins>+            this.updateRendering();
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         this._updateDomainsFromSerializedState(state);
</span><span class="lines">@@ -109,7 +109,7 @@
</span><span class="cx">             since = zoom[0] - (zoom[1] - zoom[0]) / 2;
</span><span class="cx"> 
</span><span class="cx">         this.toolbar().setStartTime(since);
</span><del>-        this.toolbar().render();
</del><ins>+        this.toolbar().updateRendering();
</ins><span class="cx"> 
</span><span class="cx">         this._mainDomain = zoom || null;
</span><span class="cx"> 
</span><span class="lines">@@ -151,7 +151,7 @@
</span><span class="cx">     setNumberOfDaysFromToolbar(numberOfDays, shouldUpdateState)
</span><span class="cx">     {
</span><span class="cx">         this.toolbar().setNumberOfDays(numberOfDays, true);
</span><del>-        this.toolbar().render();
</del><ins>+        this.toolbar().updateRendering();
</ins><span class="cx">         this._updateOverviewDomain();
</span><span class="cx">         this._updateMainDomain();
</span><span class="cx">         if (shouldUpdateState)
</span><span class="lines">@@ -298,7 +298,7 @@
</span><span class="cx">             this._updateOverviewDomain();
</span><span class="cx">             this._updateMainDomain();
</span><span class="cx">         }
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">         this.scheduleUrlStateUpdate();
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -310,7 +310,7 @@
</span><span class="cx">             this.renderReplace(this.content().querySelector('.pane-list'), this._paneList);
</span><span class="cx"> 
</span><span class="cx">         for (var pane of this._paneList)
</span><del>-            pane.render();
</del><ins>+            pane.updateRendering();
</ins><span class="cx"> 
</span><span class="cx">         this._paneListChanged = false;
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3pageschartstoolbarjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/pages/charts-toolbar.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/pages/charts-toolbar.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/pages/charts-toolbar.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -34,7 +34,7 @@
</span><span class="cx">     render()
</span><span class="cx">     {
</span><span class="cx">         super.render();
</span><del>-        this._paneSelector.render();
</del><ins>+        this._paneSelector.updateRendering();
</ins><span class="cx">         this._labelSpan.textContent = this._numberOfDays;
</span><span class="cx">         this._setInputElementValue(this._numberOfDays);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3pagescreateanalysistaskpagejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/pages/create-analysis-task-page.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/pages/create-analysis-task-page.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/pages/create-analysis-task-page.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -16,7 +16,7 @@
</span><span class="cx"> 
</span><span class="cx">         this._errorMessage = state.error;
</span><span class="cx">         if (!isOpen)
</span><del>-            this.render();
</del><ins>+            this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     render()
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3pagesdashboardpagejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/pages/dashboard-page.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/pages/dashboard-page.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/pages/dashboard-page.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -35,7 +35,7 @@
</span><span class="cx"> 
</span><span class="cx">         this._needsTableConstruction = true;
</span><span class="cx">         if (!isOpen)
</span><del>-            this.render();
</del><ins>+            this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     open(state)
</span><span class="lines">@@ -114,7 +114,7 @@
</span><span class="cx"> 
</span><span class="cx">         if (this._needsStatusUpdate) {
</span><span class="cx">             for (var statusView of this._statusViews)
</span><del>-                statusView.render();
</del><ins>+                statusView.updateRendering();
</ins><span class="cx">             this._needsStatusUpdate = false;
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -155,7 +155,7 @@
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         this._needsStatusUpdate = true;
</span><del>-        setTimeout(this.render.bind(this), 10);
</del><ins>+        setTimeout(() =&gt; { this.updateRendering(); }, 10);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static htmlTemplate()
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3pagesheadingjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/pages/heading.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/pages/heading.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/pages/heading.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (this._toolbar)
</span><del>-            this._toolbar.render();
</del><ins>+            this._toolbar.updateRendering();
</ins><span class="cx"> 
</span><span class="cx">         var currentPage = this._router.currentPage();
</span><span class="cx">         if (this._renderedCurrentPage == currentPage)
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3pagespagewithheadingjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/pages/page-with-heading.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/pages/page-with-heading.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/pages/page-with-heading.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx">             document.body.insertBefore(this.heading().element(), document.body.firstChild);
</span><span class="cx"> 
</span><span class="cx">         super.render();
</span><del>-        this.heading().render();
</del><ins>+        this.heading().updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static htmlTemplate()
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3pagespagejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/pages/page.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/pages/page.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/pages/page.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -19,7 +19,7 @@
</span><span class="cx">         if (this._router)
</span><span class="cx">             this._router.pageDidOpen(this);
</span><span class="cx">         this.updateFromSerializedState(state, true);
</span><del>-        this.render();
</del><ins>+        this.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     render()
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3pagessummarypagejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/pages/summary-page.js (210754 => 210755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/pages/summary-page.js        2017-01-14 01:32:50 UTC (rev 210754)
+++ trunk/Websites/perf.webkit.org/public/v3/pages/summary-page.js        2017-01-14 02:53:57 UTC (rev 210755)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx">         var current = Date.now();
</span><span class="cx">         var timeRange = [current - 24 * 3600 * 1000, current];
</span><span class="cx">         for (var group of this._configGroups)
</span><del>-            group.fetchAndComputeSummary(timeRange).then(this.render.bind(this));
</del><ins>+            group.fetchAndComputeSummary(timeRange).then(() =&gt; { this.updateRendering(); });
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     render()
</span><span class="lines">@@ -106,7 +106,7 @@
</span><span class="cx">         var ratioGraph = new RatioBarGraph();
</span><span class="cx"> 
</span><span class="cx">         if (configurationList.length == 0) {
</span><del>-            this._renderQueue.push(function () { ratioGraph.render(); });
</del><ins>+            this._renderQueue.push(() =&gt; { ratioGraph.updateRendering(); });
</ins><span class="cx">             return element('td', ratioGraph);
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -128,7 +128,7 @@
</span><span class="cx">         var warningText = this._warningTextForGroup(configurationGroup);
</span><span class="cx">         anchor.title = warningText || 'Open charts';
</span><span class="cx">         ratioGraph.update(configurationGroup.ratio(), configurationGroup.label(), !!warningText);
</span><del>-        ratioGraph.render();
</del><ins>+        ratioGraph.updateRendering();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _warningTextForGroup(configurationGroup)
</span></span></pre>
</div>
</div>

</body>
</html>