@@ -28,6 +28,7 @@ import '../js_model/locals.dart';
28
28
import '../options.dart' ;
29
29
import '../util/sink_adapter.dart' ;
30
30
import '../world.dart' ;
31
+ import 'deferrable.dart' ;
31
32
import 'serialization.dart' ;
32
33
33
34
/// A data class holding some data [T] and the associated [DataSourceIndices] .
@@ -340,7 +341,7 @@ class SerializationTask extends CompilerTask {
340
341
sink.writeMemberMap (
341
342
results,
342
343
(MemberEntity member, CodegenResult result) =>
343
- result.writeToDataSink (sink));
344
+ sink. writeDeferrable (() => result.writeToDataSink (sink) ));
344
345
sink.close ();
345
346
});
346
347
}
@@ -353,7 +354,7 @@ class SerializationTask extends CompilerTask {
353
354
bool useDeferredSourceReads) async {
354
355
int shards = _options.codegenShards;
355
356
JClosedWorld closedWorld = globalTypeInferenceResults.closedWorld;
356
- Map <MemberEntity , CodegenResult > results = {};
357
+ Map <MemberEntity , Deferrable < CodegenResult > > results = {};
357
358
for (int shard = 0 ; shard < shards; shard++ ) {
358
359
Uri uri = Uri .parse ('${_options .readCodegenUri }$shard ' );
359
360
await measureIoSubtask ('deserialize codegen' , () async {
@@ -368,7 +369,7 @@ class SerializationTask extends CompilerTask {
368
369
});
369
370
}
370
371
return DeserializedCodegenResults (
371
- globalTypeInferenceResults, codegenInputs, results);
372
+ globalTypeInferenceResults, codegenInputs, DeferrableValueMap ( results) );
372
373
}
373
374
374
375
void _deserializeCodegenInput (
@@ -377,7 +378,7 @@ class SerializationTask extends CompilerTask {
377
378
Uri uri,
378
379
api.Input <List <int >> dataInput,
379
380
DataSourceIndices importedIndices,
380
- Map <MemberEntity , CodegenResult > results,
381
+ Map <MemberEntity , Deferrable < CodegenResult > > results,
381
382
bool useDeferredSourceReads) {
382
383
DataSourceReader source = DataSourceReader (
383
384
BinaryDataSource (dataInput.data, stringInterner: _stringInterner),
@@ -386,17 +387,19 @@ class SerializationTask extends CompilerTask {
386
387
importedIndices: importedIndices,
387
388
useDeferredStrategy: useDeferredSourceReads);
388
389
backendStrategy.prepareCodegenReader (source);
389
- Map <MemberEntity , CodegenResult > codegenResults =
390
+ Map <MemberEntity , Deferrable < CodegenResult > > codegenResults =
390
391
source.readMemberMap ((MemberEntity member) {
391
- List <ModularName > modularNames = [];
392
- List <ModularExpression > modularExpressions = [];
393
- CodegenReader reader =
394
- CodegenReaderImpl (closedWorld, modularNames, modularExpressions);
395
- source.registerCodegenReader (reader);
396
- CodegenResult result = CodegenResult .readFromDataSource (
397
- source, modularNames, modularExpressions);
398
- source.deregisterCodegenReader (reader);
399
- return result;
392
+ return source.readDeferrable (() {
393
+ List <ModularName > modularNames = [];
394
+ List <ModularExpression > modularExpressions = [];
395
+ CodegenReader reader =
396
+ CodegenReaderImpl (closedWorld, modularNames, modularExpressions);
397
+ source.registerCodegenReader (reader);
398
+ CodegenResult result = CodegenResult .readFromDataSource (
399
+ source, modularNames, modularExpressions);
400
+ source.deregisterCodegenReader (reader);
401
+ return result;
402
+ });
400
403
});
401
404
_reporter.log ('Read ${codegenResults .length } members from ${uri }' );
402
405
results.addAll (codegenResults);
0 commit comments