mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 860799 - Part 1: Give frames expecting a system message priority at least BACKGROUND_PERCEIVABLE, so long as either haven't yet handled the system message or are holding the CPU/high-priority wake lock. r=khuey
This commit is contained in:
parent
9a39e4d0c4
commit
37ebeead76
@ -28,6 +28,7 @@
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsPIDOMWindow.h"
|
||||
#include "StaticPtr.h"
|
||||
#include "nsIMozBrowserFrame.h"
|
||||
#include "nsIObserver.h"
|
||||
#include "nsITimer.h"
|
||||
#include "nsPrintfCString.h"
|
||||
@ -228,6 +229,7 @@ public:
|
||||
const nsAutoCString& NameWithComma();
|
||||
|
||||
bool HasAppType(const char* aAppType);
|
||||
bool IsExpectingSystemMessage();
|
||||
|
||||
void OnAudioChannelProcessChanged(nsISupports* aSubject);
|
||||
void OnRemoteBrowserFrameShown(nsISupports* aSubject);
|
||||
@ -702,6 +704,27 @@ ParticularProcessPriorityManager::HasAppType(const char* aAppType)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
ParticularProcessPriorityManager::IsExpectingSystemMessage()
|
||||
{
|
||||
const InfallibleTArray<PBrowserParent*>& browsers =
|
||||
mContentParent->ManagedPBrowserParent();
|
||||
for (uint32_t i = 0; i < browsers.Length(); i++) {
|
||||
TabParent* tp = static_cast<TabParent*>(browsers[i]);
|
||||
nsCOMPtr<nsIDOMElement> ownerElement = tp->GetOwnerElement();
|
||||
nsCOMPtr<nsIMozBrowserFrame> bf = do_QueryInterface(ownerElement);
|
||||
if (!bf) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (bf->GetIsExpectingSystemMessage()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
ProcessPriority
|
||||
ParticularProcessPriorityManager::ComputePriority()
|
||||
{
|
||||
@ -724,6 +747,11 @@ ParticularProcessPriorityManager::ComputePriority()
|
||||
return PROCESS_PRIORITY_FOREGROUND;
|
||||
}
|
||||
|
||||
if ((mHoldsCPUWakeLock || mHoldsHighPriorityWakeLock) &&
|
||||
IsExpectingSystemMessage()) {
|
||||
return PROCESS_PRIORITY_BACKGROUND_PERCEIVABLE;
|
||||
}
|
||||
|
||||
AudioChannelService* service = AudioChannelService::GetAudioChannelService();
|
||||
if (service->ProcessContentOrNormalChannelIsActive(ChildID())) {
|
||||
return PROCESS_PRIORITY_BACKGROUND_PERCEIVABLE;
|
||||
|
Loading…
Reference in New Issue
Block a user