Title: [295530] trunk/Source
Revision
295530
Author
pvol...@apple.com
Date
2022-06-14 11:06:06 -0700 (Tue, 14 Jun 2022)

Log Message

Create sandbox extension for Power logging service in the GPU process
https://bugs.webkit.org/show_bug.cgi?id=241227
<rdar://82442196>

Reviewed by Geoffrey Garen.

When power logging is enabled, the GPU process on macOS should be granted access to the Power logging service.

* Source/WTF/wtf/PlatformHave.h:
* Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj:
* Source/WebCore/PAL/pal/spi/mac/PowerLogSPI.h: Copied from Source/WebKit/UIProcess/Cocoa/GPUProcessProxyCocoa.mm.
* Source/WebCore/platform/graphics/cg/ImageDecoderCG.cpp:
(WebCore::createImageSourceOptions):
* Source/WebKit/Configurations/WebKit.xcconfig:
* Source/WebKit/GPUProcess/GPUProcess.h:
* Source/WebKit/GPUProcess/GPUProcess.messages.in:
* Source/WebKit/GPUProcess/mac/GPUProcessMac.mm:
(WebKit::GPUProcess::openDirectoryCacheInvalidated):
(WebKit::GPUProcess::enablePowerLogging):
* Source/WebKit/UIProcess/Cocoa/GPUProcessProxyCocoa.mm:
(WebKit::GPUProcessProxy::powerLoggingInTaskMode const):
(WebKit::GPUProcessProxy::enablePowerLogging):
* Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::registerNotificationObservers):
(WebKit::WebProcessPool::unregisterNotificationObservers):
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp:
(WebKit::GPUProcessProxy::didFinishLaunching):
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.h:
* Source/WebKit/UIProcess/WebProcessPool.h:
* WebKit.xcworkspace/xcshareddata/xcschemes/All Source.xcscheme:

Canonical link: https://commits.webkit.org/251534@main

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WTF/wtf/PlatformHave.h (295529 => 295530)


--- trunk/Source/WTF/wtf/PlatformHave.h	2022-06-14 18:05:06 UTC (rev 295529)
+++ trunk/Source/WTF/wtf/PlatformHave.h	2022-06-14 18:06:06 UTC (rev 295530)
@@ -1256,3 +1256,7 @@
     || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 160000))
 #define HAVE_APPLE_PUSH_SERVICE_URL_TOKEN_SUPPORT 1
 #endif
+
+#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 130000)
+#define HAVE_POWERLOG_TASK_MODE_QUERY 1
+#endif

Modified: trunk/Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj (295529 => 295530)


--- trunk/Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj	2022-06-14 18:05:06 UTC (rev 295529)
+++ trunk/Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj	2022-06-14 18:06:06 UTC (rev 295530)
@@ -437,6 +437,7 @@
 		DD20DE6427BC90D80093D175 /* ThreadGlobalData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C5C57DE275719F4003B540D /* ThreadGlobalData.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		DD20DE6527BC90F90093D175 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C09D0571E31C57E00725F18 /* config.h */; };
 		DDB04F32278E4F1B008D3678 /* libWebKitAdditions.a in Product Dependencies */ = {isa = PBXBuildFile; fileRef = DDE99300278D07B800F60D26 /* libWebKitAdditions.a */; };
+		E34F26F62846D0D90076E549 /* PowerLogSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = E34F26F52846B7550076E549 /* PowerLogSPI.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		F44291641FA52670002CC93E /* FileSizeFormatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F44291621FA52670002CC93E /* FileSizeFormatter.cpp */; };
 		F44291681FA52705002CC93E /* FileSizeFormatterCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = F44291661FA52705002CC93E /* FileSizeFormatterCocoa.mm */; };
 		F46B8C4D26740918007A6554 /* VisionKitCoreSoftLink.mm in Sources */ = {isa = PBXBuildFile; fileRef = F46B8C4C26740918007A6554 /* VisionKitCoreSoftLink.mm */; };
