Revert "[dart2js] Simplify event log initialization logic in each part file prologue."

This reverts commit 7b2d5baa48.

Reason for revert: breaks ~600 tests in G3 (though it looks to be just one JS file that got broken), b/287219647

Original change's description:
> [dart2js] Simplify event log initialization logic in each part file prologue.
>
> Change-Id: I0731b78f5b0437f5e5026ee6d9f2511698968804
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/308201
> Commit-Queue: Nate Biggs <natebiggs@google.com>
> Reviewed-by: Sigmund Cherem <sigmund@google.com>

Change-Id: Iedd1b0a4909f490bc54eebde3462e6bd57c3c1a9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/309283
Reviewed-by: Alexander Thomas <athom@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Nate Biggs <natebiggs@google.com>
Commit-Queue: Ilya Yanok <yanok@google.com>
This commit is contained in:
Ilya Yanok 2023-06-14 15:53:07 +00:00 committed by Commit Queue
parent 396ed71267
commit 042952ef9b
3 changed files with 43 additions and 27 deletions

View file

@ -377,17 +377,20 @@ class ModelEmitter {
return js.Comment(generatedBy(_options, flavor: '$flavor'));
}
js.Statement buildDeferredInitializerGlobal(js.LiteralString partFileName,
{js.Expression? code}) {
return js.js.statement(
'((s,d) => {s[d] = s[d] || {#eventLog: []}; '
's[d].#eventLog.push({part:#part,event:"beginLoadPart"});})'
'(self,#deferredInitializers)',
{
'deferredInitializers': js.string(deferredInitializersGlobal),
'eventLog': js.string(INITIALIZATION_EVENT_LOG),
'part': partFileName,
});
List<js.Statement> buildDeferredInitializerGlobal() {
return [
js.js.statement(
'self.#deferredInitializers = '
'self.#deferredInitializers || Object.create(null);',
{'deferredInitializers': deferredInitializersGlobal}),
js.js.statement(
'self.#deferredInitializers.#eventLog = '
'self.#deferredInitializers.#eventLog || [];',
{
'deferredInitializers': deferredInitializersGlobal,
'eventLog': INITIALIZATION_EVENT_LOG
})
];
}
js.Statement buildStartupMetrics() {
@ -438,7 +441,7 @@ var ${startupMetricsGlobal} =
js.Program program = js.Program([
buildGeneratedBy(),
js.Comment(HOOKS_API_USAGE),
if (isSplit) buildDeferredInitializerGlobal(js.string('main')),
if (isSplit) ...buildDeferredInitializerGlobal(),
if (_closedWorld.backendUsage.requiresStartupMetrics)
buildStartupMetrics(),
code
@ -580,7 +583,15 @@ var ${startupMetricsGlobal} =
final outputFileJsString = js.string(outputFileName);
js.Program program = js.Program([
if (isFirst) buildGeneratedBy(),
if (isFirst) buildDeferredInitializerGlobal(outputFileJsString),
if (isFirst) ...buildDeferredInitializerGlobal(),
js.js.statement(
'#deferredInitializers.#eventLog.push({"part": '
'#outputFileName, "event": "beginLoadPart"});',
{
'deferredInitializers': deferredInitializersGlobal,
'eventLog': INITIALIZATION_EVENT_LOG,
'outputFileName': outputFileJsString
}),
js.js.statement('#deferredInitializers.current = #code',
{'deferredInitializers': deferredInitializersGlobal, 'code': code})
]);
@ -593,26 +604,31 @@ var ${startupMetricsGlobal} =
annotationMonitor: _resourceInfoCollector.monitorFor(outputFileName));
_task.measureSubtask('emit buffers', () {
output.addBuffer(buffer);
// Add semi-colon to separate from IIFE epilogue.
output.add(';');
});
// Make a unique hash of the code (before the sourcemaps are added)
// This will be used to retrieve the initializing function from the global
// variable.
String hash = hasher.getHash();
final jsStringHash = js.string(hash);
// Now we copy the deferredInitializer.current into its correct hash.
final epilogue = js.js.statement(
'((d,h)=>{d[h]=d.current; '
'd.#eventLog.push({hash:h,event:"endPartLoad",part:#part})})'
'(#deferredInitializers,#hash)',
{
'deferredInitializers': deferredInitializersGlobal,
'hash': js.string(hash),
'eventLog': js.string(INITIALIZATION_EVENT_LOG),
'part': outputFileJsString,
});
final epilogue = js.Program([
js.js.statement(
'#deferredInitializers[#hash] = #deferredInitializers.current', {
'deferredInitializers': deferredInitializersGlobal,
'hash': jsStringHash
}),
js.js.statement(
'#deferredInitializers.#eventLog.push({"part": #outputFileName, '
'"hash": #hash, "event": "endPartLoad"})',
{
'deferredInitializers': deferredInitializersGlobal,
'hash': jsStringHash,
'eventLog': INITIALIZATION_EVENT_LOG,
'outputFileName': outputFileJsString,
})
]);
output.add('\n');
output.add(js
.createCodeBuffer(epilogue, _options,

View file

@ -104,7 +104,7 @@
"id": "outputUnit/1",
"kind": "outputUnit",
"name": "1",
"size": 1230,
"size": 1426,
"filename": "out_1.part.js",
"imports": [
"lib"

View file

@ -110,7 +110,7 @@
"id": "outputUnit/1",
"kind": "outputUnit",
"name": "1",
"size": 952,
"size": 1148,
"filename": "out_1.part.js",
"imports": [
"lib1"