From 62e6348453e0418429f8bd1665801780787a7af8 Mon Sep 17 00:00:00 2001 From: "devin-ai-integration[bot]" <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sun, 15 Jun 2025 03:00:24 +1000 Subject: [PATCH] Optimize config.ini updates and efficiency improvements report (#436) * Optimize config.ini updates by batching shell executions - Reduce up to 5 separate shell executions to 1 for AVD configuration - Improves performance by eliminating redundant process spawns - Add comprehensive efficiency report documenting all identified improvements - All existing tests pass, no functional changes Co-Authored-By: Yang * Add compiled JS files and remove standalone efficiency report - Include built lib/emulator-manager.js with batched config optimization - Remove EFFICIENCY_REPORT.md as requested - Efficiency report content will be moved to PR description Co-Authored-By: Yang --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Yang --- lib/emulator-manager.js | 35 +++++++++++++++++++++-------------- src/emulator-manager.ts | 37 +++++++++++++++++++++---------------- 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/lib/emulator-manager.js b/lib/emulator-manager.js index 56a6d119..ab84717f 100644 --- a/lib/emulator-manager.js +++ b/lib/emulator-manager.js @@ -50,20 +50,27 @@ function launchEmulator(systemImageApiLevel, target, arch, profile, cores, ramSi console.log(`Creating AVD.`); yield exec.exec(`sh -c \\"echo no | avdmanager create avd --force -n "${avdName}" --abi '${target}/${arch}' --package 'system-images;android-${systemImageApiLevel};${target};${arch}' ${profileOption} ${sdcardPathOrSizeOption}"`); } - if (cores) { - yield exec.exec(`sh -c \\"printf 'hw.cpu.ncore=${cores}\n' >> ${process.env.ANDROID_AVD_HOME}/"${avdName}".avd"/config.ini`); - } - if (ramSize) { - yield exec.exec(`sh -c \\"printf 'hw.ramSize=${ramSize}\n' >> ${process.env.ANDROID_AVD_HOME}/"${avdName}".avd"/config.ini`); - } - if (heapSize) { - yield exec.exec(`sh -c \\"printf 'hw.heapSize=${heapSize}\n' >> ${process.env.ANDROID_AVD_HOME}/"${avdName}".avd"/config.ini`); - } - if (enableHardwareKeyboard) { - yield exec.exec(`sh -c \\"printf 'hw.keyboard=yes\n' >> ${process.env.ANDROID_AVD_HOME}/"${avdName}".avd"/config.ini`); - } - if (diskSize) { - yield exec.exec(`sh -c \\"printf 'disk.dataPartition.size=${diskSize}\n' >> ${process.env.ANDROID_AVD_HOME}/"${avdName}".avd"/config.ini`); + if (cores || ramSize || heapSize || enableHardwareKeyboard || diskSize) { + const configEntries = []; + if (cores) { + configEntries.push(`hw.cpu.ncore=${cores}`); + } + if (ramSize) { + configEntries.push(`hw.ramSize=${ramSize}`); + } + if (heapSize) { + configEntries.push(`hw.heapSize=${heapSize}`); + } + if (enableHardwareKeyboard) { + configEntries.push('hw.keyboard=yes'); + } + if (diskSize) { + configEntries.push(`disk.dataPartition.size=${diskSize}`); + } + if (configEntries.length > 0) { + const configContent = configEntries.join('\\n') + '\\n'; + yield exec.exec(`sh -c \\"printf '${configContent}' >> ${process.env.ANDROID_AVD_HOME}/"${avdName}".avd"/config.ini"`); + } } // turn off hardware acceleration on Linux if (process.platform === 'linux' && disableLinuxHardwareAcceleration) { diff --git a/src/emulator-manager.ts b/src/emulator-manager.ts index 14684ded..44633319 100644 --- a/src/emulator-manager.ts +++ b/src/emulator-manager.ts @@ -37,24 +37,29 @@ export async function launchEmulator( ); } - if (cores) { - await exec.exec(`sh -c \\"printf 'hw.cpu.ncore=${cores}\n' >> ${process.env.ANDROID_AVD_HOME}/"${avdName}".avd"/config.ini`); - } + if (cores || ramSize || heapSize || enableHardwareKeyboard || diskSize) { + const configEntries: string[] = []; - if (ramSize) { - await exec.exec(`sh -c \\"printf 'hw.ramSize=${ramSize}\n' >> ${process.env.ANDROID_AVD_HOME}/"${avdName}".avd"/config.ini`); - } + if (cores) { + configEntries.push(`hw.cpu.ncore=${cores}`); + } + if (ramSize) { + configEntries.push(`hw.ramSize=${ramSize}`); + } + if (heapSize) { + configEntries.push(`hw.heapSize=${heapSize}`); + } + if (enableHardwareKeyboard) { + configEntries.push('hw.keyboard=yes'); + } + if (diskSize) { + configEntries.push(`disk.dataPartition.size=${diskSize}`); + } - if (heapSize) { - await exec.exec(`sh -c \\"printf 'hw.heapSize=${heapSize}\n' >> ${process.env.ANDROID_AVD_HOME}/"${avdName}".avd"/config.ini`); - } - - if (enableHardwareKeyboard) { - await exec.exec(`sh -c \\"printf 'hw.keyboard=yes\n' >> ${process.env.ANDROID_AVD_HOME}/"${avdName}".avd"/config.ini`); - } - - if (diskSize) { - await exec.exec(`sh -c \\"printf 'disk.dataPartition.size=${diskSize}\n' >> ${process.env.ANDROID_AVD_HOME}/"${avdName}".avd"/config.ini`); + if (configEntries.length > 0) { + const configContent = configEntries.join('\\n') + '\\n'; + await exec.exec(`sh -c \\"printf '${configContent}' >> ${process.env.ANDROID_AVD_HOME}/"${avdName}".avd"/config.ini"`); + } } // turn off hardware acceleration on Linux