@@ -948,6 +949,7 @@
 		DDE99300278D07B800F60D26 /* libWebKitAdditions.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libWebKitAdditions.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		DF83E208263734F1000825EF /* CryptoKitPrivateSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptoKitPrivateSPI.h; sourceTree = "<group>"; };
 		E327C0DE260BDC90002281C5 /* NotifySPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotifySPI.h; sourceTree = "<group>"; };
+		E34F26F52846B7550076E549 /* PowerLogSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PowerLogSPI.h; sourceTree = "<group>"; };
 		E5D45D112106A07400D2B738 /* NSColorWellSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSColorWellSPI.h; sourceTree = "<group>"; };
 		E5D45D132106A18700D2B738 /* NSPopoverColorWellSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSPopoverColorWellSPI.h; sourceTree = "<group>"; };
 		EB8A8DC12509E87E00D1BF90 /* MediaToolboxSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaToolboxSPI.h; sourceTree = "<group>"; };
@@ -1163,6 +1165,7 @@
 				07035D3027A9B32E00FB03E4 /* ScreenCaptureKitSPI.h */,
 				71B1141F26823ACD004D6701 /* SystemPreviewSPI.h */,
 				0C7785881F45130F00F4EBB6 /* TelephonyUtilitiesSPI.h */,
+				E34F26F52846B7550076E549 /* PowerLogSPI.h */,
 			);
 			path = mac;
 			sourceTree = "<group>";
@@ -1800,6 +1803,7 @@
 				DD20DE0527BC90D80093D175 /* QuartzCoreSPI.h in Headers */,
 				DD20DE3F27BC90D80093D175 /* QuickLookMacSPI.h in Headers */,
 				DD20DDC127BC90D70093D175 /* QuickLookSoftLink.h in Headers */,
+				E34F26F62846D0D90076E549 /* PowerLogSPI.h in Headers */,
 				DD20DE1827BC90D80093D175 /* QuickLookSPI.h in Headers */,
 				DD20DDC727BC90D70093D175 /* QuickLookUISoftLink.h in Headers */,
 				DD20DDC227BC90D70093D175 /* ReplayKitSoftLink.h in Headers */,

Copied: trunk/Source/WebCore/PAL/pal/spi/mac/PowerLogSPI.h (from rev 295528, trunk/Source/WebKit/UIProcess/Cocoa/GPUProcessProxyCocoa.mm) (0 => 295530)


--- trunk/Source/WebCore/PAL/pal/spi/mac/PowerLogSPI.h	                        (rev 0)
+++ trunk/Source/WebCore/PAL/pal/spi/mac/PowerLogSPI.h	2022-06-14 18:06:06 UTC (rev 295530)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2022 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if USE(APPLE_INTERNAL_SDK)
+
+#include <PowerLog/PLClientLogging.h>
+#include <PowerLog/PLXPCClientHeader.h>
+
+#else // USE(APPLE_INTERNAL_SDK)
+
+typedef CF_ENUM(short, PLClientID)
+{
+    PLClientIDWebKit = 132
+};
+
+WTF_EXTERN_C_BEGIN
+
+CFDictionaryRef PLQueryRegistered(PLClientID, CFStringRef queryName, CFDictionaryRef parameters);
+
+WTF_EXTERN_C_END
+
+#endif
+
+extern NSString *const kPLTaskingStartNotification;

Modified: trunk/Source/WebKit/Configurations/WebKit.xcconfig (295529 => 295530)


--- trunk/Source/WebKit/Configurations/WebKit.xcconfig	2022-06-14 18:05:06 UTC (rev 295529)
+++ trunk/Source/WebKit/Configurations/WebKit.xcconfig	2022-06-14 18:06:06 UTC (rev 295530)
@@ -173,8 +173,11 @@
 WK_INSTALL_COORDINATION_LDFLAGS_iphoneos = -framework InstallCoordination;
 WK_INSTALL_COORDINATION_LDFLAGS_iphonesimulator = $(WK_INSTALL_COORDINATION_LDFLAGS_iphoneos)
 
