From a6dbf7e8adaa280918a28a96906ac03ee5bcebfd Mon Sep 17 00:00:00 2001 From: Cameron Kaiser Date: Thu, 28 Dec 2017 17:46:50 -0800 Subject: [PATCH] #446: reduce throttle interval --- docshell/base/nsDocShell.cpp | 5 ++++ layout/base/nsRefreshDriver.cpp | 34 ++++++++++--------------- toolkit/xre/nsEmbedFunctions.cpp | 6 ----- xpfe/appshell/nsAppShellService.cpp | 39 ++++++++++++++++------------- 4 files changed, 39 insertions(+), 45 deletions(-) diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index caef26fa2..b9d4be58b 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -6024,6 +6024,11 @@ nsDocShell::SetIsActive(bool aIsActive) nsresult nsDocShell::SetIsActiveInternal(bool aIsActive, bool aIsHidden) { + // We disallow setting active on chrome docshells. + if (mItemType == nsIDocShellTreeItem::typeChrome) { + return NS_ERROR_INVALID_ARG; + } + // Keep track ourselves. mIsActive = aIsActive; diff --git a/layout/base/nsRefreshDriver.cpp b/layout/base/nsRefreshDriver.cpp index befadc81e..8988ea1c5 100644 --- a/layout/base/nsRefreshDriver.cpp +++ b/layout/base/nsRefreshDriver.cpp @@ -426,11 +426,9 @@ private: void OnTimerStart() { -#if(0) if (!XRE_IsParentProcess()) { mLastChildTick = TimeStamp::Now(); } -#endif } private: @@ -438,7 +436,6 @@ private: void RecordTelemetryProbes(TimeStamp aVsyncTimestamp) { -#if(0) MOZ_ASSERT(NS_IsMainThread()); #ifndef ANDROID /* bug 1142079 */ if (XRE_IsParentProcess()) { @@ -466,21 +463,20 @@ private: mVsyncRate = mVsyncRefreshDriverTimer->mVsyncChild->GetVsyncRate(); } #endif -#endif } void TickRefreshDriver(TimeStamp aVsyncTimestamp) { MOZ_ASSERT(NS_IsMainThread()); - //RecordTelemetryProbes(aVsyncTimestamp); - //if (XRE_IsParentProcess()) { + RecordTelemetryProbes(aVsyncTimestamp); + if (XRE_IsParentProcess()) { MonitorAutoLock lock(mRefreshTickLock); aVsyncTimestamp = mRecentVsync; mProcessedVsync = true; - //} else { - // mLastChildTick = TimeStamp::Now(); - //} + } else { + mLastChildTick = TimeStamp::Now(); + } MOZ_ASSERT(aVsyncTimestamp <= TimeStamp::Now()); // We might have a problem that we call ~VsyncRefreshDriverTimer() before @@ -504,10 +500,9 @@ private: virtual ~VsyncRefreshDriverTimer() { - //if (XRE_IsParentProcess()) { + if (XRE_IsParentProcess()) { mVsyncDispatcher->SetParentRefreshTimer(nullptr); mVsyncDispatcher = nullptr; -#if(0) } else { // Since the PVsyncChild actors live through the life of the process, just // send the unobserveVsync message to disable vsync event. We don't need @@ -517,7 +512,6 @@ private: mVsyncChild->SetVsyncObserver(nullptr); mVsyncChild = nullptr; } -#endif // Detach current vsync timer from this VsyncObserver. The observer will no // longer tick this timer. @@ -548,11 +542,11 @@ private: // Protect updates to `sActiveVsyncTimers`. MOZ_ASSERT(NS_IsMainThread()); - //if (XRE_IsParentProcess()) { + if (XRE_IsParentProcess()) { mVsyncDispatcher->SetParentRefreshTimer(nullptr); - //} else { - // Unused << mVsyncChild->SendUnobserve(); - //} + } else { + Unused << mVsyncChild->SendUnobserve(); + } MOZ_ASSERT(sActiveVsyncTimers > 0); --sActiveVsyncTimers; @@ -685,8 +679,6 @@ protected: virtual void ScheduleNextTick(TimeStamp aNowTime) { - return; // speculative from bug 1352205 and TenFourFox issue 446 - if (mDisableAfterMilliseconds > 0.0 && mNextTickDuration > mDisableAfterMilliseconds) { @@ -836,14 +828,14 @@ CreateVsyncRefreshTimer() return; } - //if (XRE_IsParentProcess()) { + if (XRE_IsParentProcess()) { // Make sure all vsync systems are ready. gfxPlatform::GetPlatform(); // In parent process, we don't need to use ipc. We can create the // VsyncRefreshDriverTimer directly. sRegularRateTimer = new VsyncRefreshDriverTimer(); return; - //} + } #ifdef MOZ_NUWA_PROCESS // NUWA process will just use software timer. Use NuwaAddFinalConstructor() @@ -1882,7 +1874,7 @@ nsRefreshDriver::Tick(int64_t aNowEpoch, TimeStamp aNowTime) } } -#if(0) +#ifndef ANDROID /* bug 1142079 */ mozilla::Telemetry::AccumulateTimeDelta(mozilla::Telemetry::REFRESH_DRIVER_TICK, mTickStart); #endif diff --git a/toolkit/xre/nsEmbedFunctions.cpp b/toolkit/xre/nsEmbedFunctions.cpp index 2c1433919..e735bf626 100644 --- a/toolkit/xre/nsEmbedFunctions.cpp +++ b/toolkit/xre/nsEmbedFunctions.cpp @@ -237,12 +237,6 @@ XRE_SetProcessType(const char* aProcessTypeString) i < (int) ArrayLength(kGeckoProcessTypeString); ++i) { if (!strcmp(kGeckoProcessTypeString[i], aProcessTypeString)) { - // For purposes of TenFourFox issue 441, assert that we never, ever - // launch a child process (it would immediately crash anyway due to - // defective IPC, but let's be paranoid and make it crash predictably). - if (MOZ_UNLIKELY(static_cast(i) != GeckoProcessType_Default)) - MOZ_CRASH("TenFourFox does not support E10S child processes."); - sChildProcessType = static_cast(i); return; } diff --git a/xpfe/appshell/nsAppShellService.cpp b/xpfe/appshell/nsAppShellService.cpp index 7e5d81753..5632ae8b2 100644 --- a/xpfe/appshell/nsAppShellService.cpp +++ b/xpfe/appshell/nsAppShellService.cpp @@ -132,30 +132,33 @@ nsAppShellService::CreateHiddenWindowHelper(bool aIsPrivate) rv = NS_NewURI(getter_AddRefs(url), hiddenWindowURL); NS_ENSURE_SUCCESS(rv, rv); - if (aIsPrivate) { - chromeMask |= nsIWebBrowserChrome::CHROME_PRIVATE_WINDOW; - } - RefPtr newWindow; - rv = JustCreateTopWindow(nullptr, url, - chromeMask, initialWidth, initialHeight, - true, nullptr, getter_AddRefs(newWindow)); - NS_ENSURE_SUCCESS(rv, rv); + if (!aIsPrivate) { + rv = JustCreateTopWindow(nullptr, url, + chromeMask, initialWidth, initialHeight, + true, nullptr, getter_AddRefs(newWindow)); + NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr docShell; - newWindow->GetDocShell(getter_AddRefs(docShell)); - if (docShell) { - docShell->SetIsActive(false); - if (aIsPrivate) { + mHiddenWindow.swap(newWindow); + } else { + // Create the hidden private window + chromeMask |= nsIWebBrowserChrome::CHROME_PRIVATE_WINDOW; + + rv = JustCreateTopWindow(nullptr, url, + chromeMask, initialWidth, initialHeight, + true, nullptr, getter_AddRefs(newWindow)); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr docShell; + newWindow->GetDocShell(getter_AddRefs(docShell)); + if (docShell) { docShell->SetAffectPrivateSessionLifetime(false); } + + mHiddenPrivateWindow.swap(newWindow); } - if (aIsPrivate) { - mHiddenPrivateWindow.swap(newWindow); - } else { - mHiddenWindow.swap(newWindow); - } + // RegisterTopLevelWindow(newWindow); -- Mac only return NS_OK; }