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

Side by Side Diff: pkg/analyzer_cli/lib/src/analyzer_impl.dart

Issue 1524413002: Add --x-perf-report flag to the dartanalyzer command (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: add a test Created 5 years 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
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 library analyzer_cli.src.analyzer_impl; 5 library analyzer_cli.src.analyzer_impl;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import 'dart:io'; 8 import 'dart:io';
9 9
10 import 'package:analyzer/dart/element/element.dart'; 10 import 'package:analyzer/dart/element/element.dart';
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 /// then no error or performance information is printed. If [printMode] is `1` , 115 /// then no error or performance information is printed. If [printMode] is `1` ,
116 /// then both will be printed. If [printMode] is `2`, then only performance 116 /// then both will be printed. If [printMode] is `2`, then only performance
117 /// information will be printed, and it will be marked as being for a cold VM. 117 /// information will be printed, and it will be marked as being for a cold VM.
118 ErrorSeverity analyzeSync({int printMode: 1}) { 118 ErrorSeverity analyzeSync({int printMode: 1}) {
119 setupForAnalysis(); 119 setupForAnalysis();
120 return _analyzeSync(printMode); 120 return _analyzeSync(printMode);
121 } 121 }
122 122
123 /// Fills [errorInfos] using [sources]. 123 /// Fills [errorInfos] using [sources].
124 void prepareErrors() { 124 void prepareErrors() {
125 for (Source source in sources) { 125 return _prepareErrorsTag.makeCurrentWhile(() {
126 context.computeErrors(source); 126 for (Source source in sources) {
127 context.computeErrors(source);
128 errorInfos.add(context.getErrors(source));
129 }
130 });
131 }
127 132
128 errorInfos.add(context.getErrors(source)); 133 static final PerformanceTag _prepareErrorsTag =
129 } 134 new PerformanceTag("AnalyzerImpl.prepareErrors");
130 }
131 135
132 /// Fills [sources]. 136 /// Fills [sources].
133 void prepareSources(LibraryElement library) { 137 void prepareSources(LibraryElement library) {
134 var units = new Set<CompilationUnitElement>(); 138 var units = new Set<CompilationUnitElement>();
135 var libraries = new Set<LibraryElement>(); 139 var libraries = new Set<LibraryElement>();
136 addLibrarySources(library, libraries, units); 140 addLibrarySources(library, libraries, units);
137 } 141 }
138 142
139 /// Setup local fields such as the analysis context for analysis. 143 /// Setup local fields such as the analysis context for analysis.
140 void setupForAnalysis() { 144 void setupForAnalysis() {
141 sources.clear(); 145 sources.clear();
142 errorInfos.clear(); 146 errorInfos.clear();
143 Uri libraryUri = librarySource.uri; 147 Uri libraryUri = librarySource.uri;
144 if (libraryUri.scheme == 'package' && libraryUri.pathSegments.length > 0) { 148 if (libraryUri.scheme == 'package' && libraryUri.pathSegments.length > 0) {
145 _selfPackageName = libraryUri.pathSegments[0]; 149 _selfPackageName = libraryUri.pathSegments[0];
146 } 150 }
147 } 151 }
148 152
149 /// The sync version of analysis. 153 /// The sync version of analysis.
150 ErrorSeverity _analyzeSync(int printMode) { 154 ErrorSeverity _analyzeSync(int printMode) {
151 // Don't try to analyze parts. 155 // Don't try to analyze parts.
152 if (context.computeKindOf(librarySource) == SourceKind.PART) { 156 if (context.computeKindOf(librarySource) == SourceKind.PART) {
153 stderr.writeln("Only libraries can be analyzed."); 157 stderr.writeln("Only libraries can be analyzed.");
154 stderr.writeln( 158 stderr.writeln(
155 "${librarySource.fullName} is a part and can not be analyzed."); 159 "${librarySource.fullName} is a part and can not be analyzed.");
156 return ErrorSeverity.ERROR; 160 return ErrorSeverity.ERROR;
157 } 161 }
158 // Resolve library. 162 var libraryElement = _resolveLibrary();
159 var libraryElement = context.computeLibraryElement(librarySource);
160 // Prepare source and errors.
161 prepareSources(libraryElement); 163 prepareSources(libraryElement);
162 prepareErrors(); 164 prepareErrors();
163 165
164 // Print errors and performance numbers. 166 // Print errors and performance numbers.
165 if (printMode == 1) { 167 if (printMode == 1) {
166 _printErrorsAndPerf(); 168 _printErrors();
167 } else if (printMode == 2) { 169 } else if (printMode == 2) {
168 _printColdPerf(); 170 _printColdPerf();
169 } 171 }
170 172
171 // Compute max severity and set exitCode. 173 // Compute max severity and set exitCode.
172 ErrorSeverity status = maxErrorSeverity; 174 ErrorSeverity status = maxErrorSeverity;
173 if (status == ErrorSeverity.WARNING && options.warningsAreFatal) { 175 if (status == ErrorSeverity.WARNING && options.warningsAreFatal) {
174 status = ErrorSeverity.ERROR; 176 status = ErrorSeverity.ERROR;
175 } 177 }
176 return status; 178 return status;
(...skipping 21 matching lines...) Expand all
198 if (tag != PerformanceTag.UNKNOWN) { 200 if (tag != PerformanceTag.UNKNOWN) {
199 int tagTime = tag.elapsedMs; 201 int tagTime = tag.elapsedMs;
200 outSink.writeln('${tag.label}-cold:$tagTime'); 202 outSink.writeln('${tag.label}-cold:$tagTime');
201 otherTime -= tagTime; 203 otherTime -= tagTime;
202 } 204 }
203 } 205 }
204 outSink.writeln('other-cold:$otherTime'); 206 outSink.writeln('other-cold:$otherTime');
205 outSink.writeln("total-cold:$totalTime"); 207 outSink.writeln("total-cold:$totalTime");
206 } 208 }
207 209
208 _printErrorsAndPerf() { 210 _printErrors() {
209 // The following is a hack. We currently print out to stderr to ensure that 211 // The following is a hack. We currently print out to stderr to ensure that
210 // when in batch mode we print to stderr, this is because the prints from 212 // when in batch mode we print to stderr, this is because the prints from
211 // batch are made to stderr. The reason that options.shouldBatch isn't used 213 // batch are made to stderr. The reason that options.shouldBatch isn't used
212 // is because when the argument flags are constructed in BatchRunner and 214 // is because when the argument flags are constructed in BatchRunner and
213 // passed in from batch mode which removes the batch flag to prevent the 215 // passed in from batch mode which removes the batch flag to prevent the
214 // "cannot have the batch flag and source file" error message. 216 // "cannot have the batch flag and source file" error message.
215 StringSink sink = options.machineFormat ? errorSink : outSink; 217 StringSink sink = options.machineFormat ? errorSink : outSink;
216 218
217 // Print errors. 219 // Print errors.
218 ErrorFormatter formatter = new ErrorFormatter(sink, options, _processError); 220 ErrorFormatter formatter = new ErrorFormatter(sink, options, _processError);
(...skipping 23 matching lines...) Expand all
242 244
243 // Skip TODOs. 245 // Skip TODOs.
244 if (severity == ErrorType.TODO) { 246 if (severity == ErrorType.TODO) {
245 return null; 247 return null;
246 } 248 }
247 } 249 }
248 250
249 return new ProcessedSeverity(severity, isOverridden); 251 return new ProcessedSeverity(severity, isOverridden);
250 } 252 }
251 253
254 LibraryElement _resolveLibrary() {
255 return _resolveLibraryTag.makeCurrentWhile(() {
256 return context.computeLibraryElement(librarySource);
257 });
258 }
259
260 static final PerformanceTag _resolveLibraryTag =
261 new PerformanceTag("AnalyzerImpl._resolveLibrary");
262
252 /// Compute the severity of the error; however: 263 /// Compute the severity of the error; however:
253 /// * if [options.enableTypeChecks] is false, then de-escalate checked-mode 264 /// * if [options.enableTypeChecks] is false, then de-escalate checked-mode
254 /// compile time errors to a severity of [ErrorSeverity.INFO]. 265 /// compile time errors to a severity of [ErrorSeverity.INFO].
255 /// * if [options.hintsAreFatal] is true, escalate hints to errors. 266 /// * if [options.hintsAreFatal] is true, escalate hints to errors.
256 static ErrorSeverity computeSeverity( 267 static ErrorSeverity computeSeverity(
257 AnalysisError error, CommandLineOptions options, 268 AnalysisError error, CommandLineOptions options,
258 [AnalysisContext context]) { 269 [AnalysisContext context]) {
259 if (context != null) { 270 if (context != null) {
260 ErrorProcessor processor = ErrorProcessor.getProcessor(context, error); 271 ErrorProcessor processor = ErrorProcessor.getProcessor(context, error);
261 // If there is a processor for this error, defer to it. 272 // If there is a processor for this error, defer to it.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 } 319 }
309 320
310 @override 321 @override
311 void logInformation(String message, [CaughtException exception]) { 322 void logInformation(String message, [CaughtException exception]) {
312 outSink.writeln(message); 323 outSink.writeln(message);
313 if (exception != null) { 324 if (exception != null) {
314 outSink.writeln(exception); 325 outSink.writeln(exception);
315 } 326 }
316 } 327 }
317 } 328 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer_cli/lib/src/driver.dart » ('j') | pkg/analyzer_cli/lib/src/perf_report.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698