-FRAMEWORK_AND_LIBRARY_LDFLAGS = -lobjc -framework CFNetwork -framework CoreAudio -framework CoreFoundation -framework CoreGraphics -framework CoreText -framework Foundation -framework ImageIO -framework IOKit -framework IOSurface -framework WebKitLegacy -lnetwork -framework Metal $(WK_ACCESSIBILITY_LDFLAGS) $(WK_APPKIT_LDFLAGS) $(WK_APPLE_PUSH_SERVICE_LDFLAGS) $(WK_BACKBOARD_SERVICES_LDFLAGS) $(WK_RUNNINGBOARD_SERVICES_LDFLAGS) $(WK_AUTHKIT_LDFLAGS) $(WK_CARBON_LDFLAGS) $(WK_CONTACTS_LDFLAGS) $(WK_CORE_PREDICTION_LDFLAGS) $(WK_CORE_SERVICES_LDFLAGS) $(WK_GRAPHICS_SERVICES_LDFLAGS) $(WK_LIBNETWORKEXTENSION_LDFLAGS) $(WK_LIBSANDBOX_LDFLAGS) $(WK_LIBWEBRTC_LDFLAGS) $(WK_MOBILE_CORE_SERVICES_LDFLAGS) $(WK_MOBILE_GESTALT_LDFLAGS) $(WK_PDFKIT_LDFLAGS) $(WK_PROTOTYPE_TOOLS_LDFLAGS) $(WK_SAFE_BROWSING_LDFLAGS) $(WK_SECURITY_INTERFACE_LDFLAGS) $(WK_UIKIT_LDFLAGS) $(WK_UNIFORM_TYPE_IDENTIFIERS_LDFLAGS) $(WK_URL_FORMATTING_LDFLAGS) $(WK_WEBINSPECTORUI_LDFLAGS) $(WK_COORDINATOR_LDFL
 AGS) $(WK_INSTALL_COORDINATION_LDFLAGS) $(WK_APP_STORE_DAEMON_LDFLAGS);
+WK_POWERLOG_LDFLAGS = $(WK_POWERLOG_LDFLAGS_$(WK_PLATFORM_NAME));
+WK_POWERLOG_LDFLAGS_macosx = -weak_framework PowerLog -weak_framework PowerlogCore;
 
+FRAMEWORK_AND_LIBRARY_LDFLAGS = -lobjc -framework CFNetwork -framework CoreAudio -framework CoreFoundation -framework CoreGraphics -framework CoreText -framework Foundation -framework ImageIO -framework IOKit -framework IOSurface -framework WebKitLegacy -lnetwork -framework Metal $(WK_ACCESSIBILITY_LDFLAGS) $(WK_APPKIT_LDFLAGS) $(WK_APPLE_PUSH_SERVICE_LDFLAGS) $(WK_BACKBOARD_SERVICES_LDFLAGS) $(WK_RUNNINGBOARD_SERVICES_LDFLAGS) $(WK_AUTHKIT_LDFLAGS) $(WK_CARBON_LDFLAGS) $(WK_CONTACTS_LDFLAGS) $(WK_CORE_PREDICTION_LDFLAGS) $(WK_CORE_SERVICES_LDFLAGS) $(WK_GRAPHICS_SERVICES_LDFLAGS) $(WK_LIBNETWORKEXTENSION_LDFLAGS) $(WK_LIBSANDBOX_LDFLAGS) $(WK_LIBWEBRTC_LDFLAGS) $(WK_MOBILE_CORE_SERVICES_LDFLAGS) $(WK_MOBILE_GESTALT_LDFLAGS) $(WK_PDFKIT_LDFLAGS) $(WK_PROTOTYPE_TOOLS_LDFLAGS) $(WK_SAFE_BROWSING_LDFLAGS) $(WK_SECURITY_INTERFACE_LDFLAGS) $(WK_UIKIT_LDFLAGS) $(WK_UNIFORM_TYPE_IDENTIFIERS_LDFLAGS) $(WK_URL_FORMATTING_LDFLAGS) $(WK_WEBINSPECTORUI_LDFLAGS) $(WK_COORDINATOR_LDFL
 AGS) $(WK_INSTALL_COORDINATION_LDFLAGS) $(WK_APP_STORE_DAEMON_LDFLAGS) $(WK_POWERLOG_LDFLAGS);
