So there's a first problem, which is we do this for every single langpack: ``` [task 2023-05-17T13:04:09.772Z] 13:04:09 INFO - TEST-UNEXPECTED-FAIL | browser/base/content/test/performance/browser_startup_mainthreadio.js | unexpected stat on C:\Users\task_168432394098143\AppData\Local\Temp\tmpyvbcg1x8.mozrunner\extensions\langpack-xh@firefox.mozilla.org before opening first browser window - [task 2023-05-17T13:04:09.772Z] 13:04:09 INFO - Stack trace: [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - 0x7ffcad362450 [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - get nsIFile.lastModifiedTime [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - getModTime (resource://gre/modules/addons/XPIProvider.jsm:591:12) [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - addFile (resource://gre/modules/addons/XPIProvider.jsm:824:9) [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - scanForChanges (resource://gre/modules/addons/XPIProvider.jsm:1438:16) [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - checkForChanges (resource://gre/modules/addons/XPIProvider.jsm:3043:17) [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - startup (resource://gre/modules/addons/XPIProvider.jsm:2496:9) [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - callProvider (resource://gre/modules/AddonManager.jsm:240:21) [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - _startProvider (resource://gre/modules/AddonManager.jsm:545:16) [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:609:9) [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:3665:9) [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - observe (resource://gre/modules/addonManager.js:72:9) [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - XPCWrappedJS method call [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - XREMain::XRE_main ``` That's not good but at least, on our very-fast-disk infra machines, it's not very slow, "only" 20 or so ms. It's probably a bunch slower on spinny disk user machines, but I don't have data for that right now. The second bit is worse, however, we do [this](https://share.firefox.dev/3BCNf6P) which takes about 300ms on the same very-fast-disk machines: ``` [task 2023-05-17T13:04:09.810Z] 13:04:09 INFO - TEST-UNEXPECTED-FAIL | browser/base/content/test/performance/browser_startup_mainthreadio.js | unexpected stat on C:\Users\task_168432394098143\AppData\Local\Temp\tmpyvbcg1x8.mozrunner\extensions\langpack-ach@firefox.mozilla.org before opening first browser window - [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - Stack trace: [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - 0x7ffcad362450 [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - nsLocalFile::ResolveAndStat [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - nsIFile.moveTo [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - _installFile (resource://gre/modules/addons/XPIInstall.jsm:1106:14) [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - moveUnder (resource://gre/modules/addons/XPIInstall.jsm:1145:11) [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - uninstallAddon (resource://gre/modules/addons/XPIInstall.jsm:3383:16) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - addMetadata (resource://gre/modules/addons/XPIDatabase.jsm:3062:13) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - processFileChanges (resource://gre/modules/addons/XPIDatabase.jsm:3504:20) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - checkForChanges (resource://gre/modules/addons/XPIProvider.jsm:3043:17) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - startup (resource://gre/modules/addons/XPIProvider.jsm:2496:9) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - callProvider (resource://gre/modules/AddonManager.jsm:240:21) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - _startProvider (resource://gre/modules/AddonManager.jsm:545:16) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:609:9) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:3665:9) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - observe (resource://gre/modules/addonManager.js:72:9) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - XPCWrappedJS method call [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - XREMain::XRE_main [task 2023-05-17T13:04:09.813Z] 13:04:09 INFO - (PoisonIOInterposer) stat - C:\Users\task_168432394098143\AppData\Local\Temp\tmpyvbcg1x8.mozrunner\extensions\langpack-ach@firefox.mozilla.org [task 2023-05-17T13:04:09.813Z] 13:04:09 INFO - Not taking screenshot here: see the one that was previously logged [task 2023-05-17T13:04:09.814Z] 13:04:09 INFO - TEST-UNEXPECTED-FAIL | browser/base/content/test/performance/browser_startup_mainthreadio.js | unexpected stat on C:\Users\task_168432394098143\AppData\Local\Temp\tmpyvbcg1x8.mozrunner\extensions\trash before opening first browser window - [task 2023-05-17T13:04:09.814Z] 13:04:09 INFO - Stack trace: [task 2023-05-17T13:04:09.814Z] 13:04:09 INFO - 0x7ffcad362450 [task 2023-05-17T13:04:09.814Z] 13:04:09 INFO - nsLocalFile::ResolveAndStat [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - nsIFile.moveTo [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - _installFile (resource://gre/modules/addons/XPIInstall.jsm:1106:14) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - moveUnder (resource://gre/modules/addons/XPIInstall.jsm:1145:11) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - uninstallAddon (resource://gre/modules/addons/XPIInstall.jsm:3383:16) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - addMetadata (resource://gre/modules/addons/XPIDatabase.jsm:3062:13) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - processFileChanges (resource://gre/modules/addons/XPIDatabase.jsm:3504:20) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - checkForChanges (resource://gre/modules/addons/XPIProvider.jsm:3043:17) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - startup (resource://gre/modules/addons/XPIProvider.jsm:2496:9) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - callProvider (resource://gre/modules/AddonManager.jsm:240:21) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - _startProvider (resource://gre/modules/AddonManager.jsm:545:16) [task 2023-05-17T13:04:09.816Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:609:9) [task 2023-05-17T13:04:09.816Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:3665:9) [task 2023-05-17T13:04:09.816Z] 13:04:09 INFO - observe (resource://gre/modules/addonManager.js:72:9) [task 2023-05-17T13:04:09.816Z] 13:04:09 INFO - XPCWrappedJS method call [task 2023-05-17T13:04:09.816Z] 13:04:09 INFO - XREMain::XRE_main [task 2023-05-17T13:04:09.816Z] 13:04:09 INFO - (PoisonIOInterposer) stat - C:\Users\task_168432394098143\AppData\Local\Temp\tmpyvbcg1x8.mozrunner\extensions\trash [task 2023-05-17T13:04:09.817Z] 13:04:09 INFO - Not taking screenshot here: see the one that was previously logged [task 2023-05-17T13:04:09.818Z] 13:04:09 INFO - TEST-UNEXPECTED-FAIL | browser/base/content/test/performance/browser_startup_mainthreadio.js | unexpected stat on C:\Users\task_168432394098143\AppData\Local\Temp\tmpyvbcg1x8.mozrunner\extensions\trash before opening first browser window - [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - Stack trace: [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - 0x7ffcad362450 [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - set nsIFile.permissions [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - setFilePermissions (resource://gre/modules/addons/XPIInstall.jsm:1046:27) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - recursiveRemove (resource://gre/modules/addons/XPIInstall.jsm:992:24) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - uninstallAddon (resource://gre/modules/addons/XPIInstall.jsm:3383:16) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - addMetadata (resource://gre/modules/addons/XPIDatabase.jsm:3062:13) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - processFileChanges (resource://gre/modules/addons/XPIDatabase.jsm:3504:20) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - checkForChanges (resource://gre/modules/addons/XPIProvider.jsm:3043:17) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - startup (resource://gre/modules/addons/XPIProvider.jsm:2496:9) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - callProvider (resource://gre/modules/AddonManager.jsm:240:21) [task 2023-05-17T13:04:09.820Z] 13:04:09 INFO - _startProvider (resource://gre/modules/AddonManager.jsm:545:16) [task 2023-05-17T13:04:09.820Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:609:9) [task 2023-05-17T13:04:09.820Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:3665:9) [task 2023-05-17T13:04:09.820Z] 13:04:09 INFO - observe (resource://gre/modules/addonManager.js:72:9) [task 2023-05-17T13:04:09.820Z] 13:04:09 INFO - XPCWrappedJS method call [task 2023-05-17T13:04:09.820Z] 13:04:09 INFO - XREMain::XRE_main ``` So we try to move the add-on file to `trash` (after, btw, [checking if trash exists, if so recursively removing it and all its contents, and then recreating it, all also on the main thread](https://searchfox.org/mozilla-central/rev/2ca95198a2a0806de358a0484d96d4354e3cbaab/toolkit/mozapps/extensions/internal/XPIInstall.jsm#3271-3289)), which involves another stat call on the add-on dir, plus 2 of them on the `trash` dir, and presumably the actual IO of moving the file (not captured by the profiler or test). I don't know exactly how msix stuff works so I have a lot of questions like: - why do we need to check the LM time of all these add-ons - why are we uninstalling all these add-ons - does that even work, ie does the user running Firefox normally have permissions to mess with the app dir, where these langpacks live? - what's up with the "trash" dir - do we really need to empty it, synchronously on the main thread? Could we not just pick a unique name and create a separate one for the lifetime of the process, and queue an async off-mainthread idle priority task to clean up the old stuff? I'm hoping Ben or Luca know some of the background here. :-)
Bug 1833831 Comment 0 Edit History
Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.
So there's a first problem, which is we do this for every single langpack: ``` [task 2023-05-17T13:04:09.772Z] 13:04:09 INFO - TEST-UNEXPECTED-FAIL | browser/base/content/test/performance/browser_startup_mainthreadio.js | unexpected stat on C:\Users\task_168432394098143\AppData\Local\Temp\tmpyvbcg1x8.mozrunner\extensions\langpack-xh@firefox.mozilla.org before opening first browser window - [task 2023-05-17T13:04:09.772Z] 13:04:09 INFO - Stack trace: [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - 0x7ffcad362450 [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - get nsIFile.lastModifiedTime [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - getModTime (resource://gre/modules/addons/XPIProvider.jsm:591:12) [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - addFile (resource://gre/modules/addons/XPIProvider.jsm:824:9) [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - scanForChanges (resource://gre/modules/addons/XPIProvider.jsm:1438:16) [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - checkForChanges (resource://gre/modules/addons/XPIProvider.jsm:3043:17) [task 2023-05-17T13:04:09.774Z] 13:04:09 INFO - startup (resource://gre/modules/addons/XPIProvider.jsm:2496:9) [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - callProvider (resource://gre/modules/AddonManager.jsm:240:21) [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - _startProvider (resource://gre/modules/AddonManager.jsm:545:16) [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:609:9) [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:3665:9) [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - observe (resource://gre/modules/addonManager.js:72:9) [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - XPCWrappedJS method call [task 2023-05-17T13:04:09.775Z] 13:04:09 INFO - XREMain::XRE_main ``` That's not good but at least, on our very-fast-disk infra machines, it's not very slow, ["only" 20 or so ms](https://share.firefox.dev/3pMf0Hj). It's probably a bunch slower on spinny disk user machines, but I don't have data for that right now. The second bit is worse, however, we do [this](https://share.firefox.dev/3BCNf6P) which takes about 300ms on the same very-fast-disk machines: ``` [task 2023-05-17T13:04:09.810Z] 13:04:09 INFO - TEST-UNEXPECTED-FAIL | browser/base/content/test/performance/browser_startup_mainthreadio.js | unexpected stat on C:\Users\task_168432394098143\AppData\Local\Temp\tmpyvbcg1x8.mozrunner\extensions\langpack-ach@firefox.mozilla.org before opening first browser window - [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - Stack trace: [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - 0x7ffcad362450 [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - nsLocalFile::ResolveAndStat [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - nsIFile.moveTo [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - _installFile (resource://gre/modules/addons/XPIInstall.jsm:1106:14) [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - moveUnder (resource://gre/modules/addons/XPIInstall.jsm:1145:11) [task 2023-05-17T13:04:09.811Z] 13:04:09 INFO - uninstallAddon (resource://gre/modules/addons/XPIInstall.jsm:3383:16) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - addMetadata (resource://gre/modules/addons/XPIDatabase.jsm:3062:13) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - processFileChanges (resource://gre/modules/addons/XPIDatabase.jsm:3504:20) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - checkForChanges (resource://gre/modules/addons/XPIProvider.jsm:3043:17) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - startup (resource://gre/modules/addons/XPIProvider.jsm:2496:9) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - callProvider (resource://gre/modules/AddonManager.jsm:240:21) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - _startProvider (resource://gre/modules/AddonManager.jsm:545:16) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:609:9) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:3665:9) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - observe (resource://gre/modules/addonManager.js:72:9) [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - XPCWrappedJS method call [task 2023-05-17T13:04:09.812Z] 13:04:09 INFO - XREMain::XRE_main [task 2023-05-17T13:04:09.813Z] 13:04:09 INFO - (PoisonIOInterposer) stat - C:\Users\task_168432394098143\AppData\Local\Temp\tmpyvbcg1x8.mozrunner\extensions\langpack-ach@firefox.mozilla.org [task 2023-05-17T13:04:09.813Z] 13:04:09 INFO - Not taking screenshot here: see the one that was previously logged [task 2023-05-17T13:04:09.814Z] 13:04:09 INFO - TEST-UNEXPECTED-FAIL | browser/base/content/test/performance/browser_startup_mainthreadio.js | unexpected stat on C:\Users\task_168432394098143\AppData\Local\Temp\tmpyvbcg1x8.mozrunner\extensions\trash before opening first browser window - [task 2023-05-17T13:04:09.814Z] 13:04:09 INFO - Stack trace: [task 2023-05-17T13:04:09.814Z] 13:04:09 INFO - 0x7ffcad362450 [task 2023-05-17T13:04:09.814Z] 13:04:09 INFO - nsLocalFile::ResolveAndStat [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - nsIFile.moveTo [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - _installFile (resource://gre/modules/addons/XPIInstall.jsm:1106:14) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - moveUnder (resource://gre/modules/addons/XPIInstall.jsm:1145:11) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - uninstallAddon (resource://gre/modules/addons/XPIInstall.jsm:3383:16) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - addMetadata (resource://gre/modules/addons/XPIDatabase.jsm:3062:13) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - processFileChanges (resource://gre/modules/addons/XPIDatabase.jsm:3504:20) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - checkForChanges (resource://gre/modules/addons/XPIProvider.jsm:3043:17) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - startup (resource://gre/modules/addons/XPIProvider.jsm:2496:9) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - callProvider (resource://gre/modules/AddonManager.jsm:240:21) [task 2023-05-17T13:04:09.815Z] 13:04:09 INFO - _startProvider (resource://gre/modules/AddonManager.jsm:545:16) [task 2023-05-17T13:04:09.816Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:609:9) [task 2023-05-17T13:04:09.816Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:3665:9) [task 2023-05-17T13:04:09.816Z] 13:04:09 INFO - observe (resource://gre/modules/addonManager.js:72:9) [task 2023-05-17T13:04:09.816Z] 13:04:09 INFO - XPCWrappedJS method call [task 2023-05-17T13:04:09.816Z] 13:04:09 INFO - XREMain::XRE_main [task 2023-05-17T13:04:09.816Z] 13:04:09 INFO - (PoisonIOInterposer) stat - C:\Users\task_168432394098143\AppData\Local\Temp\tmpyvbcg1x8.mozrunner\extensions\trash [task 2023-05-17T13:04:09.817Z] 13:04:09 INFO - Not taking screenshot here: see the one that was previously logged [task 2023-05-17T13:04:09.818Z] 13:04:09 INFO - TEST-UNEXPECTED-FAIL | browser/base/content/test/performance/browser_startup_mainthreadio.js | unexpected stat on C:\Users\task_168432394098143\AppData\Local\Temp\tmpyvbcg1x8.mozrunner\extensions\trash before opening first browser window - [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - Stack trace: [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - 0x7ffcad362450 [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - set nsIFile.permissions [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - setFilePermissions (resource://gre/modules/addons/XPIInstall.jsm:1046:27) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - recursiveRemove (resource://gre/modules/addons/XPIInstall.jsm:992:24) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - uninstallAddon (resource://gre/modules/addons/XPIInstall.jsm:3383:16) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - addMetadata (resource://gre/modules/addons/XPIDatabase.jsm:3062:13) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - processFileChanges (resource://gre/modules/addons/XPIDatabase.jsm:3504:20) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - checkForChanges (resource://gre/modules/addons/XPIProvider.jsm:3043:17) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - startup (resource://gre/modules/addons/XPIProvider.jsm:2496:9) [task 2023-05-17T13:04:09.819Z] 13:04:09 INFO - callProvider (resource://gre/modules/AddonManager.jsm:240:21) [task 2023-05-17T13:04:09.820Z] 13:04:09 INFO - _startProvider (resource://gre/modules/AddonManager.jsm:545:16) [task 2023-05-17T13:04:09.820Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:609:9) [task 2023-05-17T13:04:09.820Z] 13:04:09 INFO - startup (resource://gre/modules/AddonManager.jsm:3665:9) [task 2023-05-17T13:04:09.820Z] 13:04:09 INFO - observe (resource://gre/modules/addonManager.js:72:9) [task 2023-05-17T13:04:09.820Z] 13:04:09 INFO - XPCWrappedJS method call [task 2023-05-17T13:04:09.820Z] 13:04:09 INFO - XREMain::XRE_main ``` So we try to move the add-on file to `trash` (after, btw, [checking if trash exists, if so recursively removing it and all its contents, and then recreating it, all also on the main thread](https://searchfox.org/mozilla-central/rev/2ca95198a2a0806de358a0484d96d4354e3cbaab/toolkit/mozapps/extensions/internal/XPIInstall.jsm#3271-3289)), which involves another stat call on the add-on dir, plus 2 of them on the `trash` dir, and presumably the actual IO of moving the file (not captured by the profiler or test). I don't know exactly how msix stuff works so I have a lot of questions like: - why do we need to check the LM time of all these add-ons - why are we uninstalling all these add-ons - does that even work, ie does the user running Firefox normally have permissions to mess with the app dir, where these langpacks live? - what's up with the "trash" dir - do we really need to empty it, synchronously on the main thread? Could we not just pick a unique name and create a separate one for the lifetime of the process, and queue an async off-mainthread idle priority task to clean up the old stuff? I'm hoping Ben or Luca know some of the background here. :-)