[webkit-changes] [WebKit/WebKit] 69f96c: Add throttler to limit the ResourceMonitor activity.
Basuke Suzuki
noreply at github.com
Fri Jan 3 17:09:03 PST 2025
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 69f96c73ab392b6e7969da02996ce934f7951757
https://github.com/WebKit/WebKit/commit/69f96c73ab392b6e7969da02996ce934f7951757
Author: Basuke Suzuki <basuke at apple.com>
Date: 2025-01-03 (Fri, 03 Jan 2025)
Changed paths:
M Source/WebCore/Headers.cmake
M Source/WebCore/Sources.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/loader/LocalFrameLoaderClient.cpp
M Source/WebCore/loader/LocalFrameLoaderClient.h
M Source/WebCore/loader/ResourceMonitor.cpp
A Source/WebCore/loader/ResourceMonitorThrottler.cpp
A Source/WebCore/loader/ResourceMonitorThrottler.h
M Source/WebCore/page/LocalFrame.cpp
M Source/WebCore/page/LocalFrame.h
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.h
M Source/WebKit/UIProcess/WebPageProxy.messages.in
M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
M Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp
M Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.h
M Tools/TestWebKitAPI/CMakeLists.txt
M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
A Tools/TestWebKitAPI/Tests/WebCore/ResourceMonitor.cpp
Log Message:
-----------
Add throttler to limit the ResourceMonitor activity.
https://bugs.webkit.org/show_bug.cgi?id=285107
rdar://141840417
Reviewed by Chris Dumez.
When ResourceMonitor detects large resource usage in a iframe, currently the decision is in
action immediately. In this patch, add throttler to limit the execution of the decision.
- Moving the action from LocalFrame to LocalFrameLoaderClient.
- Ask WebPageProxy for the decision.
- Add ResourceMonitorThrottler to limit the action.
- Place the throttler in ResourceMonitorManager for the global decision.
- Send the result to WebPage if the decision is ongoing.
* Source/WebCore/Headers.cmake:
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/loader/LocalFrameLoaderClient.cpp:
(WebCore::LocalFrameLoaderClient::didExceedNetworkUsageThreshold):
* Source/WebCore/loader/LocalFrameLoaderClient.h:
* Source/WebCore/loader/ResourceMonitor.cpp:
(WebCore::ResourceMonitor::checkNetworkUsageExcessIfNecessary):
* Source/WebCore/loader/ResourceMonitorThrottler.cpp: Added.
(WebCore::ResourceMonitorThrottler::ResourceMonitorThrottler):
(WebCore::ResourceMonitorThrottler::throttlerForHost):
(WebCore::ResourceMonitorThrottler::removeOldestThrottler):
(WebCore::ResourceMonitorThrottler::tryAccess):
(WebCore::ResourceMonitorThrottler::AccessThrottler::tryAccessAndUpdateHistory):
(WebCore::ResourceMonitorThrottler::AccessThrottler::oldestAccessTime const):
(WebCore::ResourceMonitorThrottler::AccessThrottler::tryExpire):
* Source/WebCore/loader/ResourceMonitorThrottler.h: Added.
* Source/WebCore/page/LocalFrame.cpp:
(WebCore::LocalFrame::showResourceMonitoringError):
(WebCore::LocalFrame::networkUsageDidExceedThreshold): Deleted.
* Source/WebCore/page/LocalFrame.h:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::shouldOffloadIFrameForHost):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:
(WebKit::WebsiteDataStore::resourceMonitorThrottler):
* Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp:
(WebKit::WebLocalFrameLoaderClient::didExceedNetworkUsageThreshold):
* Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.h:
* Tools/TestWebKitAPI/CMakeLists.txt:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebCore/ResourceMonitor.cpp: Added.
(TestWebKitAPI::ResouceMonitorTest::now):
(TestWebKitAPI::ResouceMonitorTest::later):
(TestWebKitAPI::TEST_F(ResouceMonitorTest, ThrottlerBasic)):
(TestWebKitAPI::TEST_F(ResouceMonitorTest, ThrottlerMaxHosts)):
(TestWebKitAPI::TEST_F(ResouceMonitorTest, ThrottlerLeastRecentAccessedHostWillBeRemoved)):
(TestWebKitAPI::TEST_F(ResouceMonitorTest, ThrottlerEmptyHostname)):
Canonical link: https://commits.webkit.org/288427@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list