+
 // Prevent C++ standard library basic_stringstream, operator new, delete and their related exception types from being exported as weak symbols.
 UNEXPORTED_SYMBOL_LDFLAGS = -Wl,-unexported_symbol -Wl,__ZTISt9bad_alloc -Wl,-unexported_symbol -Wl,__ZTISt9exception -Wl,-unexported_symbol -Wl,__ZTSSt9bad_alloc -Wl,-unexported_symbol -Wl,__ZTSSt9exception -Wl,-unexported_symbol -Wl,__ZdlPvS_ -Wl,-unexported_symbol -Wl,__ZnwmPv -Wl,-unexported_symbol -Wl,__Znwm -Wl,-unexported_symbol -Wl,__ZTVNSt3__117bad_function_callE -Wl,-unexported_symbol -Wl,__ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_13basic_istreamIcS2_EE -Wl,-unexported_symbol -Wl,__ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_14basic_iostreamIcS2_EE -Wl,-unexported_symbol -Wl,__ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE16_NS_13basic_ostreamIcS2_EE -Wl,-unexported_symbol -Wl,__ZTTNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE -Wl,-unexported_symbol -Wl,__ZTVNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE -Wl,-unexport
 ed_symbol -Wl,__ZTVNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE -Wl,-unexported_symbol -Wl,__ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE8_NS_13basic_ostreamIcS2_EE;
 

Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.h (295529 => 295530)


--- trunk/Source/WebKit/GPUProcess/GPUProcess.h	2022-06-14 18:05:06 UTC (rev 295529)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.h	2022-06-14 18:06:06 UTC (rev 295530)
@@ -201,6 +201,10 @@
     void openDirectoryCacheInvalidated(SandboxExtension::Handle&&);
 #endif
 
+#if HAVE(POWERLOG_TASK_MODE_QUERY)
+    void enablePowerLogging(SandboxExtension::Handle&&);
+#endif
+
     // Connections to WebProcesses.
     HashMap<WebCore::ProcessIdentifier, Ref<GPUConnectionToWebProcess>> m_webProcessConnections;
     MonotonicTime m_creationTime { MonotonicTime::now() };

Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in (295529 => 295530)


--- trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in	2022-06-14 18:05:06 UTC (rev 295529)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in	2022-06-14 18:06:06 UTC (rev 295530)
@@ -91,6 +91,10 @@
     OpenDirectoryCacheInvalidated(WebKit::SandboxExtension::Handle handle)
 #endif
 
+#if HAVE(POWERLOG_TASK_MODE_QUERY)
+    EnablePowerLogging(WebKit::SandboxExtension::Handle handle)
+#endif
+
     WebProcessConnectionCountForTesting() -> (uint64_t count)
 }
 

Modified: trunk/Source/WebKit/GPUProcess/mac/GPUProcessMac.mm (295529 => 295530)


--- trunk/Source/WebKit/GPUProcess/mac/GPUProcessMac.mm	2022-06-14 18:05:06 UTC (rev 295529)
+++ trunk/Source/WebKit/GPUProcess/mac/GPUProcessMac.mm	2022-06-14 18:06:06 UTC (rev 295530)
@@ -105,6 +105,13 @@
 
 #endif
 
