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

@ -574,6 +574,7 @@ ContentParent::GetNewOrUsedBrowserProcess(bool aForBrowserElement,
{
nsTArray<ContentParent*>* contentParents;
int32_t maxContentParents;
bool preferDedicatedProcess = false;
// Decide which pool of content parents we are going to be pulling from based
// on the aLargeAllocationProcess flag.
@ -591,13 +592,20 @@ ContentParent::GetNewOrUsedBrowserProcess(bool aForBrowserElement,
contentParents = sBrowserContentParents;
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) {
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()),
static_cast<uint32_t>(maxContentParents));
uint32_t startIdx = rand() % maxSelectable;