Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(830)

Side by Side Diff: runtime/observatory/lib/src/elements/metric/graph.dart

Issue 2303173002: Converted Observatory metrics-page element (Closed)
Patch Set: Added sampling buffer size select Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'dart:html';
6 import 'dart:async';
7 import 'package:observatory/models.dart' as M;
8 import 'package:charted/charted.dart';
9 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
10 import 'package:observatory/src/elements/helpers/tag.dart';
11
12 class MetricGraphElement extends HtmlElement implements Renderable {
13 static const tag = const Tag<MetricGraphElement>('metric-graph');
14
15 RenderingScheduler<MetricGraphElement> _r;
16
17 Stream<RenderedEvent<MetricGraphElement>> get onRendered => _r.onRendered;
18
19 M.IsolateRef _isolate;
20 M.Metric _metric;
21 M.MetricRepository _metrics;
22 Timer _timer;
23
24 M.IsolateRef get isolate => _isolate;
25 M.Metric get metric => _metric;
26
27 factory MetricGraphElement(M.IsolateRef isolate, M.Metric metric,
28 M.MetricRepository metrics,
29 {RenderingQueue queue}) {
30 assert(isolate != null);
31 assert(metric != null);
32 assert(metrics != null);
33 MetricGraphElement e = document.createElement(tag.name);
34 e._r = new RenderingScheduler(e, queue: queue);
35 e._isolate = isolate;
36 e._metric = metric;
37 e._metrics = metrics;
38 return e;
39 }
40
41 MetricGraphElement.created() : super.created();
42
43 @override
44 void attached() {
45 super.attached();
46 _r.enable();
47 _timer = new Timer.periodic(const Duration(seconds: 1), (_) => _r.dirty());
48 }
49
50 @override
51 void detached() {
52 super.detached();
53 _r.disable(notify: true);
54 children = [];
55 _timer.cancel();
56 }
57
58 final _columns = [
59 new ChartColumnSpec(label: 'Time', type: ChartColumnSpec.TYPE_TIMESTAMP),
60 new ChartColumnSpec(label: 'Value', formatter: (v) => v.toString())
61 ];
62
63 void render() {
64 final min = _metrics.getMinValue(_isolate, _metric);
65 final max = _metrics.getMaxValue(_isolate, _metric);
66 final rows = _metrics.getSamples(_isolate, _metric).map((s) =>
67 [s.time.millisecondsSinceEpoch, s.value]).toList();
68 final current = rows.last.last;
69
70 var message = 'current: $current';
71 if (min != null) {
72 message = 'min: $min, ' + message;
73 }
74 if (max != null) {
75 message = message + ', max: $max';
76 }
77
78 final host = new DivElement();
79 children = [
80 new DivElement()..classes = ['memberList']
81 ..children = [
82 new DivElement()..classes = ['memberItem']
83 ..children = min == null ? const [] : [
84 new DivElement()..classes = ['memberName']
85 ..text = 'min',
86 new DivElement()..classes = ['memberValue']
87 ..text = '$min'
88 ],
89 new DivElement()..classes = ['memberItem']
90 ..children = [
91 new DivElement()..classes = ['memberName']
92 ..text = 'current',
93 new DivElement()..classes = ['memberValue']
94 ..text = '$current'
95 ],
96 new DivElement()..classes = ['memberItem']
97 ..children = max == null ? const [] : [
98 new DivElement()..classes = ['memberName']
99 ..text = 'max',
100 new DivElement()..classes = ['memberValue']
101 ..text = '$max'
102 ]
103 ],
104 new DivElement()..classes = ['graph']
105 ..children = [
106 host
107 ]
108 ];
109 if (rows.length <= 1) {
110 return;
111 }
112 final rect = host.getBoundingClientRect();
113 var series = new ChartSeries("one", [1], new LineChartRenderer());
114 var config = new ChartConfig([series], [0]);
115 config.minimumSize = new Rect(rect.width, rect.height);
116 final data = new ChartData(_columns, rows);
117 new CartesianArea(host, data, config, state: new ChartState()).draw();
118 }
119 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698