+#if HAVE(POWERLOG_TASK_MODE_QUERY)
+void GPUProcess::enablePowerLogging(SandboxExtension::Handle&& handle)
+{
+    SandboxExtension::consumePermanently(WTFMove(handle));
+}
+#endif // HAVE(POWERLOG_TASK_MODE_QUERY)
+
 } // namespace WebKit
 
 #endif // ENABLE(GPU_PROCESS) && (PLATFORM(MAC) || PLATFORM(MACCATALYST))

Modified: trunk/Source/WebKit/GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in (295529 => 295530)


--- trunk/Source/WebKit/GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in	2022-06-14 18:05:06 UTC (rev 295529)
+++ trunk/Source/WebKit/GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in	2022-06-14 18:06:06 UTC (rev 295530)
@@ -652,7 +652,9 @@
 #endif
 
 (allow mach-lookup
-    (global-name "com.apple.powerlog.plxpclogger.xpc"))
+    (require-all
+        (extension "com.apple.webkit.extension.mach")
+        (global-name "com.apple.powerlog.plxpclogger.xpc")))
 
 (with-filter (uid 0)
     (allow mach-lookup

Modified: trunk/Source/WebKit/UIProcess/Cocoa/GPUProcessProxyCocoa.mm (295529 => 295530)


--- trunk/Source/WebKit/UIProcess/Cocoa/GPUProcessProxyCocoa.mm	2022-06-14 18:05:06 UTC (rev 295529)
+++ trunk/Source/WebKit/UIProcess/Cocoa/GPUProcessProxyCocoa.mm	2022-06-14 18:06:06 UTC (rev 295530)
@@ -29,8 +29,13 @@
 #if ENABLE(GPU_PROCESS)
 
 #include "GPUProcessCreationParameters.h"
+#include "GPUProcessMessages.h"
 #include "MediaPermissionUtilities.h"
 
+#if HAVE(POWERLOG_TASK_MODE_QUERY)
+#include <pal/spi/mac/PowerLogSPI.h>
+#endif
+
 namespace WebKit {
 
 void GPUProcessProxy::platformInitializeGPUProcessParameters(GPUProcessCreationParameters& parameters)
@@ -39,6 +44,31 @@
     parameters.applicationVisibleName = applicationVisibleName();
 }
 
+#if HAVE(POWERLOG_TASK_MODE_QUERY)
+bool GPUProcessProxy::isPowerLoggingInTaskMode()
+{
+    PLClientID clientIDWebKit = static_cast<PLClientID>(132); // FIXME: Replace with PLClientIDWebKit when available in SDK
+    auto dictionary = adoptCF(PLQueryRegistered(clientIDWebKit, CFSTR("TaskModeQuery"), nullptr));
+    if (!dictionary)
+        return false;
+    CFNumberRef taskModeRef = static_cast<CFNumberRef>(CFDictionaryGetValue(dictionary.get(), CFSTR("Task Mode")));
+    if (!taskModeRef)
+        return false;
+    int taskMode = 0;
+    if (!CFNumberGetValue(taskModeRef, kCFNumberIntType, &taskMode))
+        return false;
+    return !!taskMode;
 }
 
+void GPUProcessProxy::enablePowerLogging()
+{
+    auto handle = SandboxExtension::createHandleForMachLookup("com.apple.powerlog.plxpclogger.xpc"_s, std::nullopt);
+    if (!handle)
+        return;
+    send(Messages::GPUProcess::EnablePowerLogging(*handle), 0);
+}
+#endif // HAVE(POWERLOG_TASK_MODE_QUERY)
+
+}
+
 #endif

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm (295529 => 295530)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2022-06-14 18:05:06 UTC (rev 295529)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2022-06-14 18:06:06 UTC (rev 295530)
@@ -95,6 +95,10 @@
 #import "UIKitSPI.h"
 #endif
 
+#if HAVE(POWERLOG_TASK_MODE_QUERY)
+#import <pal/spi/mac/PowerLogSPI.h>
+#endif
+
 #if PLATFORM(IOS_FAMILY)
 #import <pal/spi/ios/MobileGestaltSPI.h>
 #endif
@@ -703,6 +707,12 @@
 #if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
     addCFNotificationObserver(mediaAccessibilityPreferencesChangedCallback, kMAXCaptionAppearanceSettingsChangedNotification);
 #endif
+#if HAVE(POWERLOG_TASK_MODE_QUERY) && ENABLE(GPU_PROCESS)
+    m_powerLogObserver = [[NSNotificationCenter defaultCenter] addObserverForName:kPLTaskingStartNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) {
+        if (auto* gpuProcess = GPUProcessProxy::singletonIfCreated())
+            gpuProcess->enablePowerLogging();
+    }];
+#endif // HAVE(POWERLOG_TASK_MODE_QUERY) && ENABLE(GPU_PROCESS)
 }
 
 void WebProcessPool::unregisterNotificationObservers()
