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

Side by Side Diff: frog/leg/scanner/scanner_bench.dart

Issue 9873021: Move frog/leg to lib/compiler/implementation. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 8 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 | « frog/leg/scanner/scanner.dart ('k') | frog/leg/scanner/scanner_implementation.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 // Copyright (c) 2012, 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 #library('scanner_bench');
6 #import('scannerlib.dart');
7 #import('scanner_implementation.dart');
8 #source('source_list.dart');
9
10 /**
11 * A common superclass for scanner benchmarks.
12 */
13 class ScannerBench {
14 void main(List<String> arguments) {
15 for (String argument in arguments) {
16 checkExistence(argument);
17 }
18 tokenizeAll(print, 10, arguments);
19 tokenizeAll((x) {}, 1000, arguments);
20 tokenizeAll(print, 10, arguments);
21 }
22
23 void tokenizeAll(void log(String s), int iterations, List<String> arguments) {
24 VerboseProgressBar bar = new VerboseProgressBar(iterations);
25 bar.begin();
26 for (int i = 0; i < iterations; i++) {
27 bar.tick();
28 Stopwatch timer = new Stopwatch();
29 timer.start();
30 int charCount = 0;
31 for (final String argument in arguments) {
32 charCount += tokenizeOne(argument);
33 }
34 timer.stop();
35 bar.recordScore(charCount / timer.elapsedInMs());
36 log("Tokenized ${arguments.length} files " +
37 "(total size = ${charCount} chars) " +
38 "in ${timer.elapsedInMs()}ms");
39 }
40 bar.end();
41 }
42
43 int tokenizeOne(String filename) {
44 return getBytes(filename, (bytes) {
45 Scanner scanner = makeScanner(bytes);
46 try {
47 printTokens(scanner.tokenize());
48 } catch (MalformedInputException e) {
49 print("${filename}: ${e}");
50 }
51 });
52 }
53
54 void printTokens(Token token) {
55 // TODO(ahe): Turn this into a proper test.
56 return;
57 StringBuffer sb = new StringBuffer();
58 for (; token != null; token = token.next) {
59 if (token.kind < 127) {
60 sb.add(new String.fromCharCodes([token.kind]));
61 } else {
62 sb.add(token.kind);
63 }
64 sb.add(":");
65 sb.add(token);
66 sb.add(" ");
67 }
68 print(sb.toString());
69 }
70
71 abstract int getBytes(String filename, void callback(bytes));
72 abstract Scanner makeScanner(bytes);
73 abstract void checkExistence(String filename);
74 }
75
76 class ProgressBar {
77 static final String hashes = "##############################################";
78 static final String spaces = " ";
79 static final int GEOMEAN_COUNT = 50;
80
81 final String esc;
82 final String up;
83 final String clear;
84 final int total;
85 final List<num> scores;
86 int ticks = 0;
87
88 ProgressBar(int total) : this.escape(total, new String.fromCharCodes([27]));
89
90 ProgressBar.escape(this.total, String esc)
91 : esc = esc, up = "$esc[1A", clear = "$esc[K", scores = new List<num>();
92
93 void begin() {
94 if (total > 10) {
95 print("[$spaces] 0%");
96 print("$up[${hashes.substring(0, ticks * spaces.length ~/ total)}");
97 }
98 }
99
100 void tick() {
101 if (total > 10 && ticks % 5 === 0) {
102 print("$up$clear[$spaces] ${ticks * 100 ~/ total}% ${score()}");
103 print("$up[${hashes.substring(0, ticks * spaces.length ~/ total)}");
104 }
105 ++ticks;
106 }
107
108 void end() {
109 if (total > 10) {
110 print("$up$clear[$hashes] 100% ${score()}");
111 }
112 }
113
114 void recordScore(num score) {
115 scores.addLast(score);
116 }
117
118 int score() {
119 num geoMean = 1;
120 int count = Math.min(scores.length, GEOMEAN_COUNT);
121 for (int i = scores.length - count; i < scores.length; i++) {
122 geoMean *= scores[i];
123 }
124 geoMean = Math.pow(geoMean, 1/Math.max(count, 1));
125 return geoMean.round().toInt();
126 }
127 }
128
129 class VerboseProgressBar {
130 final int total;
131 int ticks = 0;
132
133 VerboseProgressBar(int this.total);
134
135 void begin() {
136 }
137
138 void tick() {
139 ++ticks;
140 }
141
142 void end() {
143 }
144
145 void recordScore(num score) {
146 if (total > 10) {
147 print("$ticks, $score, ${ticks * 100 ~/ total}%");
148 }
149 }
150 }
OLDNEW
« no previous file with comments | « frog/leg/scanner/scanner.dart ('k') | frog/leg/scanner/scanner_implementation.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698