<!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>[180365] 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/180365">180365</a></dd>
<dt>Author</dt> <dd>rniwa@webkit.org</dd>
<dt>Date</dt> <dd>2015-02-19 14:18:17 -0800 (Thu, 19 Feb 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>Relationship between A/B testing results are unclear
https://bugs.webkit.org/show_bug.cgi?id=141810
Reviewed by Andreas Kling.
Show a "reference chart" indicating which two points have been tested in each test group pane.
Now the chart shown at the top of an analysis task page is called the "overview pane", and we use the pane
and the domain used in this chart to show charts in each test group.
Also renamed an array of revisions used in the A/B test results tables from 'revisions' to 'revisionList'.
* public/v2/analysis.js:
(App.TestGroup._fetchTestResults): Renamed from _fetchChartData. Set 'testResults' instead of 'chartData'
since this is the results of A/B testing results, not the data for charts shown next to them.
* public/v2/app.css: Added CSS rules for reference charts.
* public/v2/app.js:
(App.AnalysisTaskController.paneDomain): Set 'overviewPane' and 'overviewDomain' on each test group pane.
(App.TestGroupPane._populate): Updated per 'chartData' to 'testResults' rename.
(App.TestGroupPane._updateReferenceChart): Get the chart data via the overview pane and find points that
identically matches root sets. If one of configuration used a set of revisions for which no measurement
was made in the original chart, don't show the reference chart as that would be misleading / confusing.
(App.TestGroupPane._computeRepositoryList): Updated per 'chartData' to 'testResults' rename.
(App.TestGroupPane._createConfigurationSummary): Ditto. Also renamed 'revisions' to 'revisionList'.
In addition, renamed 'buildNumber' to 'buildLabel' and prefixed it with "Build ".
* public/v2/data.js:
(Measurement.prototype.revisionForRepository): Added.
(Measurement.prototype.commitTimeForRepository): Cleanup.
(TimeSeries.prototype.findPointByRevisions): Added. Finds a point based on a set of revisions.
* public/v2/index.html: Added the reference chart. Streamlined the status label for each build request
by including the build number in the title attribute instead of in the markup.
* public/v2/interactive-chart.js:
(App.InteractiveChartComponent._updateDomain): Fixed a typo introduced as a consequence of <a href="http://trac.webkit.org/projects/webkit/changeset/179913">r179913</a>.
(App.InteractiveChartComponent._computeYAxisDomain): Expand the y-axis to show the highlighted points.
(App.InteractiveChartComponent._highlightedItemsChanged): Adjust the y-axis as needed.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkWebsitesperfwebkitorgChangeLog">trunk/Websites/perf.webkit.org/ChangeLog</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv2analysisjs">trunk/Websites/perf.webkit.org/public/v2/analysis.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv2appcss">trunk/Websites/perf.webkit.org/public/v2/app.css</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv2appjs">trunk/Websites/perf.webkit.org/public/v2/app.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv2datajs">trunk/Websites/perf.webkit.org/public/v2/data.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv2indexhtml">trunk/Websites/perf.webkit.org/public/v2/index.html</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv2interactivechartjs">trunk/Websites/perf.webkit.org/public/v2/interactive-chart.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 (180364 => 180365)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/ChangeLog        2015-02-19 21:42:21 UTC (rev 180364)
+++ trunk/Websites/perf.webkit.org/ChangeLog        2015-02-19 22:18:17 UTC (rev 180365)
</span><span class="lines">@@ -1,3 +1,46 @@
</span><ins>+2015-02-19 Ryosuke Niwa <rniwa@webkit.org>
+
+ Relationship between A/B testing results are unclear
+ https://bugs.webkit.org/show_bug.cgi?id=141810
+
+ Reviewed by Andreas Kling.
+
+ Show a "reference chart" indicating which two points have been tested in each test group pane.
+
+ Now the chart shown at the top of an analysis task page is called the "overview pane", and we use the pane
+ and the domain used in this chart to show charts in each test group.
+
+ Also renamed an array of revisions used in the A/B test results tables from 'revisions' to 'revisionList'.
+
+ * public/v2/analysis.js:
+ (App.TestGroup._fetchTestResults): Renamed from _fetchChartData. Set 'testResults' instead of 'chartData'
+ since this is the results of A/B testing results, not the data for charts shown next to them.
+
+ * public/v2/app.css: Added CSS rules for reference charts.
+
+ * public/v2/app.js:
+ (App.AnalysisTaskController.paneDomain): Set 'overviewPane' and 'overviewDomain' on each test group pane.
+ (App.TestGroupPane._populate): Updated per 'chartData' to 'testResults' rename.
+ (App.TestGroupPane._updateReferenceChart): Get the chart data via the overview pane and find points that
+ identically matches root sets. If one of configuration used a set of revisions for which no measurement
+ was made in the original chart, don't show the reference chart as that would be misleading / confusing.
+ (App.TestGroupPane._computeRepositoryList): Updated per 'chartData' to 'testResults' rename.
+ (App.TestGroupPane._createConfigurationSummary): Ditto. Also renamed 'revisions' to 'revisionList'.
+ In addition, renamed 'buildNumber' to 'buildLabel' and prefixed it with "Build ".
+
+ * public/v2/data.js:
+ (Measurement.prototype.revisionForRepository): Added.
+ (Measurement.prototype.commitTimeForRepository): Cleanup.
+ (TimeSeries.prototype.findPointByRevisions): Added. Finds a point based on a set of revisions.
+
+ * public/v2/index.html: Added the reference chart. Streamlined the status label for each build request
+ by including the build number in the title attribute instead of in the markup.
+
+ * public/v2/interactive-chart.js:
+ (App.InteractiveChartComponent._updateDomain): Fixed a typo introduced as a consequence of r179913.
+ (App.InteractiveChartComponent._computeYAxisDomain): Expand the y-axis to show the highlighted points.
+ (App.InteractiveChartComponent._highlightedItemsChanged): Adjust the y-axis as needed.
+
</ins><span class="cx"> 2015-02-18 Ryosuke Niwa <rniwa@webkit.org>
</span><span class="cx">
</span><span class="cx"> Analysis task pages are unusable
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv2analysisjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v2/analysis.js (180364 => 180365)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v2/analysis.js        2015-02-19 21:42:21 UTC (rev 180364)
+++ trunk/Websites/perf.webkit.org/public/v2/analysis.js        2015-02-19 22:18:17 UTC (rev 180365)
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx"> createdAt: DS.attr('date'),
</span><span class="cx"> buildRequests: DS.hasMany('buildRequests'),
</span><span class="cx"> rootSets: DS.hasMany('rootSets'),
</span><del>- _fetchChartData: function ()
</del><ins>+ _fetchTestResults: function ()
</ins><span class="cx"> {
</span><span class="cx"> var task = this.get('task');
</span><span class="cx"> if (!task)
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx"> var self = this;
</span><span class="cx"> return App.Manifest.fetchRunsWithPlatformAndMetric(this.store,
</span><span class="cx"> task.get('platform').get('id'), task.get('metric').get('id'), this.get('id')).then(
</span><del>- function (result) { self.set('chartData', result.data); },
</del><ins>+ function (result) { self.set('testResults', result.data); },
</ins><span class="cx"> function (error) {
</span><span class="cx"> // FIXME: Somehow this never gets called.
</span><span class="cx"> alert('Failed to fetch the results:' + error);
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv2appcss"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v2/app.css (180364 => 180365)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v2/app.css        2015-02-19 21:42:21 UTC (rev 180364)
+++ trunk/Websites/perf.webkit.org/public/v2/app.css        2015-02-19 22:18:17 UTC (rev 180365)
</span><span class="lines">@@ -472,6 +472,29 @@
</span><span class="cx"> display: none;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+.analysis-group {
+ display: block;
+ position: relative;
+ min-height: 6.5rem;
+}
+
+.analysis-group .results {
+ margin-right: 20rem;
+}
+
+.analysis-group .reference-chart {
+ position: absolute;
+ top: 1.2rem;
+ right: -0.7rem;
+ width: 19rem;
+ height: 5rem;
+}
+
+.analysis-group .reference-chart .chart {
+ width: 100%;
+ height: 100%;
+}
+
</ins><span class="cx"> .box-plot {
</span><span class="cx"> display: inline-block;
</span><span class="cx"> width: 100px;
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv2appjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v2/app.js (180364 => 180365)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v2/app.js        2015-02-19 21:42:21 UTC (rev 180364)
+++ trunk/Websites/perf.webkit.org/public/v2/app.js        2015-02-19 22:18:17 UTC (rev 180365)
</span><span class="lines">@@ -1048,8 +1048,16 @@
</span><span class="cx"> this.set('highlightedItems', highlightedItems);
</span><span class="cx"> this.set('analysisPoints', formatedPoints);
</span><span class="cx">
</span><del>- return [start.time - margin, +end.time + margin];
- }.property('pane.chartData', 'model', 'model'),
</del><ins>+ var paneDomain = [start.time - margin, +end.time + margin];
+
+ var testGroupPanes = this.get('testGroupPanes');
+ if (testGroupPanes) {
+ testGroupPanes.setEach('overviewPane', pane);
+ testGroupPanes.setEach('overviewDomain', paneDomain);
+ }
+
+ return paneDomain;
+ }.property('pane.chartData'),
</ins><span class="cx"> testSets: function ()
</span><span class="cx"> {
</span><span class="cx"> var analysisPoints = this.get('analysisPoints');
</span><span class="lines">@@ -1166,8 +1174,8 @@
</span><span class="cx"> _populate: function ()
</span><span class="cx"> {
</span><span class="cx"> var buildRequests = this.get('buildRequests');
</span><del>- var chartData = this.get('chartData');
- if (!buildRequests || !chartData)
</del><ins>+ var testResults = this.get('testResults');
+ if (!buildRequests || !testResults)
</ins><span class="cx"> return [];
</span><span class="cx">
</span><span class="cx"> var repositories = this._computeRepositoryList();
</span><span class="lines">@@ -1188,7 +1196,41 @@
</span><span class="cx"> range.min -= margin;
</span><span class="cx">
</span><span class="cx"> this.set('configurations', configurations);
</span><del>- }.observes('chartData', 'buildRequests'),
</del><ins>+ }.observes('testResults', 'buildRequests'),
+ _updateReferenceChart: function ()
+ {
+ var configurations = this.get('configurations');
+ var chartData = this.get('overviewPane') ? this.get('overviewPane').get('chartData') : null;
+ if (!configurations || !chartData || this.get('referenceChart'))
+ return;
+
+ var currentTimeSeries = chartData.current;
+ if (!currentTimeSeries)
+ return;
+
+ var repositories = this.get('repositories');
+ var highlightedItems = {};
+ var failedToFindPoint = false;
+ configurations.forEach(function (config) {
+ var revisions = {};
+ config.get('rootSet').get('roots').forEach(function (root) {
+ revisions[root.get('repository').get('id')] = root.get('revision');
+ });
+ var point = currentTimeSeries.findPointByRevisions(revisions);
+ if (!point) {
+ failedToFindPoint = true;
+ return;
+ }
+ highlightedItems[point.measurement.id()] = true;
+ });
+ if (failedToFindPoint)
+ return;
+
+ this.set('referenceChart', {
+ data: chartData,
+ highlightedItems: highlightedItems,
+ });
+ }.observes('configurations', 'overviewPane.chartData'),
</ins><span class="cx"> _computeRepositoryList: function ()
</span><span class="cx"> {
</span><span class="cx"> var specifiedRepositories = new Ember.Set();
</span><span class="lines">@@ -1198,9 +1240,9 @@
</span><span class="cx"> });
</span><span class="cx"> });
</span><span class="cx"> var reportedRepositories = new Ember.Set();
</span><del>- var chartData = this.get('chartData');
</del><ins>+ var testResults = this.get('testResults');
</ins><span class="cx"> (this.get('buildRequests') || []).forEach(function (request) {
</span><del>- var point = chartData.current.findPointByBuild(request.get('build'));
</del><ins>+ var point = testResults.current.findPointByBuild(request.get('build'));
</ins><span class="cx"> if (!point)
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="lines">@@ -1228,19 +1270,19 @@
</span><span class="cx"> _createConfigurationSummary: function (buildRequests, configLetter, range)
</span><span class="cx"> {
</span><span class="cx"> var repositories = this.get('repositories');
</span><del>- var chartData = this.get('chartData');
</del><ins>+ var testResults = this.get('testResults');
</ins><span class="cx"> var requests = buildRequests.map(function (originalRequest) {
</span><del>- var point = chartData.current.findPointByBuild(originalRequest.get('build'));
</del><ins>+ var point = testResults.current.findPointByBuild(originalRequest.get('build'));
</ins><span class="cx"> var revisionByRepositoryId = point ? point.measurement.formattedRevisions() : {};
</span><span class="cx"> return Ember.ObjectProxy.create({
</span><span class="cx"> content: originalRequest,
</span><del>- revisions: repositories.map(function (repository, index) {
</del><ins>+ revisionList: repositories.map(function (repository, index) {
</ins><span class="cx"> return (revisionByRepositoryId[repository.get('id')] || {label:null}).label;
</span><span class="cx"> }),
</span><span class="cx"> value: point ? point.value : null,
</span><span class="cx"> valueRange: range,
</span><del>- formattedValue: point ? chartData.formatWithUnit(point.value) : null,
- buildNumber: point ? point.measurement.buildNumber() : null,
</del><ins>+ formattedValue: point ? testResults.formatWithUnit(point.value) : null,
+ buildLabel: point ? 'Build ' + point.measurement.buildNumber() : null,
</ins><span class="cx"> });
</span><span class="cx"> });
</span><span class="cx">
</span><span class="lines">@@ -1248,15 +1290,15 @@
</span><span class="cx"> var summaryRevisions = repositories.map(function (repository, index) {
</span><span class="cx"> var revision = rootSet ? rootSet.revisionForRepository(repository) : null;
</span><span class="cx"> if (!revision)
</span><del>- return requests[0].get('revisions')[index];
</del><ins>+ return requests[0].get('revisionList')[index];
</ins><span class="cx"> return Measurement.formatRevisionRange(revision).label;
</span><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> requests.forEach(function (request) {
</span><del>- var revisions = request.get('revisions');
</del><ins>+ var revisionList = request.get('revisionList');
</ins><span class="cx"> repositories.forEach(function (repository, index) {
</span><del>- if (revisions[index] == summaryRevisions[index])
- revisions[index] = null;
</del><ins>+ if (revisionList[index] == summaryRevisions[index])
+ revisionList[index] = null;
</ins><span class="cx"> });
</span><span class="cx"> });
</span><span class="cx">
</span><span class="lines">@@ -1275,15 +1317,15 @@
</span><span class="cx"> var summary = Ember.Object.create({
</span><span class="cx"> isAverage: true,
</span><span class="cx"> configLetter: configLetter,
</span><del>- revisions: summaryRevisions,
- formattedValue: isNaN(mean) ? null : chartData.formatWithDeltaAndUnit(mean, ciDelta),
</del><ins>+ revisionList: summaryRevisions,
+ formattedValue: isNaN(mean) ? null : testResults.formatWithDeltaAndUnit(mean, ciDelta),
</ins><span class="cx"> value: mean,
</span><span class="cx"> confidenceIntervalDelta: ciDelta,
</span><span class="cx"> valueRange: range,
</span><span class="cx"> statusLabel: App.BuildRequest.aggregateStatuses(requests),
</span><span class="cx"> });
</span><span class="cx">
</span><del>- return Ember.Object.create({summary: summary, items: requests});
</del><ins>+ return Ember.Object.create({summary: summary, items: requests, rootSet: rootSet});
</ins><span class="cx"> },
</span><span class="cx"> });
</span><span class="cx">
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv2datajs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v2/data.js (180364 => 180365)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v2/data.js        2015-02-19 21:42:21 UTC (rev 180364)
+++ trunk/Websites/perf.webkit.org/public/v2/data.js        2015-02-19 22:18:17 UTC (rev 180365)
</span><span class="lines">@@ -152,13 +152,18 @@
</span><span class="cx"> this._formattedRevisions = undefined;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+Measurement.prototype.revisionForRepository = function (repositoryId)
+{
+ var revisions = this._raw['revisions'];
+ var rawData = revisions[repositoryId];
+ return rawData ? rawData[0] : null;
+}
+
</ins><span class="cx"> Measurement.prototype.commitTimeForRepository = function (repositoryId)
</span><span class="cx"> {
</span><span class="cx"> var revisions = this._raw['revisions'];
</span><span class="cx"> var rawData = revisions[repositoryId];
</span><del>- if (!rawData)
- return null;
- return new Date(rawData[1]);
</del><ins>+ return rawData ? new Date(rawData[1]) : null;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> Measurement.prototype.formattedRevisions = function (previousMeasurement)
</span><span class="lines">@@ -368,6 +373,17 @@
</span><span class="cx"> return this._series.find(function (point) { return point.measurement.buildId() == buildId; })
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+TimeSeries.prototype.findPointByRevisions = function (revisions)
+{
+ return this._series.find(function (point, index) {
+ for (var repositoryId in revisions) {
+ if (point.measurement.revisionForRepository(repositoryId) != revisions[repositoryId])
+ return false;
+ }
+ return true;
+ });
+}
+
</ins><span class="cx"> TimeSeries.prototype.findPointByMeasurementId = function (measurementId)
</span><span class="cx"> {
</span><span class="cx"> return this._series.find(function (point) { return point.measurement.id() == measurementId; });
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv2indexhtml"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v2/index.html (180364 => 180365)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v2/index.html        2015-02-19 21:42:21 UTC (rev 180364)
+++ trunk/Websites/perf.webkit.org/public/v2/index.html        2015-02-19 22:18:17 UTC (rev 180365)
</span><span class="lines">@@ -591,11 +591,22 @@
</span><span class="cx"> </tbody>
</span><span class="cx"> {{/each}}
</span><span class="cx"> </table>
</span><ins>+ <div class="reference-chart">
+ {{#if referenceChart}}
+ {{interactive-chart
+ chartData=referenceChart.data
+ domain=overviewDomain
+ chartPointRadius=2
+ showYAxis=false
+ enableSelection=false
+ highlightedItems=referenceChart.highlightedItems}}
+ {{/if}}
+ </div>
</ins><span class="cx"> </section>
</span><span class="cx"> </script>
</span><span class="cx">
</span><span class="cx"> <script type="text/x-handlebars" data-template-name="testGroupRow">
</span><del>- {{#each revisions}}
</del><ins>+ {{#each revisionList}}
</ins><span class="cx"> <td>{{this}}</td>
</span><span class="cx"> {{/each}}
</span><span class="cx"> <td>
</span><span class="lines">@@ -605,11 +616,7 @@
</span><span class="cx"> {{formattedValue}}
</span><span class="cx"> </td>
</span><span class="cx"> <td>
</span><del>- {{#if buildNumber}}
- {{statusLabel}} / <a {{bind-attr href=url}}>Build {{buildNumber}}</a>
- {{else}}
- <a {{bind-attr href=url}}>{{statusLabel}}</a>
- {{/if}}
</del><ins>+ <a {{bind-attr href=url title=buildLabel}}>{{statusLabel}}</a>
</ins><span class="cx"> </td>
</span><span class="cx"> </script>
</span><span class="cx">
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv2interactivechartjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v2/interactive-chart.js (180364 => 180365)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v2/interactive-chart.js        2015-02-19 21:42:21 UTC (rev 180364)
+++ trunk/Websites/perf.webkit.org/public/v2/interactive-chart.js        2015-02-19 22:18:17 UTC (rev 180365)
</span><span class="lines">@@ -208,7 +208,7 @@
</span><span class="cx"> var currentYDomain = this._y.domain();
</span><span class="cx"> if (currentXDomain && App.domainsAreEqual(currentXDomain, xDomain)
</span><span class="cx"> && currentYDomain && App.domainsAreEqual(currentYDomain, yDomain))
</span><del>- return currentDomain;
</del><ins>+ return currentXDomain;
</ins><span class="cx">
</span><span class="cx"> this._x.domain(xDomain);
</span><span class="cx"> this._y.domain(yDomain);
</span><span class="lines">@@ -343,6 +343,16 @@
</span><span class="cx"> var range = this._minMaxForAllTimeSeries(startTime, endTime, !shouldShowFullYAxis);
</span><span class="cx"> var min = range[0];
</span><span class="cx"> var max = range[1];
</span><ins>+
+ var highlightedItems = this.get('highlightedItems');
+ if (highlightedItems) {
+ var data = this._currentTimeSeriesData
+ .filter(function (point) { return startTime <= point.time && point.time <= endTime && highlightedItems[point.measurement.id()]; })
+ .map(function (point) { return point.value });
+ min = Math.min(min, Statistics.min(data));
+ max = Math.max(max, Statistics.max(data));
+ }
+
</ins><span class="cx"> if (max < min)
</span><span class="cx"> min = max = 0;
</span><span class="cx"> else if (shouldShowFullYAxis)
</span><span class="lines">@@ -615,7 +625,7 @@
</span><span class="cx"> .attr("class", "highlight")
</span><span class="cx"> .attr("r", (this.get('chartPointRadius') || 1) * 1.8);
</span><span class="cx">
</span><del>- this._updateHighlightPositions();
</del><ins>+ this._domainChanged();
</ins><span class="cx"> }.observes('highlightedItems'),
</span><span class="cx"> _rangesChanged: function ()
</span><span class="cx"> {
</span></span></pre>
</div>
</div>
</body>
</html>