@@ -753,7 +763,9 @@
 #if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
     removeCFNotificationObserver(kMAXCaptionAppearanceSettingsChangedNotification);
 #endif
-
+#if HAVE(POWERLOG_TASK_MODE_QUERY) && ENABLE(GPU_PROCESS)
+    [[NSNotificationCenter defaultCenter] removeObserver:m_powerLogObserver.get()];
+#endif
     m_weakObserver = nil;
 }
 

Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp (295529 => 295530)


--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp	2022-06-14 18:05:06 UTC (rev 295529)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp	2022-06-14 18:06:06 UTC (rev 295530)
@@ -62,6 +62,10 @@
 #include <wtf/FileSystem.h>
 #endif
 
+#if PLATFORM(COCOA)
+#include <wtf/BlockPtr.h>
+#endif
+
 #define MESSAGE_CHECK(assertion) MESSAGE_CHECK_BASE(assertion, this->connection())
 
 namespace WebKit {
@@ -470,6 +474,18 @@
 
     for (auto& processPool : WebProcessPool::allProcessPools())
         processPool->gpuProcessDidFinishLaunching(processIdentifier());
+
+#if HAVE(POWERLOG_TASK_MODE_QUERY)
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), makeBlockPtr([weakThis = WeakPtr { *this }] () mutable {
+        if (!isPowerLoggingInTaskMode())
+            return;
+        RunLoop::main().dispatch([weakThis = WTFMove(weakThis)] () {
+            if (!weakThis)
+                return;
+            weakThis->enablePowerLogging();
+        });
+    }).get());
+#endif
 }
 
 void GPUProcessProxy::updateProcessAssertion()

Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h (295529 => 295530)


--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h	2022-06-14 18:05:06 UTC (rev 295529)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h	2022-06-14 18:06:06 UTC (rev 295530)
@@ -102,6 +102,11 @@
     void setScreenProperties(const WebCore::ScreenProperties&);
 #endif
 
+#if HAVE(POWERLOG_TASK_MODE_QUERY)
+    void enablePowerLogging();
+    static bool isPowerLoggingInTaskMode();
+#endif
+
     void updatePreferences(WebProcessProxy&);
     void updateScreenPropertiesIfNeeded();
 

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (295529 => 295530)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.h	2022-06-14 18:05:06 UTC (rev 295529)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h	2022-06-14 18:06:06 UTC (rev 295530)
@@ -689,6 +689,10 @@
     std::unique_ptr<PerActivityStateCPUUsageSampler> m_perActivityStateCPUUsageSampler;
 #endif
 
+#if HAVE(POWERLOG_TASK_MODE_QUERY) && ENABLE(GPU_PROCESS)
+    RetainPtr<NSObject> m_powerLogObserver;
+#endif
+
 #if PLATFORM(COCOA)
     std::unique_ptr<WebCore::PowerSourceNotifier> m_powerSourceNotifier;
     RetainPtr<NSObject> m_activationObserver;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to