Index: tracing/tracing/ui/base/chart_base_2d.html |
diff --git a/tracing/tracing/ui/base/chart_base_2d.html b/tracing/tracing/ui/base/chart_base_2d.html |
index 143d7e53e7b9d5ed723c9cc29c4f4dce8c865ebf..66c65e5c1a65cc2c625941db627e037c5869f012 100644 |
--- a/tracing/tracing/ui/base/chart_base_2d.html |
+++ b/tracing/tracing/ui/base/chart_base_2d.html |
@@ -6,6 +6,7 @@ found in the LICENSE file. |
--> |
<link rel="import" href="/tracing/base/iteration_helpers.html"> |
+<link rel="import" href="/tracing/base/raf.html"> |
<link rel="import" href="/tracing/base/range.html"> |
<link rel="import" href="/tracing/ui/base/chart_base.html"> |
<link rel="import" href="/tracing/ui/base/mouse_tracker.html"> |
@@ -38,10 +39,9 @@ tr.exportTo('tr.ui.b', function() { |
this.isYLogScale_ = false; |
this.yLogScaleMin_ = undefined; |
this.dataRange_ = new tr.b.Range(); |
- |
+ this.hideXAxis_ = false; |
+ this.hideYAxis_ = false; |
this.data_ = []; |
- this.seriesKeys_ = []; |
- this.leftMargin_ = 50; |
d3.select(this.chartAreaElement) |
.append('g') |
@@ -53,6 +53,24 @@ tr.exportTo('tr.ui.b', function() { |
this.addEventListener('mousedown', this.onMouseDown_.bind(this)); |
}, |
+ get hideXAxis() { |
+ return this.hideXAxis_; |
+ }, |
+ |
+ set hideXAxis(h) { |
+ this.hideXAxis_ = h; |
+ this.updateContents_(); |
+ }, |
+ |
+ get hideYAxis() { |
+ return this.hideYAxis_; |
+ }, |
+ |
+ set hideYAxis(h) { |
+ this.hideYAxis_ = h; |
+ this.updateContents_(); |
+ }, |
+ |
get data() { |
return this.data_; |
}, |
@@ -109,23 +127,16 @@ tr.exportTo('tr.ui.b', function() { |
return leftWidth * 0.5 + rightWidth * 0.5; |
}, |
- getLegendKeys_: function() { |
- if (this.seriesKeys_ && |
- this.seriesKeys_.length > 1) |
- return this.seriesKeys_.slice(); |
- return []; |
- }, |
- |
updateSeriesKeys_: function() { |
- // Accumulate the keys on each data point. |
- var keySet = {}; |
+ // Don't clear seriesByKey_; the caller might have put state in it using |
+ // customizeLegendTargets, customizeOptionalSeries, or |
+ // customizeEnabledSeries before setting data. |
this.data_.forEach(function(datum) { |
Object.keys(datum).forEach(function(key) { |
if (this.isDatumFieldSeries_(key)) |
- keySet[key] = true; |
+ this.getDataSeries(key); |
}, this); |
}, this); |
- this.seriesKeys_ = Object.keys(keySet); |
}, |
isDatumFieldSeries_: function(fieldName) { |
@@ -149,11 +160,12 @@ tr.exportTo('tr.ui.b', function() { |
// Y. |
var yRange = new tr.b.Range(); |
- var keySet = new Set(this.seriesKeys_); |
- for (var i = 0; i < this.data_.length; i++) |
- for (var key in this.data_[i]) |
- if (keySet.has(key)) |
+ for (var i = 0; i < this.data_.length; i++) { |
+ for (var key in this.data_[i]) { |
+ if (!isNaN(Math.max(this.data_[i][key]))) |
yRange.addValue(this.data_[i][key]); |
+ } |
+ } |
this.yScale_.range([height, 0]); |
this.yScale_.domain([yRange.min, yRange.max]); |
@@ -166,11 +178,14 @@ tr.exportTo('tr.ui.b', function() { |
updateXAxis_: function(xAxis) { |
xAxis.selectAll('*').remove(); |
xAxis[0][0].style.opacity = 0; |
+ if (this.hideXAxis) |
+ return; |
+ |
xAxis.attr('transform', 'translate(0,' + this.chartAreaSize.height + ')') |
.call(d3.svg.axis() |
.scale(this.xScale_) |
.orient('bottom')); |
- window.requestAnimationFrame(function() { |
+ tr.b.requestAnimationFrame(function() { |
var previousRight = undefined; |
xAxis.selectAll('.tick')[0].forEach(function(tick) { |
var currentLeft = tick.transform.baseVal[0].matrix.e; |
@@ -183,13 +198,7 @@ tr.exportTo('tr.ui.b', function() { |
} |
}); |
xAxis[0][0].style.opacity = 1; |
- }); |
- }, |
- |
- getMargin_: function() { |
- var margin = ChartBase.prototype.getMargin_.call(this); |
- margin.left = this.leftMargin_; |
- return margin; |
+ }, this); |
}, |
updateDataRange_: function() { |
@@ -218,6 +227,8 @@ tr.exportTo('tr.ui.b', function() { |
updateYAxis_: function(yAxis) { |
yAxis.selectAll('*').remove(); |
yAxis[0][0].style.opacity = 0; |
+ if (this.hideYAxis) |
+ return; |
var axisModifier = d3.svg.axis() |
.scale(this.yScale_) |
@@ -248,7 +259,7 @@ tr.exportTo('tr.ui.b', function() { |
yAxis.call(axisModifier); |
- window.requestAnimationFrame(function() { |
+ tr.b.requestAnimationFrame(function() { |
var previousTop = undefined; |
var leftMargin = 0; |
yAxis.selectAll('.tick')[0].forEach(function(tick) { |
@@ -263,13 +274,15 @@ tr.exportTo('tr.ui.b', function() { |
tick.style.opacity = 0; |
} |
}); |
- if (leftMargin > this.leftMargin_) { |
- this.leftMargin_ = leftMargin; |
+ |
+ leftMargin = parseInt(Math.ceil(leftMargin)); |
+ if (leftMargin > this.margin.left) { |
+ this.margin.left = leftMargin; |
this.updateContents_(); |
} else { |
yAxis[0][0].style.opacity = 1; |
} |
- }.bind(this)); |
+ }, this); |
}, |
updateContents_: function() { |
@@ -296,9 +309,9 @@ tr.exportTo('tr.ui.b', function() { |
*/ |
getDataBySeriesKey_: function() { |
var dataBySeriesKey = {}; |
- this.seriesKeys_.forEach(function(seriesKey) { |
- dataBySeriesKey[seriesKey] = []; |
- }); |
+ for (var [key, series] of this.seriesByKey_) { |
+ dataBySeriesKey[key] = []; |
+ } |
this.data_.forEach(function(multiSeriesDatum, index) { |
var x = this.getXForDatum_(multiSeriesDatum, index); |
@@ -325,9 +338,8 @@ tr.exportTo('tr.ui.b', function() { |
getDataPointAtClientPoint_: function(clientX, clientY) { |
var rect = this.getBoundingClientRect(); |
- var margin = this.margin; |
- var x = clientX - rect.left - margin.left; |
- var y = clientY - rect.top - margin.top; |
+ var x = clientX - rect.left - this.margin.left; |
+ var y = clientY - rect.top - this.margin.top; |
x = this.xScale_.invert(x); |
y = this.yScale_.invert(y); |
x = tr.b.clamp(x, this.xScale_.domain()[0], this.xScale_.domain()[1]); |