Index: benchmark/lib/html_view.dart |
diff --git a/benchmark/lib/html_view.dart b/benchmark/lib/html_view.dart |
deleted file mode 100644 |
index 2d029bd3cdd913a9669616c60a5468df432bb405..0000000000000000000000000000000000000000 |
--- a/benchmark/lib/html_view.dart |
+++ /dev/null |
@@ -1,197 +0,0 @@ |
-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-library protoc.benchmark.html_view; |
- |
-import 'dart:async' show Future; |
-import 'dart:html'; |
- |
-import 'generated/benchmark.pb.dart' as pb; |
-import 'report.dart' show createPlatform, createPackages, encodeReport; |
-import 'suite.dart' show runSuite; |
- |
-import '../data/index.dart' as data; |
- |
-/// Runs a benchmark suite and displays progress and results as HTML. |
-/// Returns after rendering the final report. |
-Future runSuiteWithView(pb.Suite suite, Element container) async { |
- await loadReports(); // TODO: comparison view |
- |
- var env = await loadBrowserEnv(); |
- |
- var view = new ReportView(); |
- container.children.clear(); |
- container.append(view.elt); |
- |
- for (pb.Report report in runSuite(suite)) { |
- report.env = env; |
- view.render(report); |
- |
- // Wait for frame to render and start a new timer task for next benchmark. |
- await window.animationFrame; |
- await new Future(() => null); |
- } |
-} |
- |
-Future<pb.Env> loadBrowserEnv() async { |
- const advice = "Run a VM benchmark to create this file."; |
- var pubspecYaml = await _loadDataFile(data.pubspecYamlName, advice: advice); |
- var pubspecLock = await _loadDataFile(data.pubspecLockName, advice: advice); |
- var hostname = await _loadDataFile(data.hostfileName, advice: advice); |
- |
- var platform = createPlatform() |
- ..hostname = hostname |
- ..userAgent = window.navigator.userAgent; |
- |
- return new pb.Env() |
- ..page = window.location.pathname |
- ..platform = platform |
- ..packages = createPackages(pubspecYaml, pubspecLock); |
-} |
- |
-/// Loads all the reports saved to benchmark/data. |
-Future<List<pb.Report>> loadReports() async { |
- var out = <pb.Report>[]; |
- // TODO: maybe parallelize? |
- for (var name in data.allReportNames) { |
- String json = |
- await _loadDataFile(name, optional: (name == data.latestVMReportName)); |
- if (json != null) { |
- out.add(new pb.Report.fromJson(json)); |
- } |
- } |
- print("loaded ${out.length} reports"); |
- return out; |
-} |
- |
-Future<String> _loadDataFile(String name, |
- {bool optional: false, String advice}) async { |
- try { |
- return await HttpRequest.getString("/data/$name"); |
- } catch (e) { |
- if (optional) return null; |
- String error = "File is missing in benchmark/data: $name"; |
- if (advice != null) { |
- error += ". $advice"; |
- } |
- throw error; |
- } |
-} |
- |
-class ReportView { |
- final DivElement elt = new DivElement(); |
- final DivElement _statusElt = new DivElement(); |
- final PreElement _envElt = new PreElement(); |
- final TableElement _responseTable = new TableElement(); |
- final _jsonView = new _JsonView(); |
- |
- String _renderedStatus; |
- String _renderedPlatform; |
- final rows = <_ResponseView>[]; |
- |
- ReportView() { |
- // Fill in "template" elements that never change. |
- elt.children.addAll([ |
- _statusElt..style.height = "1em", |
- _envElt, |
- _responseTable |
- ..children.addAll([ |
- _headerCell("Benchmark"), |
- _headerCell("Params"), |
- _headerCell("1000 * int32 reads / second")..colSpan = 3 |
- ]), |
- _jsonView.elt |
- ]); |
- } |
- |
- void render(pb.Report r) { |
- _renderStatus(r); |
- _renderEnv(r); |
- _renderResponses(r); |
- _jsonView.render(r); |
- } |
- |
- void _renderStatus(pb.Report r) { |
- var newStatus = r.message; |
- if (r.status == pb.Status.DONE) newStatus = ""; |
- |
- if (newStatus == _renderedStatus) return; |
- _statusElt.text = newStatus; |
- _renderedStatus = newStatus; |
- } |
- |
- void _renderEnv(pb.Report r) { |
- String newPlatform = r.env.platform.toString(); |
- if (newPlatform == _renderedPlatform) return; |
- _envElt.text = newPlatform; |
- _renderedPlatform = newPlatform; |
- } |
- |
- void _renderResponses(pb.Report r) { |
- var it = r.responses.iterator; |
- |
- // Update existing rows |
- for (var row in rows) { |
- var hasNext = it.moveNext(); |
- assert(hasNext); // assume that the table only grows |
- row.render(it.current); |
- } |
- |
- // Add any new rows |
- while (it.moveNext()) { |
- var row = new _ResponseView()..render(it.current); |
- _responseTable.append(row.elt); |
- rows.add(row); |
- } |
- } |
-} |
- |
-class _ResponseView { |
- final TableRowElement elt = new TableRowElement(); |
- pb.Response _rendered; |
- |
- void render(pb.Response response) { |
- if (_rendered == response) return; |
- |
- elt.children.clear(); |
- elt.append(_textCell(response.request.id.name)); |
- elt.append(_textCell(response.request.params.toString())); |
- |
- for (var s in response.samples) { |
- double kIntsPerSecond = s.counts.int32Reads * 1000 / s.duration; |
- var cell = _textCell(kIntsPerSecond.toStringAsFixed(1)) |
- ..style.textAlign = "right"; |
- elt.append(cell); |
- } |
- } |
-} |
- |
-class _JsonView { |
- final DivElement elt = new DivElement(); |
- String _rendered; |
- |
- void render(pb.Report r) { |
- // Don't show JSON while benchmarks are in progress. |
- String json = ""; |
- if (r.status == pb.Status.DONE) { |
- json = encodeReport(r); |
- } |
- |
- if (json == _rendered) return; |
- |
- elt.children.clear(); |
- if (json == "") return; |
- elt.children.addAll([ |
- new HeadingElement.h2()..text = "Report data as JSON:", |
- new PreElement()..text = json |
- ]); |
- _rendered = json; |
- } |
-} |
- |
-_headerCell(String columnName) => new Element.th() |
- ..style.textAlign = "left" |
- ..text = columnName; |
- |
-_textCell(String value) => new TableCellElement()..text = value.toString(); |