Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 8009ddd215826ac2774c958bafc223966124bfd1
      
https://github.com/WebKit/WebKit/commit/8009ddd215826ac2774c958bafc223966124bfd1
  Author: Ben Nham <[email protected]>
  Date:   2026-09-15 (Tue, 15 Sep 2026)

  Changed paths:
    M Source/WTF/wtf/MemoryFootprint.h
    M Source/WTF/wtf/PlatformEnable.h
    M Source/WTF/wtf/PlatformEnableCocoa.h
    M Source/WTF/wtf/cocoa/MemoryFootprintCocoa.cpp
    M Source/WebKit/Platform/Logging.h
    M Source/WebKit/Scripts/webkit/opaque_ipc_types.tracking.in
    M Source/WebKit/SourcesCocoa.txt
    M Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp
    M Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h
    M Source/WebKit/UIProcess/API/C/WKContextConfigurationRef.cpp
    M Source/WebKit/UIProcess/API/C/WKContextConfigurationRef.h
    M Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h
    M Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm
    M Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm
    M Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm
    A Source/WebKit/UIProcess/MemoryFootprintMonitor.cpp
    A Source/WebKit/UIProcess/MemoryFootprintMonitor.h
    M Source/WebKit/UIProcess/WebProcessProxy.h
    M Source/WebKit/UIProcess/WebProcessProxy.messages.in
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm
    M Source/cmake/OptionsCocoa.cmake
    M Source/cmake/WebKitFeatures.cmake
    M Tools/TestWebKitAPI/SourcesCocoa.txt
    A Tools/TestWebKitAPI/Tests/WebKit/WKWebView/MemoryFootprintMonitor.mm
    M Tools/WebKitTestRunner/TestController.cpp

  Log Message:
  -----------
  [Site Isolation] Move periodic memory monitor to UIProcess
https://bugs.webkit.org/show_bug.cgi?id=323690
rdar://186948820

Reviewed by Per Arne Vollan.

On Mac, each WebProcess samples its own memory footprint every 30 seconds to 
check if it's exceeded
a per-page foreground or background memory limit (see 
setShouldUsePeriodicMemoryMonitor in
MemoryPressureHandler). This doesn't make sense when Site Isolation is enabled 
since a page can be
rendered by multiple processes.

This patch moves the memory measurement to a new UIProcess class called 
MemoryFootprintMonitor. This
samples the footprint of all non-suspended WebContent processes every 30 
seconds. It applies both
per-page and per-process memory limits (per-process limits apply only to 
processes without pages,
like standalone worker processes). The actual limits are picked to match the 
limits we enforce with
Site Isolation disabled.

Footprint monitoring was always enabled on macOS, but this patch enables it on 
iOS as
well. Previously on iOS, we counted on kernel enforced per-process jetsam 
limits to do monitoring
for us, but per-process monitoring isn't enough when Site Isolation is enabled. 
This monitor layers
on top of kernel jetsam on iOS to help enforce per-page jetsam limits when SI 
is enabled.

One complication with footprint monitoring on iOS is that task_name_for_pid on 
any pid other than
your own pid is not allowed by the iOS app sandbox. In order for the iOS 
UIProcess to be able to
measure the footprint of WebProcess, we have WebProcess pass its task name port 
to the
UIProcess. This is a low capability port that basically only allows us to call 
task_info on that
port with certain basic flavors of task_info.

The footprint measurements themselves are done on a background queue since we 
don't want to make
potentially hundreds of task_info syscalls at around the same time on the 
UIProcess main thread.

We also disable monitoring when ASAN, system malloc, or various JSC options are 
enabled in
WebProcess, which matches the previous behavior of MemoryPressureHandler.

Test: Tools/TestWebKitAPI/Tests/WebKit/WKWebView/MemoryFootprintMonitor.mm

* Source/WTF/wtf/MemoryFootprint.h:
* Source/WTF/wtf/PlatformEnable.h:
* Source/WTF/wtf/PlatformEnableCocoa.h:
* Source/WTF/wtf/cocoa/MemoryFootprintCocoa.cpp:
(WTF::memoryFootprint):
* Source/WebKit/Platform/Logging.h:
* Source/WebKit/Scripts/webkit/opaque_ipc_types.tracking.in:
* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp:
(API::ProcessPoolConfiguration::copy):
* Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h:
* Source/WebKit/UIProcess/API/C/WKContextConfigurationRef.cpp:
(WKContextConfigurationSetMemoryLimitForTesting):
* Source/WebKit/UIProcess/API/C/WKContextConfigurationRef.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
(-[_WKProcessPoolConfiguration setMemoryLimitForTesting:]):
(-[_WKProcessPoolConfiguration memoryLimitForTesting]):
* Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::platformInitialize):
* Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm:
(WebKit::WebProcessProxy::setTaskNamePort):
* Source/WebKit/UIProcess/MemoryFootprintMonitor.cpp: Added.
(WebKit::MemoryFootprintMonitor::defaultConfiguration):
(WebKit::MemoryFootprintMonitor::singleton):
(WebKit::MemoryFootprintMonitor::measurementQueueSingleton):
(WebKit::MemoryFootprintMonitor::MemoryFootprintMonitor):
(WebKit::shouldEnforceMemoryLimits):
(WebKit::MemoryFootprintMonitor::start):
(WebKit::MemoryFootprintMonitor::setConfiguration):
(WebKit::processThrottleState):
(WebKit::MemoryFootprintMonitor::measurementTimerFired):
(WebKit::MemoryFootprintMonitor::didCompleteMeasurement):
* Source/WebKit/UIProcess/MemoryFootprintMonitor.h: Added.
(WebKit::MemoryFootprintMonitor::configuration const):
* Source/WebKit/UIProcess/WebProcessProxy.h:
* Source/WebKit/UIProcess/WebProcessProxy.messages.in:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::accessibilityFocusedUIElement):
* Source/cmake/OptionsCocoa.cmake:
* Source/cmake/WebKitFeatures.cmake:
* Tools/TestWebKitAPI/SourcesCocoa.txt:
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/MemoryFootprintMonitor.mm: Added.
(TestWebKitAPI::touchMegabytes):
(TestWebKitAPI::PageMemoryLimit)):
* Tools/WebKitTestRunner/TestController.cpp:
(WTR::TestController::generateContextConfiguration const):

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to