Revert "[dart2js] Defer deserialized CodegenResults by members."
This reverts commit a547cfc0969ea9baca14529670dd553ad810131c.
Reason for revert: With 15 shards this ends up holding too much serialized data and causes an increase in memory usage.
Original change's description:
> [dart2js] Defer deserialized CodegenResults by members.
>
> For large applications only ~60% of these objects are used. This defers their deserializtion until they're accessed in the codegen member map.
>
> In local testing on large applications this saved ~200MB of memory usage in the linker phase.
>
> Change-Id: I8ff87803fc23ef2d3f954646687e3fc67b68a4f7
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/254600
> Commit-Queue: Nate Biggs <natebiggs@google.com>
> Reviewed-by: Joshua Litt <joshualitt@google.com>
# Not skipping CQ checks because original CL landed > 1 day ago.
Change-Id: I51d292531be30b358a025d7c472f25e8aba4dc3c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/255283
Reviewed-by: Stephen Adams <sra@google.com>
Commit-Queue: Nate Biggs <natebiggs@google.com>
Commit-Queue: Stephen Adams <sra@google.com>
diff --git a/pkg/compiler/lib/src/serialization/task.dart b/pkg/compiler/lib/src/serialization/task.dart
index da84cb3..e225449 100644
--- a/pkg/compiler/lib/src/serialization/task.dart
+++ b/pkg/compiler/lib/src/serialization/task.dart
@@ -28,7 +28,6 @@
import '../options.dart';
import '../util/sink_adapter.dart';
import '../world.dart';
-import 'deferrable.dart';
import 'serialization.dart';
/// A data class holding some data [T] and the associated [DataSourceIndices].
@@ -341,7 +340,7 @@
sink.writeMemberMap(
results,
(MemberEntity member, CodegenResult result) =>
- sink.writeDeferrable(() => result.writeToDataSink(sink)));
+ result.writeToDataSink(sink));
sink.close();
});
}
@@ -354,7 +353,7 @@
bool useDeferredSourceReads) async {
int shards = _options.codegenShards;
JClosedWorld closedWorld = globalTypeInferenceResults.closedWorld;
- Map<MemberEntity, Deferrable<CodegenResult>> results = {};
+ Map<MemberEntity, CodegenResult> results = {};
for (int shard = 0; shard < shards; shard++) {
Uri uri = Uri.parse('${_options.readCodegenUri}$shard');
await measureIoSubtask('deserialize codegen', () async {
@@ -369,7 +368,7 @@
});
}
return DeserializedCodegenResults(
- globalTypeInferenceResults, codegenInputs, DeferrableValueMap(results));
+ globalTypeInferenceResults, codegenInputs, results);
}
void _deserializeCodegenInput(
@@ -378,7 +377,7 @@
Uri uri,
api.Input<List<int>> dataInput,
DataSourceIndices importedIndices,
- Map<MemberEntity, Deferrable<CodegenResult>> results,
+ Map<MemberEntity, CodegenResult> results,
bool useDeferredSourceReads) {
DataSourceReader source = DataSourceReader(
BinaryDataSource(dataInput.data, stringInterner: _stringInterner),
@@ -387,19 +386,17 @@
importedIndices: importedIndices,
useDeferredStrategy: useDeferredSourceReads);
backendStrategy.prepareCodegenReader(source);
- Map<MemberEntity, Deferrable<CodegenResult>> codegenResults =
+ Map<MemberEntity, CodegenResult> codegenResults =
source.readMemberMap((MemberEntity member) {
- return source.readDeferrable(() {
- List<ModularName> modularNames = [];
- List<ModularExpression> modularExpressions = [];
- CodegenReader reader =
- CodegenReaderImpl(closedWorld, modularNames, modularExpressions);
- source.registerCodegenReader(reader);
- CodegenResult result = CodegenResult.readFromDataSource(
- source, modularNames, modularExpressions);
- source.deregisterCodegenReader(reader);
- return result;
- });
+ List<ModularName> modularNames = [];
+ List<ModularExpression> modularExpressions = [];
+ CodegenReader reader =
+ CodegenReaderImpl(closedWorld, modularNames, modularExpressions);
+ source.registerCodegenReader(reader);
+ CodegenResult result = CodegenResult.readFromDataSource(
+ source, modularNames, modularExpressions);
+ source.deregisterCodegenReader(reader);
+ return result;
});
_reporter.log('Read ${codegenResults.length} members from ${uri}');
results.addAll(codegenResults);