Modified: trunk/Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm (260573 => 260574)
--- trunk/Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm 2020-04-23 16:12:04 UTC (rev 260573)
+++ trunk/Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm 2020-04-23 16:27:03 UTC (rev 260574)
@@ -28,7 +28,6 @@
#if PLATFORM(IOS_FAMILY)
-#import "AssertionServicesSPI.h"
#import "Logging.h"
#import "RunningBoardServicesSPI.h"
#import "WebProcessPool.h"
@@ -38,6 +37,10 @@
#import <wtf/Vector.h>
#import <wtf/WeakHashSet.h>
+#if !HAVE(RUNNINGBOARD_VISIBILITY_ASSERTIONS)
+#import "AssertionServicesSPI.h"
+#endif
+
using WebKit::ProcessAndUIAssertion;
// This gives some time to our child processes to process the ProcessWillSuspendImminently IPC but makes sure we release
@@ -313,7 +316,7 @@
case ProcessAssertionType::DependentProcessLink:
return @"DependentProcessLink";
case ProcessAssertionType::MediaPlayback:
- return nil; // FIXME: Name to be defined in <rdar://problem/61263147>.
+ return @"MediaPlayback";
}
#else
if (assertionType == ProcessAssertionType::DependentProcessLink)
@@ -322,6 +325,8 @@
#endif
}
+#if !HAVE(RUNNINGBOARD_VISIBILITY_ASSERTIONS)
+
const BKSProcessAssertionFlags suspendedTabFlags = (BKSProcessAssertionAllowIdleSleep);
const BKSProcessAssertionFlags backgroundTabFlags = (BKSProcessAssertionPreventTaskSuspend);
const BKSProcessAssertionFlags foregroundTabFlags = (BKSProcessAssertionPreventTaskSuspend | BKSProcessAssertionWantsForegroundResourcePriority | BKSProcessAssertionPreventTaskThrottleDown);
@@ -360,6 +365,8 @@
}
}
+#endif // !HAVE(RUNNINGBOARD_VISIBILITY_ASSERTIONS)
+
ProcessAssertion::ProcessAssertion(pid_t pid, const String& reason, ProcessAssertionType assertionType)
: m_assertionType(assertionType)
, m_pid(pid)
@@ -366,33 +373,9 @@
{
auto weakThis = makeWeakPtr(*this);
NSString *runningBoardAssertionName = runningBoardNameForAssertionType(assertionType);
- if (runningBoardAssertionName) {
- if (!pid) {
- RELEASE_LOG_ERROR(ProcessSuspension, "%p - ProcessAssertion: Failed to acquire RBS %{public}@ assertion '%{public}s' for process because PID is invalid", this, runningBoardAssertionName, reason.utf8().data());
- return;
- }
- RBSTarget *target = [RBSTarget targetWithPid:pid];
- RBSDomainAttribute *domainAttribute = [RBSDomainAttribute attributeWithDomain:@"com.apple.webkit" name:runningBoardAssertionName];
- m_rbsAssertion = adoptNS([[RBSAssertion alloc] initWithExplanation:reason target:target attributes:@[domainAttribute]]);
-
- m_delegate = adoptNS([[WKRBSAssertionDelegate alloc] init]);
- [m_rbsAssertion addObserver:m_delegate.get()];
- m_delegate.get().invalidationCallback = ^{
- RELEASE_LOG(ProcessSuspension, "%p - ProcessAssertion() RBS %{public}@ assertion for process with PID %d was invalidated", this, runningBoardAssertionName, pid);
- processAssertionWasInvalidated();
- };
-
- NSError *acquisitionError = nil;
- if (![m_rbsAssertion acquireWithError:&acquisitionError]) {
- RELEASE_LOG_ERROR(ProcessSuspension, "%p - ProcessAssertion: Failed to acquire RBS %{public}@ assertion '%{public}s' for process with PID %d, error: %{public}@", this, runningBoardAssertionName, reason.utf8().data(), pid, acquisitionError);
- dispatch_async(dispatch_get_main_queue(), ^{
- if (weakThis)
- processAssertionWasInvalidated();
- });
- } else
- RELEASE_LOG(ProcessSuspension, "%p - ProcessAssertion: Successfully took RBS %{public}@ assertion '%{public}s' for process with PID %d", this, runningBoardAssertionName, reason.utf8().data(), pid);
- } else {
+#if !HAVE(RUNNINGBOARD_VISIBILITY_ASSERTIONS)
+ if (!runningBoardAssertionName) {
// Legacy code path.
BKSProcessAssertionAcquisitionHandler handler = ^(BOOL acquired) {
if (!acquired) {
@@ -414,7 +397,36 @@
processAssertionWasInvalidated();
});
};
+ return;
}
+#endif // !HAVE(RUNNINGBOARD_VISIBILITY_ASSERTIONS)
+
+ ASSERT(runningBoardAssertionName);
+ if (!pid) {
+ RELEASE_LOG_ERROR(ProcessSuspension, "%p - ProcessAssertion: Failed to acquire RBS %{public}@ assertion '%{public}s' for process because PID is invalid", this, runningBoardAssertionName, reason.utf8().data());
+ return;
+ }
+
+ RBSTarget *target = [RBSTarget targetWithPid:pid];
+ RBSDomainAttribute *domainAttribute = [RBSDomainAttribute attributeWithDomain:@"com.apple.webkit" name:runningBoardAssertionName];
+ m_rbsAssertion = adoptNS([[RBSAssertion alloc] initWithExplanation:reason target:target attributes:@[domainAttribute]]);
+
+ m_delegate = adoptNS([[WKRBSAssertionDelegate alloc] init]);
+ [m_rbsAssertion addObserver:m_delegate.get()];
+ m_delegate.get().invalidationCallback = ^{
+ RELEASE_LOG(ProcessSuspension, "%p - ProcessAssertion() RBS %{public}@ assertion for process with PID %d was invalidated", this, runningBoardAssertionName, pid);
+ processAssertionWasInvalidated();
+ };
+
+ NSError *acquisitionError = nil;
+ if (![m_rbsAssertion acquireWithError:&acquisitionError]) {
+ RELEASE_LOG_ERROR(ProcessSuspension, "%p - ProcessAssertion: Failed to acquire RBS %{public}@ assertion '%{public}s' for process with PID %d, error: %{public}@", this, runningBoardAssertionName, reason.utf8().data(), pid, acquisitionError);
+ dispatch_async(dispatch_get_main_queue(), ^{
+ if (weakThis)
+ processAssertionWasInvalidated();
+ });
+ } else
+ RELEASE_LOG(ProcessSuspension, "%p - ProcessAssertion: Successfully took RBS %{public}@ assertion '%{public}s' for process with PID %d", this, runningBoardAssertionName, reason.utf8().data(), pid);
}
ProcessAssertion::~ProcessAssertion()
@@ -427,10 +439,14 @@
[m_rbsAssertion removeObserver:m_delegate.get()];
[m_rbsAssertion invalidate];
- } else {
+ }
+
+#if !HAVE(RUNNINGBOARD_VISIBILITY_ASSERTIONS)
+ if (m_bksAssertion) {
m_bksAssertion.get().invalidationHandler = nil;
[m_bksAssertion invalidate];
}
+#endif
}
void ProcessAssertion::processAssertionWasInvalidated()