[dart2js] Add option to omit memory usage from the dart2js compilation summary.

Internally sometimes this query to get the memory usage will cause timeouts. So provide a way to disable it.

See b/427802111.

Change-Id: I1e6c97d0796b97f42e935e1b20e784796bed1281
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/437660
Reviewed-by: Alexander Thomas <athom@google.com>
Commit-Queue: Ivan Inozemtsev <iinozemtsev@google.com>
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index fbac9d2..a6d8993 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -107,6 +107,7 @@
   static const String verbosity = '--verbosity';
   static const String progress = '--show-internal-progress';
   static const String version = '--version';
+  static const String omitMemorySummary = '--omit-memory-summary';
   static const String reportMetrics = '--report-metrics';
   static const String reportAllMetrics = '--report-all-metrics';
 
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index e4e9e4e..46c6774e 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -537,6 +537,7 @@
     _OneOption('${Flags.verbosity}=.+', passThrough),
     _OneOption(Flags.disableDiagnosticByteCache, passThrough),
     _OneOption(Flags.enableDeferredLoadingEventLog, passThrough),
+    _OneOption(Flags.omitMemorySummary, passThrough),
 
     // Experimental features.
     // We don't provide documentation for these yet.
@@ -925,7 +926,9 @@
         break;
     }
 
-    final memoryUsed = await currentHeapCapacityInMb();
+    final memoryUsed = compilerOptions.omitMemorySummary
+        ? null
+        : await currentHeapCapacityInMb();
     final memoryUsedString = memoryUsed != null
         ? ' using $memoryUsed of memory'
         : '';
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index c8c474b..c3ccb29 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -1883,6 +1883,10 @@
     result.info.deferredFiles = _dumpInfoData.fragmentDeferredMap;
     stopwatch.stop();
 
+    final ramUsage =
+        (options.omitMemorySummary ? null : await currentHeapCapacityInMb()) ??
+        'N/A MB';
+
     result.info.program = ProgramInfo(
       entrypoint:
           infoCollector.state.entityToInfo[closedWorld
@@ -1890,7 +1894,7 @@
                   .mainFunction]
               as FunctionInfo,
       size: _dumpInfoData.programSize,
-      ramUsage: await currentHeapCapacityInMb() ?? 'N/A MB',
+      ramUsage: ramUsage,
       dart2jsVersion: options.hasBuildId ? options.buildId : null,
       compilationMoment: DateTime.now(),
       compilationDuration: measurer.elapsedWallClock,
@@ -1967,6 +1971,10 @@
     result.info.deferredFiles = _dumpInfoData.fragmentDeferredMap;
     stopwatch.stop();
 
+    final ramUsage =
+        (options.omitMemorySummary ? null : await currentHeapCapacityInMb()) ??
+        'N/A MB';
+
     result.info.program = ProgramInfo(
       entrypoint:
           infoCollector.state.entityToInfo[closedWorld
@@ -1974,7 +1982,7 @@
                   .mainFunction]
               as FunctionInfo,
       size: _dumpInfoData.programSize,
-      ramUsage: await currentHeapCapacityInMb() ?? 'N/A MB',
+      ramUsage: ramUsage,
       dart2jsVersion: options.hasBuildId ? options.buildId : null,
       compilationMoment: DateTime.now(),
       compilationDuration: measurer.elapsedWallClock,
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 7ab8759..5b4cfe8 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -621,6 +621,10 @@
   /// during each phase of compilation.
   bool showInternalProgress = false;
 
+  /// Omit memory usage in the summary printed to the console at the end of
+  /// each compilation.
+  bool omitMemorySummary = false;
+
   /// Enable printing of metrics at end of compilation.
   // TODO(sra): Add command-line filtering of metrics.
   bool reportPrimaryMetrics = false;
@@ -948,6 +952,7 @@
       ..useNewSourceInfo = _hasOption(options, Flags.useNewSourceInfo)
       ..useSimpleLoadIds = _hasOption(options, Flags.useSimpleLoadIds)
       ..verbose = _hasOption(options, Flags.verbose)
+      ..omitMemorySummary = _hasOption(options, Flags.omitMemorySummary)
       ..reportPrimaryMetrics = _hasOption(options, Flags.reportMetrics)
       ..reportSecondaryMetrics = _hasOption(options, Flags.reportAllMetrics)
       ..showInternalProgress = _hasOption(options, Flags.progress)
diff --git a/pkg/compiler/test/end_to_end/command_line_test.dart b/pkg/compiler/test/end_to_end/command_line_test.dart
index 85ad4ce..7092dbf 100644
--- a/pkg/compiler/test/end_to_end/command_line_test.dart
+++ b/pkg/compiler/test/end_to_end/command_line_test.dart
@@ -567,6 +567,9 @@
 
     // JS Emitter stage
     await test(['${Flags.stage}=emit-js', 'foo.dart'], exitCode: 1);
+
+    // Omit memory summary.
+    await test(['--omit-memory-summary', 'foo.dart'], out: 'out.js');
   });
 }