From 7cef8286f94fcd4a1f2c1e02e9be062f117949dd Mon Sep 17 00:00:00 2001 From: Sanjaiyan Parthipan Date: Mon, 17 Jul 2023 04:43:14 -0700 Subject: [PATCH] Concurrent Function Upgrade for Enhanced Performance (#4918) Summary: Republishing sanjaiyan-dev's PR https://github.com/facebook/flipper/pull/4889 running `git rebase` because of a conflict. Pull Request resolved: https://github.com/facebook/flipper/pull/4918 Reviewed By: lblasa Differential Revision: D47294545 Pulled By: passy fbshipit-source-id: 74904ec6179ed5a3bab6f9b701c3cd769ecad3bf --- desktop/app/src/electron/initializeElectron.tsx | 6 ++++-- desktop/app/src/init.tsx | 12 +++++++++--- desktop/flipper-dump/src/index.tsx | 8 ++++++-- .../flipper-server-core/src/FlipperServerImpl.tsx | 6 ++++-- .../certificate-exchange/certificate-utils.tsx | 11 ++++++++--- .../src/server/startFlipperServer.tsx | 9 +++++++-- desktop/pkg/src/utils/runLint.tsx | 8 ++++---- desktop/scripts/build-flipper-server-release.tsx | 8 +++++--- desktop/scripts/build-utils.tsx | 3 +-- desktop/scripts/workspaces.tsx | 9 ++++++--- 10 files changed, 54 insertions(+), 26 deletions(-) diff --git a/desktop/app/src/electron/initializeElectron.tsx b/desktop/app/src/electron/initializeElectron.tsx index 8482bf5ae..55974125b 100644 --- a/desktop/app/src/electron/initializeElectron.tsx +++ b/desktop/app/src/electron/initializeElectron.tsx @@ -29,8 +29,10 @@ export async function initializeElectron( flipperServerConfig: FlipperServerConfig, electronIpcClient: ElectronIpcClientRenderer, ) { - const electronProcess = await electronIpcClient.send('getProcess'); - const electronTheme = await electronIpcClient.send('getNativeTheme'); + const [electronProcess, electronTheme] = await Promise.all([ + electronIpcClient.send('getProcess'), + electronIpcClient.send('getNativeTheme'), + ]); const execPath = process.execPath || electronProcess.execPath; const isProduction = !/node_modules[\\/]electron[\\/]/.test(execPath); diff --git a/desktop/app/src/init.tsx b/desktop/app/src/init.tsx index 368256828..1bb6f7c37 100644 --- a/desktop/app/src/init.tsx +++ b/desktop/app/src/init.tsx @@ -167,6 +167,12 @@ async function getFlipperServer( await shutdown(UDSconnectionURL); } + const [homePath, tempPath, desktopPath] = await Promise.all([ + electronIpcClient.send('getPath', 'home'), + electronIpcClient.send('getPath', 'temp'), + electronIpcClient.send('getPath', 'desktop'), + ]); + const getEmbeddedServer = async () => { const server = new FlipperServerImpl( { @@ -175,11 +181,11 @@ async function getFlipperServer( gatekeepers: gatekeepers, paths: { appPath, - homePath: await electronIpcClient.send('getPath', 'home'), + homePath, execPath, staticPath, - tempPath: await electronIpcClient.send('getPath', 'temp'), - desktopPath: await electronIpcClient.send('getPath', 'desktop'), + tempPath, + desktopPath, }, launcherSettings: await loadLauncherSettings(), processConfig: loadProcessConfig(env), diff --git a/desktop/flipper-dump/src/index.tsx b/desktop/flipper-dump/src/index.tsx index 4b9738293..47fc82852 100644 --- a/desktop/flipper-dump/src/index.tsx +++ b/desktop/flipper-dump/src/index.tsx @@ -88,6 +88,10 @@ async function start(deviceQuery: string, appName: string, pluginId: string) { const environmentInfo = await getEnvironmentInfo(staticPath, false, true); // TODO: initialise FB user manager to be able to do certificate exchange + const [launcherSettings, settings] = await Promise.all([ + loadLauncherSettings(argv.launcherSettings), + loadSettings(argv.settingsString), + ]); const server = new FlipperServerImpl( { environmentInfo, @@ -101,9 +105,9 @@ async function start(deviceQuery: string, appName: string, pluginId: string) { execPath: process.execPath, desktopPath: `/dev/null`, }, - launcherSettings: await loadLauncherSettings(argv.launcherSettings), + launcherSettings, processConfig: loadProcessConfig(process.env), - settings: await loadSettings(argv.settingsString), + settings, validWebSocketOrigins: [], }, logger, diff --git a/desktop/flipper-server-core/src/FlipperServerImpl.tsx b/desktop/flipper-server-core/src/FlipperServerImpl.tsx index bf657b6e0..7a2a7f455 100644 --- a/desktop/flipper-server-core/src/FlipperServerImpl.tsx +++ b/desktop/flipper-server-core/src/FlipperServerImpl.tsx @@ -210,8 +210,10 @@ export class FlipperServerImpl implements FlipperServer { } private async createFolders() { - await mkdirp(flipperDataFolder); - await mkdirp(flipperSettingsFolder); + await Promise.all([ + mkdirp(flipperDataFolder), + mkdirp(flipperSettingsFolder), + ]); } async startDeviceListeners() { diff --git a/desktop/flipper-server-core/src/app-connectivity/certificate-exchange/certificate-utils.tsx b/desktop/flipper-server-core/src/app-connectivity/certificate-exchange/certificate-utils.tsx index b02bd9b14..185d3c948 100644 --- a/desktop/flipper-server-core/src/app-connectivity/certificate-exchange/certificate-utils.tsx +++ b/desktop/flipper-server-core/src/app-connectivity/certificate-exchange/certificate-utils.tsx @@ -82,10 +82,15 @@ export const loadSecureServerConfig = async (): Promise => { await ensureOpenSSLIsAvailable(); await certificateSetup(); await generateAuthToken(); + const [key, cert, ca] = await Promise.all([ + fs.readFile(serverKey), + fs.readFile(serverCert), + fs.readFile(caCert), + ]); serverConfig = { - key: await fs.readFile(serverKey), - cert: await fs.readFile(serverCert), - ca: await fs.readFile(caCert), + key, + cert, + ca, requestCert: true, rejectUnauthorized: true, // can be false if necessary as we don't strictly need to verify the client }; diff --git a/desktop/flipper-server-core/src/server/startFlipperServer.tsx b/desktop/flipper-server-core/src/server/startFlipperServer.tsx index 989989579..fc12b6e78 100644 --- a/desktop/flipper-server-core/src/server/startFlipperServer.tsx +++ b/desktop/flipper-server-core/src/server/startFlipperServer.tsx @@ -51,6 +51,11 @@ export async function startFlipperServer( console.warn('Failed to find desktop path, falling back to homedir'); desktopPath = os.homedir(); } + + const [launcherSettings, settings] = await Promise.all([ + loadLauncherSettings(enableLauncherSettings), + loadSettings(settingsString), + ]); return new FlipperServerImpl( { environmentInfo, @@ -64,9 +69,9 @@ export async function startFlipperServer( tempPath: os.tmpdir(), desktopPath: desktopPath, }, - launcherSettings: await loadLauncherSettings(enableLauncherSettings), + launcherSettings, processConfig: loadProcessConfig(env), - settings: await loadSettings(settingsString), + settings, validWebSocketOrigins: ['localhost:', 'http://localhost:'], type, }, diff --git a/desktop/pkg/src/utils/runLint.tsx b/desktop/pkg/src/utils/runLint.tsx index 828eaa626..7f566dda8 100644 --- a/desktop/pkg/src/utils/runLint.tsx +++ b/desktop/pkg/src/utils/runLint.tsx @@ -58,10 +58,10 @@ export default async function runLint( ]; } - const packageJsonSchema = await fs.readJson(packageJsonSchemaPath); - const pluginPackageJsonSchema = await fs.readJson( - pluginPackageJsonSchemaPath, - ); + const [packageJsonSchema, pluginPackageJsonSchema] = await Promise.all([ + fs.readJson(packageJsonSchemaPath), + fs.readJson(pluginPackageJsonSchemaPath), + ]); const ajv = new Ajv({ allErrors: true, loadSchema, diff --git a/desktop/scripts/build-flipper-server-release.tsx b/desktop/scripts/build-flipper-server-release.tsx index fa56420b3..ebacc8153 100644 --- a/desktop/scripts/build-flipper-server-release.tsx +++ b/desktop/scripts/build-flipper-server-release.tsx @@ -456,9 +456,11 @@ async function buildServerRelease() { platforms.push(BuildPlatform.WINDOWS); } - for (const platform of platforms) { - await bundleServerReleaseForPlatform(dir, versionNumber, platform); - } + await Promise.all( + platforms.map((platform) => + bundleServerReleaseForPlatform(dir, versionNumber, platform), + ), + ); } function nodeArchFromBuildPlatform(platform: BuildPlatform): string { diff --git a/desktop/scripts/build-utils.tsx b/desktop/scripts/build-utils.tsx index 685a1b852..44975e0cf 100644 --- a/desktop/scripts/build-utils.tsx +++ b/desktop/scripts/build-utils.tsx @@ -168,8 +168,7 @@ export async function moveSourceMaps( // If we don't move them out of the build folders, they'll get included in the ASAR // which we don't want. console.log(`⏭ Removing source maps.`); - await fs.remove(mainBundleMap); - await fs.remove(rendererBundleMap); + await Promise.all([fs.remove(mainBundleMap), fs.remove(rendererBundleMap)]); } } diff --git a/desktop/scripts/workspaces.tsx b/desktop/scripts/workspaces.tsx index ae6de8701..7faf5b6cb 100644 --- a/desktop/scripts/workspaces.tsx +++ b/desktop/scripts/workspaces.tsx @@ -69,9 +69,12 @@ async function getWorkspacesByRoot( } export async function getWorkspaces(): Promise { - const rootWorkspaces = await getWorkspacesByRoot(rootDir); - const publicPluginsWorkspaces = await getWorkspacesByRoot(publicPluginsDir); - const fbPluginsWorkspaces = await getWorkspacesByRoot(fbPluginsDir); + const [rootWorkspaces, publicPluginsWorkspaces, fbPluginsWorkspaces] = + await Promise.all([ + getWorkspacesByRoot(rootDir), + getWorkspacesByRoot(publicPluginsDir), + getWorkspacesByRoot(fbPluginsDir), + ]); const mergedWorkspaces: Workspaces = { rootPackage: rootWorkspaces!.rootPackage, packages: [