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

Side by Side Diff: client/dom/benchmarks/dromaeo/Dromaeo.dart

Issue 9374026: Move dromaeo to third_party (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Moved Dromaeo to third party. Created 8 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « client/dom/benchmarks/common/common.dart ('k') | client/dom/benchmarks/dromaeo/Suites.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #import('dart:dom');
2 #import('dart:json');
3 #import('Suites.dart');
4
5 main() {
6 new Dromaeo().run();
7 }
8
9 class SuiteController {
10 final SuiteDescription _suiteDescription;
11 final HTMLIFrameElement _suiteIframe;
12
13 HTMLDivElement _element;
14 double _meanProduct;
15 int _nTests;
16
17 SuiteController(this._suiteDescription, this._suiteIframe)
18 : _meanProduct = 1.0,
19 _nTests = 0 {
20 _make();
21 _init();
22 }
23
24 start() {
25 _suiteIframe.contentWindow.dynamic.postMessage('start', '*');
26 }
27
28 update(String testName, num mean, num error, double percent) {
29 _meanProduct *= mean;
30 _nTests++;
31
32 final meanAsString = mean.toStringAsFixed(2);
33 final errorAsString = error.toStringAsFixed(2);
34 final HTMLElement progressDisplay = _element.nextSibling.nextSibling;
35 progressDisplay.innerHTML +=
36 '<li><b>${testName}:</b>' +
37 '${meanAsString}<small> runs/s &#177;${errorAsString}%<small></li>';
38 _updateTestPos(percent);
39 }
40
41 _make() {
42 _element = _createDiv('test');
43 // TODO(antonm): add an onclick functionality.
44 _updateTestPos();
45 }
46
47 _updateTestPos([double percent = 1.0]) {
48 String suiteName = _suiteDescription.name;
49 final done = percent >= 100.0;
50 String info = '';
51 if (done) {
52 final parent = _element.parentNode;
53 parent.setAttribute('class', parent.getAttribute('class') + ' done');
54 final mean = Math.pow(_meanProduct, 1.0 / _nTests).toStringAsFixed(2);
55 info = '<span>${mean} runs/s</span>';
56 }
57 _element.innerHTML =
58 '<b>${suiteName}:</b>' +
59 '<div class="bar"><div style="width:${percent}%;">${info}</div></div>';
60 }
61
62 _init() {
63 final div = _createDiv('result-item');
64 div.appendChild(_element);
65 final description = _suiteDescription.description;
66 final originUrl = _suiteDescription.origin.url;
67 final testUrl = 'tests/' + _suiteDescription.file;
68 div.innerHTML +=
69 '<p>${description}<br/><a href="${originUrl}">Origin</a>' +
70 ', <a href="${testUrl}">Source</a>' +
71 '<ol class="results"></ol>';
72 // Reread the element, as the previous wrapper get disconnected thanks
73 // to .innerHTML update above.
74 _element = div.firstChild;
75
76 document.getElementById('main').appendChild(div);
77 }
78
79 HTMLDivElement _createDiv(String clazz) {
80 final div = document.createElement('div');
81 div.setAttribute('class', clazz);
82 return div;
83 }
84 }
85
86 class Dromaeo {
87 final List<SuiteController> _suiteControllers;
88 Function _handler;
89
90 Dromaeo()
91 : _suiteControllers = new List<SuiteController>()
92 {
93 _handler = _createHandler();
94 window.addEventListener(
95 'message',
96 (MessageEvent event) {
97 try {
98 final response = JSON.parse(event.data);
99 _handler = _handler(response['command'], response['data']);
100 } catch (final e, final stacktrace) {
101 window.alert('Exception: ${e}: ${stacktrace}');
102 }
103 },
104 false
105 );
106 }
107
108 run() {
109 // TODO(antonm): create Re-run tests href.
110 final HTMLElement suiteNameElement = _byId('overview').firstChild;
111 suiteNameElement.innerHTML = 'DOM Core Tests';
112 _css(_byId('tests'), 'display', 'none');
113 for (SuiteDescription suite in Suites.SUITE_DESCRIPTIONS) {
114 final iframe = document.createElement('iframe');
115 _css(iframe, 'height', '1px');
116 _css(iframe, 'width', '1px');
117 iframe.src = 'tests/' + suite.file;
118 document.body.appendChild(iframe);
119
120 _suiteControllers.add(new SuiteController(suite, iframe));
121 }
122 }
123
124 static final double _SECS_PER_TEST = 5.0;
125
126 Function _createHandler() {
127 int suitesLoaded = 0;
128 int totalTests = 0;
129 int currentSuite;
130 double totalTimeSecs, estimatedTimeSecs;
131
132 // TODO(jat): Remove void type below. Bug 5269037.
133 void _updateTime() {
134 final mins = (estimatedTimeSecs / 60).floor().toInt();
135 final secs = (estimatedTimeSecs - mins * 60).round().toInt();
136 final secsAsString = (secs < 10 ? '0' : '') + secs;
137 _byId('left').innerHTML = '${mins}:${secsAsString}';
138
139 final elapsed = totalTimeSecs - estimatedTimeSecs;
140 final percent = (100 * elapsed / totalTimeSecs).toStringAsFixed(2);
141 _css(_byId('timebar'), 'width', '${percent}%');
142 }
143
144 Function loading, running, done;
145
146 loading = (String command, var data) {
147 assert(command == 'inited');
148 suitesLoaded++;
149 totalTests += data['nTests'];
150 if (suitesLoaded == _suitesTotal) {
151 totalTimeSecs = estimatedTimeSecs = _SECS_PER_TEST * totalTests;
152 _updateTime();
153 currentSuite = 0;
154 _suiteControllers[currentSuite].start();
155 return running;
156 }
157
158 return loading;
159 };
160
161 running = (String command, var data) {
162 switch (command) {
163 case 'result':
164 final testName = data['testName'];
165 final mean = data['mean'];
166 final error = data['error'];
167 final percent = data['percent'];
168 _suiteControllers[currentSuite].update(testName, mean, error, percent) ;
169 estimatedTimeSecs -= _SECS_PER_TEST;
170 _updateTime();
171 return running;
172
173 case 'over':
174 currentSuite++;
175 if (currentSuite < _suitesTotal) {
176 _suiteControllers[currentSuite].start();
177 return running;
178 }
179 document.body.setAttribute('class', 'alldone');
180 return done;
181
182 default:
183 throw 'Unknown command ${command} [${data}]';
184 }
185 };
186
187 done = (String command, var data) {
188 };
189
190 return loading;
191 }
192
193 _css(Element element, String property, String value) {
194 // TODO(antonm): remove the last argument when CallWithDefaultValue
195 // is implemented.
196 element.style.setProperty(property, value, '');
197 }
198
199 HTMLElement _byId(String id) {
200 return document.getElementById(id);
201 }
202
203 int get _suitesTotal() {
204 return _suiteControllers.length;
205 }
206 }
OLDNEW
« no previous file with comments | « client/dom/benchmarks/common/common.dart ('k') | client/dom/benchmarks/dromaeo/Suites.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698