Skip to content

Commit 97dab4f

Browse files
parloughCommit Queue
authored andcommitted
[dart2js] Avoid N/A memory usage with dart compile js
dart compile js seems to run dart2js in product mode, so the developer service is unavailable. Instead of always outputting "N/A", instead don't include memory usage in the output when it can't be determined. Fixes #56074 Change-Id: I3eea98a20b717c75abb56a48b3fe2a923ed3ecf1 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/424320 Reviewed-by: Sigmund Cherem <[email protected]> Commit-Queue: Nate Biggs <[email protected]> Reviewed-by: Nate Biggs <[email protected]>
1 parent a757d2a commit 97dab4f

File tree

3 files changed

+28
-14
lines changed

3 files changed

+28
-14
lines changed

pkg/compiler/lib/src/common/ram_usage.dart

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,31 @@ Future<int?> _currentHeapCapacity() async {
2525
enable: true,
2626
silenceOutput: true,
2727
);
28-
final observatoryUri = info.serverUri;
29-
if (observatoryUri == null) return null;
30-
final wsUri = 'ws://${observatoryUri.authority}${observatoryUri.path}ws';
31-
final vmService = await vm_service_io.vmServiceConnectUri(wsUri);
32-
int sum = 0;
33-
for (final group in (await vmService.getVM()).isolateGroups!) {
28+
final vmServiceWsUri = info.serverWebSocketUri?.toString();
29+
if (vmServiceWsUri == null) return null;
30+
31+
final vmService = await vm_service_io.vmServiceConnectUri(vmServiceWsUri);
32+
final vm = await vmService.getVM();
33+
34+
final nonSystemIsolateGroups = vm.isolateGroups;
35+
final relevantSystemIsolateGroups = vm.systemIsolateGroups?.where(
36+
(group) => group.name?.contains('dart2js') ?? false,
37+
);
38+
39+
var relevantMemoryUsage = 0;
40+
for (final group in [
41+
...?nonSystemIsolateGroups,
42+
...?relevantSystemIsolateGroups,
43+
]) {
3444
final usage = await vmService.getIsolateGroupMemoryUsage(group.id!);
35-
sum += usage.heapCapacity!;
45+
relevantMemoryUsage += usage.heapCapacity ?? 0;
3646
}
3747
vmService.dispose();
38-
return sum;
48+
return relevantMemoryUsage;
3949
}
4050

41-
Future<String> currentHeapCapacityInMb() async {
51+
Future<String?> currentHeapCapacityInMb() async {
4252
final capacity = await _currentHeapCapacity();
43-
if (capacity == null) return "N/A MB";
53+
if (capacity == null || capacity == 0) return null;
4454
return "${(capacity / (1024 * 1024)).toStringAsFixed(3)} MB";
4555
}

pkg/compiler/lib/src/dart2js.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -925,12 +925,16 @@ Future<api.CompilationResult> compile(
925925
break;
926926
}
927927

928+
final memoryUsed = await currentHeapCapacityInMb();
929+
final memoryUsedString = memoryUsed != null
930+
? ' using $memoryUsed of memory'
931+
: '';
932+
928933
print(
929934
'$processName '
930935
'${_formatCharacterCount(inputSize)} $inputName to '
931936
'${_formatCharacterCount(outputSize)} $outputName in '
932-
'${_formatDurationAsSeconds(wallclock.elapsed)} seconds using '
933-
'${await currentHeapCapacityInMb()} of memory',
937+
'${_formatDurationAsSeconds(wallclock.elapsed)} seconds$memoryUsedString',
934938
);
935939
if (primaryOutputSize != null && out != null) {
936940
diagnostic.info(

pkg/compiler/lib/src/dump_info.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1891,7 +1891,7 @@ class DumpInfoTask extends CompilerTask implements InfoReporter {
18911891
.mainFunction]
18921892
as FunctionInfo,
18931893
size: _dumpInfoData.programSize,
1894-
ramUsage: await currentHeapCapacityInMb(),
1894+
ramUsage: await currentHeapCapacityInMb() ?? 'N/A MB',
18951895
dart2jsVersion: options.hasBuildId ? options.buildId : null,
18961896
compilationMoment: DateTime.now(),
18971897
compilationDuration: measurer.elapsedWallClock,
@@ -1975,7 +1975,7 @@ class DumpInfoTask extends CompilerTask implements InfoReporter {
19751975
.mainFunction]
19761976
as FunctionInfo,
19771977
size: _dumpInfoData.programSize,
1978-
ramUsage: await currentHeapCapacityInMb(),
1978+
ramUsage: await currentHeapCapacityInMb() ?? 'N/A MB',
19791979
dart2jsVersion: options.hasBuildId ? options.buildId : null,
19801980
compilationMoment: DateTime.now(),
19811981
compilationDuration: measurer.elapsedWallClock,

0 commit comments

Comments
 (0)