OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <!-- | 2 <!-- |
3 Copyright (c) 2015 The Chromium Authors. All rights reserved. | 3 Copyright (c) 2015 The Chromium Authors. All rights reserved. |
4 Use of this source code is governed by a BSD-style license that can be | 4 Use of this source code is governed by a BSD-style license that can be |
5 found in the LICENSE file. | 5 found in the LICENSE file. |
6 --> | 6 --> |
7 | 7 |
8 <link rel="import" href="/tracing/base/color_scheme.html"> | 8 <link rel="import" href="/tracing/base/color_scheme.html"> |
9 <link rel="import" href="/tracing/base/range.html"> | 9 <link rel="import" href="/tracing/base/range.html"> |
10 <link rel="import" href="/tracing/model/proxy_selectable_item.html"> | 10 <link rel="import" href="/tracing/model/proxy_selectable_item.html"> |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 } | 108 } |
109 | 109 |
110 ChartSeries.prototype = { | 110 ChartSeries.prototype = { |
111 useRenderingConfig_: function(opt_renderingConfig) { | 111 useRenderingConfig_: function(opt_renderingConfig) { |
112 var config = opt_renderingConfig || {}; | 112 var config = opt_renderingConfig || {}; |
113 | 113 |
114 // Store all configuration flags as private properties. | 114 // Store all configuration flags as private properties. |
115 for (var [key, defaultValue] of | 115 for (var [key, defaultValue] of |
116 Object.entries(DEFAULT_RENDERING_CONFIG)) { | 116 Object.entries(DEFAULT_RENDERING_CONFIG)) { |
117 var value = config[key]; | 117 var value = config[key]; |
118 if (value === undefined) | 118 if (value === undefined) { |
119 value = defaultValue; | 119 value = defaultValue; |
| 120 } |
120 this[key + '_'] = value; | 121 this[key + '_'] = value; |
121 } | 122 } |
122 | 123 |
123 // Avoid unnecessary recomputation in getters. | 124 // Avoid unnecessary recomputation in getters. |
124 this.topPadding = this.bottomPadding = Math.max( | 125 this.topPadding = this.bottomPadding = Math.max( |
125 this.selectedPointSize_, this.unselectedPointSize_) / 2; | 126 this.selectedPointSize_, this.unselectedPointSize_) / 2; |
126 }, | 127 }, |
127 | 128 |
128 get range() { | 129 get range() { |
129 var range = new tr.b.Range(); | 130 var range = new tr.b.Range(); |
130 this.points.forEach(function(point) { | 131 this.points.forEach(function(point) { |
131 range.addValue(point.y); | 132 range.addValue(point.y); |
132 }, this); | 133 }, this); |
133 return range; | 134 return range; |
134 }, | 135 }, |
135 | 136 |
136 draw: function(ctx, transform, highDetails) { | 137 draw: function(ctx, transform, highDetails) { |
137 if (this.points === undefined || this.points.length === 0) | 138 if (this.points === undefined || this.points.length === 0) { |
138 return; | 139 return; |
| 140 } |
139 | 141 |
140 // Draw the background. | 142 // Draw the background. |
141 if (this.chartType_ === ChartSeriesType.AREA) { | 143 if (this.chartType_ === ChartSeriesType.AREA) { |
142 this.drawComponent_(ctx, transform, ChartSeriesComponent.BACKGROUND, | 144 this.drawComponent_(ctx, transform, ChartSeriesComponent.BACKGROUND, |
143 highDetails); | 145 highDetails); |
144 } | 146 } |
145 | 147 |
146 // Draw the line at the top. | 148 // Draw the line at the top. |
147 if (this.chartType_ === ChartSeriesType.LINE || highDetails) { | 149 if (this.chartType_ === ChartSeriesType.LINE || highDetails) { |
148 this.drawComponent_(ctx, transform, ChartSeriesComponent.LINE, | 150 this.drawComponent_(ctx, transform, ChartSeriesComponent.LINE, |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 } | 498 } |
497 } | 499 } |
498 ctx.restore(); | 500 ctx.restore(); |
499 }, | 501 }, |
500 | 502 |
501 addIntersectingEventsInRangeToSelectionInWorldSpace: function( | 503 addIntersectingEventsInRangeToSelectionInWorldSpace: function( |
502 loWX, hiWX, viewPixWidthWorld, selection) { | 504 loWX, hiWX, viewPixWidthWorld, selection) { |
503 var points = this.points; | 505 var points = this.points; |
504 | 506 |
505 function getPointWidth(point, i) { | 507 function getPointWidth(point, i) { |
506 if (i === points.length - 1) | 508 if (i === points.length - 1) { |
507 return LAST_POINT_WIDTH * viewPixWidthWorld; | 509 return LAST_POINT_WIDTH * viewPixWidthWorld; |
| 510 } |
508 var nextPoint = points[i + 1]; | 511 var nextPoint = points[i + 1]; |
509 return nextPoint.x - point.x; | 512 return nextPoint.x - point.x; |
510 } | 513 } |
511 | 514 |
512 function selectPoint(point) { | 515 function selectPoint(point) { |
513 point.addToSelection(selection); | 516 point.addToSelection(selection); |
514 } | 517 } |
515 | 518 |
516 tr.b.iterateOverIntersectingIntervals( | 519 tr.b.iterateOverIntersectingIntervals( |
517 this.points, | 520 this.points, |
518 function(point) { return point.x; }, | 521 function(point) { return point.x; }, |
519 getPointWidth, | 522 getPointWidth, |
520 loWX, | 523 loWX, |
521 hiWX, | 524 hiWX, |
522 selectPoint); | 525 selectPoint); |
523 }, | 526 }, |
524 | 527 |
525 addEventNearToProvidedEventToSelection: function(event, offset, selection) { | 528 addEventNearToProvidedEventToSelection: function(event, offset, selection) { |
526 if (this.points === undefined) | 529 if (this.points === undefined) return false; |
527 return false; | |
528 | 530 |
529 var index = tr.b.findFirstIndexInArray(this.points, function(point) { | 531 var index = tr.b.findFirstIndexInArray(this.points, function(point) { |
530 return point.modelItem === event; | 532 return point.modelItem === event; |
531 }, this); | 533 }, this); |
532 if (index === -1) | 534 if (index === -1) return false; |
533 return false; | |
534 | 535 |
535 var newIndex = index + offset; | 536 var newIndex = index + offset; |
536 if (newIndex < 0 || newIndex >= this.points.length) | 537 if (newIndex < 0 || newIndex >= this.points.length) return false; |
537 return false; | |
538 | 538 |
539 this.points[newIndex].addToSelection(selection); | 539 this.points[newIndex].addToSelection(selection); |
540 return true; | 540 return true; |
541 }, | 541 }, |
542 | 542 |
543 addClosestEventToSelection: function(worldX, worldMaxDist, loY, hiY, | 543 addClosestEventToSelection: function(worldX, worldMaxDist, loY, hiY, |
544 selection) { | 544 selection) { |
545 if (this.points === undefined) | 545 if (this.points === undefined) return; |
546 return; | |
547 | 546 |
548 var item = tr.b.findClosestElementInSortedArray( | 547 var item = tr.b.findClosestElementInSortedArray( |
549 this.points, | 548 this.points, |
550 function(point) { return point.x; }, | 549 function(point) { return point.x; }, |
551 worldX, | 550 worldX, |
552 worldMaxDist); | 551 worldMaxDist); |
553 | 552 |
554 if (!item) | 553 if (!item) return; |
555 return; | |
556 | 554 |
557 item.addToSelection(selection); | 555 item.addToSelection(selection); |
558 } | 556 } |
559 }; | 557 }; |
560 | 558 |
561 return { | 559 return { |
562 ChartSeries, | 560 ChartSeries, |
563 ChartSeriesType, | 561 ChartSeriesType, |
564 }; | 562 }; |
565 }); | 563 }); |
566 </script> | 564 </script> |
OLD | NEW |