[dart2js] Ensure Dart2JS only reports relevant metrics.

Prior to this change the metrics modified here are all printed during every run of the compiler, even when the compiler is running in phase mode on a phase that cannot modify these metrics.

This will make collection of these metrics easier and ensure the collected data is cleaner.

Change-Id: I62a081d9dbae71256882f24156faf246f4076e61
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/297440
Commit-Queue: Nate Biggs <natebiggs@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
This commit is contained in:
Nate Biggs 2023-04-26 17:36:51 +00:00 committed by Commit Queue
parent 233a7298e0
commit 4bbdc97d1c
5 changed files with 19 additions and 12 deletions

View file

@ -344,8 +344,11 @@ class DeferredLoadTask extends CompilerTask {
final KernelToElementMap _elementMap;
_DeferredLoadTaskMetrics? _deferredLoadMetrics;
_DeferredLoadTaskMetrics get deferredLoadMetrics =>
_deferredLoadMetrics ??= _DeferredLoadTaskMetrics();
@override
final _DeferredLoadTaskMetrics metrics = _DeferredLoadTaskMetrics();
Metrics get metrics => _deferredLoadMetrics ?? Metrics.none();
bool get disableProgramSplit => compiler.options.disableProgramSplit;
@ -379,7 +382,7 @@ class DeferredLoadTask extends CompilerTask {
counter++;
importSet.unit = unit;
_allOutputUnits.add(unit);
metrics.outputUnitElements.add(1);
deferredLoadMetrics.outputUnitElements.add(1);
}
// Generate an output unit for all import sets that are associated with an
@ -429,7 +432,7 @@ class DeferredLoadTask extends CompilerTask {
///
/// See the top-level library comment for details.
OutputUnitData run(FunctionEntity main, KClosedWorld closedWorld) {
return metrics.time.measure(() => _run(main, closedWorld));
return deferredLoadMetrics.time.measure(() => _run(main, closedWorld));
}
OutputUnitData _run(FunctionEntity main, KClosedWorld closedWorld) {

View file

@ -50,8 +50,10 @@ class CodeEmitterTask extends CompilerTask {
/// See [neededClasses] but for class types.
late final Set<ClassEntity> neededClassTypes;
_EmitterMetrics? _emitterMetrics;
_EmitterMetrics get emitterMetrics => _emitterMetrics ??= _EmitterMetrics();
@override
final _EmitterMetrics metrics = _EmitterMetrics();
Metrics get metrics => _emitterMetrics ?? Metrics.none();
CodeEmitterTask(this._compiler, this._generateSourceMap)
: super(_compiler.measurer);

View file

@ -193,7 +193,7 @@ class EmitterImpl extends ModularEmitterBase implements Emitter {
finalizedFragmentsToLoad = _emitter.finalizedFragmentsToLoad;
fragmentMerger = _emitter.fragmentMerger;
finalizedFragmentsToLoad.values.forEach((fragments) {
_task.metrics.hunkListElements.add(fragments.length);
_task.emitterMetrics.hunkListElements.add(fragments.length);
});
if (retainDataForTesting) {
preDeferredFragmentsForTesting =

View file

@ -54,7 +54,8 @@ abstract class CodegenPhase {
class SsaCodeGeneratorTask extends CompilerTask {
final CompilerOptions _options;
final SourceInformationStrategy sourceInformationStrategy;
final _CodegenMetrics _metrics = _CodegenMetrics();
_CodegenMetrics? _codegenMetrics;
_CodegenMetrics get codegenMetrics => _codegenMetrics ??= _CodegenMetrics();
SsaCodeGeneratorTask(
Measurer super.measurer, this._options, this.sourceInformationStrategy);
@ -63,7 +64,7 @@ class SsaCodeGeneratorTask extends CompilerTask {
String get name => 'SSA code generator';
@override
Metrics get metrics => _metrics;
Metrics get metrics => _codegenMetrics ?? Metrics.none();
js.Fun buildJavaScriptFunction(bool needsAsyncRewrite, FunctionEntity element,
List<js.Parameter> parameters, js.Block body) {
@ -124,7 +125,7 @@ class SsaCodeGeneratorTask extends CompilerTask {
SsaCodeGenerator codeGenerator = SsaCodeGenerator(
this,
_options,
_metrics,
codegenMetrics,
emitter,
codegen.rtiSubstitutions,
codegen.rtiRecipeEncoder,
@ -154,7 +155,7 @@ class SsaCodeGeneratorTask extends CompilerTask {
SsaCodeGenerator codeGenerator = SsaCodeGenerator(
this,
_options,
_metrics,
codegenMetrics,
emitter,
codegen.rtiSubstitutions,
codegen.rtiRecipeEncoder,

View file

@ -321,13 +321,13 @@ class SsaBuilderTask extends CompilerTask {
final SourceInformationStrategy _sourceInformationFactory;
late SsaBuilder _builder;
final SsaMetrics _metrics;
final SsaMetrics _ssaMetrics;
@override
Metrics get metrics => _metrics;
Metrics metrics = Metrics.none();
SsaBuilderTask(super.measurer, this._backendStrategy,
this._sourceInformationFactory, this._metrics);
this._sourceInformationFactory, this._ssaMetrics);
@override
String get name => 'SSA builder';
@ -335,6 +335,7 @@ class SsaBuilderTask extends CompilerTask {
void onCodegenStart() {
_builder =
_backendStrategy.createSsaBuilder(this, _sourceInformationFactory);
metrics = _ssaMetrics;
}
/// Creates the [HGraph] for [member] or returns `null` if no code is needed