about summary refs log tree commit diff
path: root/patches
diff options
context:
space:
mode:
authordan <dan.abramov@gmail.com>2023-11-02 18:48:07 +0000
committerGitHub <noreply@github.com>2023-11-02 18:48:07 +0000
commit0e8723c3bb9566542f009994484b30c3da72ede7 (patch)
tree1f3db7484818d63672da264e78e6cda3aa04d149 /patches
parent237bce391b1cf0708df6b137a418725a4029bb6c (diff)
downloadvoidsky-0e8723c3bb9566542f009994484b30c3da72ede7.tar.zst
Patch facebook/metro#1130 to profile module init (#1796)
Diffstat (limited to 'patches')
-rw-r--r--patches/metro+0.76.8.patch44
-rw-r--r--patches/metro-transform-worker+0.76.8.patch41
2 files changed, 85 insertions, 0 deletions
diff --git a/patches/metro+0.76.8.patch b/patches/metro+0.76.8.patch
new file mode 100644
index 000000000..f8ef67c84
--- /dev/null
+++ b/patches/metro+0.76.8.patch
@@ -0,0 +1,44 @@
+diff --git a/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js b/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js
+index 48a1409..ef185c9 100644
+--- a/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js
++++ b/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js
+@@ -70,14 +70,19 @@ function wrapModule(
+   importDefaultName,
+   importAllName,
+   dependencyMapName,
+-  globalPrefix
++  globalPrefix,
++  moduleFactoryName
+ ) {
+   const params = buildParameters(
+     importDefaultName,
+     importAllName,
+     dependencyMapName
+   );
+-  const factory = functionFromProgram(fileAst.program, params);
++  const factory = functionFromProgram(
++    fileAst.program,
++    params,
++    moduleFactoryName
++  );
+   const def = t.callExpression(t.identifier(`${globalPrefix}__d`), [factory]);
+   const ast = t.file(t.program([t.expressionStatement(def)]));
+   const requireName = renameRequires(ast);
+@@ -107,7 +112,16 @@ function wrapJson(source, globalPrefix) {
+     "});",
+   ].join("\n");
+ }
+-function functionFromProgram(program, parameters) {
++const JS_INVALID_IDENT_RE = /[^a-zA-Z0-9$_]/g;
++function functionFromProgram(program, parameters, moduleFactoryName) {
++  let identifier;
++  if (typeof moduleFactoryName === "string" && moduleFactoryName !== "") {
++    // Keep the name readable so it shows up in profiler traces.
++    // Add an unlikely suffix to avoid collisions with the module code.
++    identifier = t.identifier(
++      `${moduleFactoryName.replace(JS_INVALID_IDENT_RE, "_")}__module_factory__`
++    );
++  }
+   return t.functionExpression(
+     undefined,
+     parameters.map(makeIdentifier),
diff --git a/patches/metro-transform-worker+0.76.8.patch b/patches/metro-transform-worker+0.76.8.patch
new file mode 100644
index 000000000..d835eee06
--- /dev/null
+++ b/patches/metro-transform-worker+0.76.8.patch
@@ -0,0 +1,41 @@
+diff --git a/node_modules/metro-transform-worker/src/index.js b/node_modules/metro-transform-worker/src/index.js
+index 27d4cb3..fd71f47 100644
+--- a/node_modules/metro-transform-worker/src/index.js
++++ b/node_modules/metro-transform-worker/src/index.js
+@@ -190,6 +190,10 @@ async function transformJS(file, { config, options, projectRoot }) {
+   let dependencyMapName = "";
+   let dependencies;
+   let wrappedAst;
++  const minify =
++    options.minify &&
++    options.unstable_transformProfile !== "hermes-canary" &&
++    options.unstable_transformProfile !== "hermes-stable";
+ 
+   // If the module to transform is a script (meaning that is not part of the
+   // dependency graph and it code will just be prepended to the bundle modules),
+@@ -229,19 +233,20 @@ async function transformJS(file, { config, options, projectRoot }) {
+     if (config.unstable_disableModuleWrapping === true) {
+       wrappedAst = ast;
+     } else {
++      let moduleFactoryName;
++      if (options.dev && !minify) {
++        moduleFactoryName = file.filename;
++      }
+       ({ ast: wrappedAst } = JsFileWrapping.wrapModule(
+         ast,
+         importDefault,
+         importAll,
+         dependencyMapName,
+-        config.globalPrefix
++        config.globalPrefix,
++        moduleFactoryName
+       ));
+     }
+   }
+-  const minify =
+-    options.minify &&
+-    options.unstable_transformProfile !== "hermes-canary" &&
+-    options.unstable_transformProfile !== "hermes-stable";
+   const reserved = [];
+   if (config.unstable_dependencyMapReservedName != null) {
+     reserved.push(config.unstable_dependencyMapReservedName);