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

Side by Side Diff: pkg/front_end/tool/perf.dart

Issue 2507093003: switch perf tool to use scanner in front_end (Closed)
Patch Set: Created 4 years, 1 month 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 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 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /// An entrypoint used to run portions of front_end and measure its performance. 5 /// An entrypoint used to run portions of front_end and measure its performance.
6 library front_end.tool.perf; 6 library front_end.tool.perf;
7 7
8 import 'dart:async'; 8 import 'dart:async';
9 import 'dart:io' show exit, stderr; 9 import 'dart:io' show exit, stderr;
10 10
11 import 'package:analyzer/dart/ast/ast.dart'; 11 import 'package:analyzer/dart/ast/ast.dart';
12 import 'package:analyzer/dart/ast/token.dart';
13 import 'package:analyzer/error/listener.dart'; 12 import 'package:analyzer/error/listener.dart';
14 import 'package:analyzer/file_system/file_system.dart' show ResourceUriResolver; 13 import 'package:analyzer/file_system/file_system.dart' show ResourceUriResolver;
15 import 'package:analyzer/file_system/physical_file_system.dart' 14 import 'package:analyzer/file_system/physical_file_system.dart'
16 show PhysicalResourceProvider; 15 show PhysicalResourceProvider;
17 import 'package:analyzer/source/package_map_resolver.dart'; 16 import 'package:analyzer/source/package_map_resolver.dart';
18 import 'package:analyzer/src/context/builder.dart'; 17 import 'package:analyzer/src/context/builder.dart';
19 import 'package:analyzer/src/dart/scanner/reader.dart';
20 import 'package:analyzer/src/dart/scanner/scanner.dart';
21 import 'package:analyzer/src/dart/sdk/sdk.dart' show FolderBasedDartSdk; 18 import 'package:analyzer/src/dart/sdk/sdk.dart' show FolderBasedDartSdk;
22 import 'package:analyzer/src/generated/parser.dart'; 19 import 'package:analyzer/src/generated/parser.dart';
23 import 'package:analyzer/src/generated/source.dart'; 20 import 'package:analyzer/src/generated/source.dart';
24 import 'package:analyzer/src/generated/source_io.dart'; 21 import 'package:analyzer/src/generated/source_io.dart';
25 import 'package:kernel/analyzer/loader.dart'; 22 import 'package:kernel/analyzer/loader.dart';
26 import 'package:kernel/kernel.dart'; 23 import 'package:kernel/kernel.dart';
27 import 'package:package_config/discovery.dart'; 24 import 'package:package_config/discovery.dart';
28 25
26 import 'package:front_end/src/scanner/reader.dart';
27 import 'package:front_end/src/scanner/scanner.dart';
28 import 'package:front_end/src/scanner/token.dart';
29
29 /// Cumulative total number of chars scanned. 30 /// Cumulative total number of chars scanned.
30 int scanTotalChars = 0; 31 int scanTotalChars = 0;
31 32
32 /// Cumulative time spent scanning. 33 /// Cumulative time spent scanning.
33 Stopwatch scanTimer = new Stopwatch(); 34 Stopwatch scanTimer = new Stopwatch();
34 35
35 /// Factory to load and resolve app, packages, and sdk sources. 36 /// Factory to load and resolve app, packages, and sdk sources.
36 SourceFactory sources; 37 SourceFactory sources;
37 38
38 main(List<String> args) async { 39 main(List<String> args) async {
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 return parser.parseCompilationUnit(token); 199 return parser.parseCompilationUnit(token);
199 } 200 }
200 201
201 /// Scan [source] and return the first token produced by the scanner. 202 /// Scan [source] and return the first token produced by the scanner.
202 Token tokenize(Source source) { 203 Token tokenize(Source source) {
203 scanTimer.start(); 204 scanTimer.start();
204 var contents = source.contents.data; 205 var contents = source.contents.data;
205 scanTotalChars += contents.length; 206 scanTotalChars += contents.length;
206 // TODO(sigmund): is there a way to scan from a random-access-file without 207 // TODO(sigmund): is there a way to scan from a random-access-file without
207 // first converting to String? 208 // first converting to String?
208 var scanner = new Scanner(source, new CharSequenceReader(contents), 209 var scanner = new _Scanner(contents);
209 AnalysisErrorListener.NULL_LISTENER)..preserveComments = false;
210 var token = scanner.tokenize(); 210 var token = scanner.tokenize();
211 scanTimer.stop(); 211 scanTimer.stop();
212 return token; 212 return token;
213 } 213 }
214 214
215 class _Scanner extends Scanner {
216 _Scanner(String contents) : super(new CharSequenceReader(contents)) {
217 preserveComments = false;
218 }
219
220 @override
221 void reportError(errorCode, int offset, List<Object> arguments) {
222 // ignore errors.
223 }
224 }
225
215 /// Report that metric [name] took [time] micro-seconds to process 226 /// Report that metric [name] took [time] micro-seconds to process
216 /// [scanTotalChars] characters. 227 /// [scanTotalChars] characters.
217 void report(String name, int time) { 228 void report(String name, int time) {
218 var sb = new StringBuffer(); 229 var sb = new StringBuffer();
219 sb.write('$name: $time us, ${time ~/ 1000} ms'); 230 sb.write('$name: $time us, ${time ~/ 1000} ms');
220 sb.write(', ${scanTotalChars * 1000 ~/ time} chars/ms'); 231 sb.write(', ${scanTotalChars * 1000 ~/ time} chars/ms');
221 print('$sb'); 232 print('$sb');
222 } 233 }
223 234
224 // TODO(sigmund): replace this once kernel is produced by the frontend directly. 235 // TODO(sigmund): replace this once kernel is produced by the frontend directly.
(...skipping 11 matching lines...) Expand all
236 const int errorLimit = 100; 247 const int errorLimit = 100;
237 stderr.writeln(errors.take(errorLimit).join('\n')); 248 stderr.writeln(errors.take(errorLimit).join('\n'));
238 if (errors.length > errorLimit) { 249 if (errors.length > errorLimit) {
239 stderr.writeln('[error] ${errors.length - errorLimit} errors not shown'); 250 stderr.writeln('[error] ${errors.length - errorLimit} errors not shown');
240 } 251 }
241 } 252 }
242 dartkTimer.stop(); 253 dartkTimer.stop();
243 report("kernel_gen_e2e", dartkTimer.elapsedMicroseconds); 254 report("kernel_gen_e2e", dartkTimer.elapsedMicroseconds);
244 return program; 255 return program;
245 } 256 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698