One process per tab for e10s

This commit is contained in:
ownedbywuigi 2026-03-29 22:27:29 +01:00
commit eca96d42e6
3 changed files with 22 additions and 5 deletions

View file

@ -923,6 +923,11 @@ pref("dom.ipc.shims.enabledWarnings", false);
// Start the browser in e10s mode // Start the browser in e10s mode
pref("browser.tabs.remote.autostart", true); pref("browser.tabs.remote.autostart", true);
pref("browser.tabs.remote.desktopbehavior", true); pref("browser.tabs.remote.desktopbehavior", true);
pref("browser.tabs.remote.ignoreBlockPolicy", true);
// -1 means automatic tab-isolation mode: try one process per tab.
pref("dom.ipc.processCount", -1);
// Safety ceiling used by automatic tab-isolation mode.
pref("dom.ipc.processCount.webIsolatedMax", 64);
// This pref governs whether we attempt to work around problems caused by // This pref governs whether we attempt to work around problems caused by
// plugins using OS calls to manipulate the cursor while running out-of- // plugins using OS calls to manipulate the cursor while running out-of-
@ -1245,10 +1250,8 @@ pref("browser.tabs.remote.autostart.2", true);
pref("extensions.interposition.enabled", true); pref("extensions.interposition.enabled", true);
pref("extensions.interposition.prefetching", true); pref("extensions.interposition.prefetching", true);
// Enable blocking of e10s for add-on users on beta/release. // Keep e10s enabled even when legacy add-ons are present.
#ifdef RELEASE_OR_BETA pref("extensions.e10sBlocksEnabling", false);
pref("extensions.e10sBlocksEnabling", true);
#endif
// How often to check for CPOW timeouts. CPOWs are only timed out by // How often to check for CPOW timeouts. CPOWs are only timed out by
// the hang monitor. // the hang monitor.

View file

@ -574,6 +574,7 @@ ContentParent::GetNewOrUsedBrowserProcess(bool aForBrowserElement,
{ {
nsTArray<ContentParent*>* contentParents; nsTArray<ContentParent*>* contentParents;
int32_t maxContentParents; int32_t maxContentParents;
bool preferDedicatedProcess = false;
// Decide which pool of content parents we are going to be pulling from based // Decide which pool of content parents we are going to be pulling from based
// on the aLargeAllocationProcess flag. // on the aLargeAllocationProcess flag.
@ -591,13 +592,20 @@ ContentParent::GetNewOrUsedBrowserProcess(bool aForBrowserElement,
contentParents = sBrowserContentParents; contentParents = sBrowserContentParents;
maxContentParents = Preferences::GetInt("dom.ipc.processCount", 1); maxContentParents = Preferences::GetInt("dom.ipc.processCount", 1);
if (maxContentParents == -1) {
// Automatic mode: create a dedicated content process per new tab until
// a safety ceiling is reached, then reuse existing processes.
preferDedicatedProcess = true;
maxContentParents = Preferences::GetInt("dom.ipc.processCount.webIsolatedMax", 64);
}
} }
if (maxContentParents < 1) { if (maxContentParents < 1) {
maxContentParents = 1; maxContentParents = 1;
} }
if (contentParents->Length() >= uint32_t(maxContentParents)) { if (!preferDedicatedProcess ||
contentParents->Length() >= uint32_t(maxContentParents)) {
uint32_t maxSelectable = std::min(static_cast<uint32_t>(contentParents->Length()), uint32_t maxSelectable = std::min(static_cast<uint32_t>(contentParents->Length()),
static_cast<uint32_t>(maxContentParents)); static_cast<uint32_t>(maxContentParents));
uint32_t startIdx = rand() % maxSelectable; uint32_t startIdx = rand() % maxSelectable;

View file

@ -4203,6 +4203,12 @@ MultiprocessBlockPolicy() {
} }
gMultiprocessBlockPolicyInitialized = true; gMultiprocessBlockPolicyInitialized = true;
// Allow downstream applications to bypass legacy e10s block policies.
// This is evaluated at startup and requires restart to take effect.
if (Preferences::GetBool("browser.tabs.remote.ignoreBlockPolicy", false)) {
return gMultiprocessBlockPolicy;
}
/** /**
* Avoids enabling e10s if there are add-ons installed. * Avoids enabling e10s if there are add-ons installed.
*/ */