Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 9fa5c77109491231f31e5096788292a4722b28cd
      
https://github.com/WebKit/WebKit/commit/9fa5c77109491231f31e5096788292a4722b28cd
  Author: Ben Nham <[email protected]>
  Date:   2024-11-22 (Fri, 22 Nov 2024)

  Changed paths:
    M Source/WebKit/Scripts/webkit/messages.py
    M Source/WebKit/Scripts/webkit/messages_unittest.py
    M Source/WebKit/Scripts/webkit/model.py
    M Source/WebKit/Scripts/webkit/parser.py
    M Source/WebKit/Scripts/webkit/tests/MessageArgumentDescriptions.cpp
    M Source/WebKit/Scripts/webkit/tests/MessageNames.cpp
    M Source/WebKit/Scripts/webkit/tests/MessageNames.h
    M Source/WebKit/Scripts/webkit/tests/TestWithCVPixelBufferMessages.h
    A Source/WebKit/Scripts/webkit/tests/TestWithDeferSendingOption.messages.in
    A 
Source/WebKit/Scripts/webkit/tests/TestWithDeferSendingOptionMessageReceiver.cpp
    A Source/WebKit/Scripts/webkit/tests/TestWithDeferSendingOptionMessages.h
    M 
Source/WebKit/Scripts/webkit/tests/TestWithEnabledByAndConjunctionMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithEnabledByMessages.h
    M 
Source/WebKit/Scripts/webkit/tests/TestWithEnabledByOrConjunctionMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithEnabledIfMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithIfMessageMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithImageDataMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithLegacyReceiverMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithSemaphoreMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithStreamBatchedMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithStreamBufferMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithStreamMessages.h
    M 
Source/WebKit/Scripts/webkit/tests/TestWithStreamServerConnectionHandleMessages.h
    M 
Source/WebKit/Scripts/webkit/tests/TestWithSuperclassAndWantsAsyncDispatchMessages.h
    M 
Source/WebKit/Scripts/webkit/tests/TestWithSuperclassAndWantsDispatchMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithSuperclassMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithWantsAsyncDispatchMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithWantsDispatchMessages.h
    M 
Source/WebKit/Scripts/webkit/tests/TestWithWantsDispatchNoSyncMessagesMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithoutAttributesMessages.h
    M Source/WebKit/Scripts/webkit/tests/TestWithoutUsingIPCConnectionMessages.h
    M Source/WebKit/Shared/AuxiliaryProcess.h
    M Source/WebKit/Shared/AuxiliaryProcess.messages.in
    M Source/WebKit/Shared/Cocoa/AuxiliaryProcessCocoa.mm
    M Source/WebKit/UIProcess/AuxiliaryProcessProxy.cpp
    M Source/WebKit/UIProcess/AuxiliaryProcessProxy.h
    M Source/WebKit/UIProcess/Cocoa/AuxiliaryProcessProxyCocoa.mm
    M Source/WebKit/UIProcess/WebProcessPool.cpp
    M Source/WebKit/UIProcess/WebProcessPool.h
    M Source/WebKit/UIProcess/WebProcessProxy.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.messages.in
    M Source/WebKit/WebProcess/WebProcess.messages.in

  Log Message:
  -----------
  Add way to mark IPC messages as being deferred if receiving process is 
suspended
https://bugs.webkit.org/show_bug.cgi?id=283466
rdar://137988046

Reviewed by Ryan Reno.

This adds a way to mark certain IPC messages as being deferred if the receiving 
process is
suspended. We are already doing this one-off in several places (e.g. 
275588@main and 277427@main)
and there are more IPCs where this might be useful.

To mark a message as being deferred while the process is suspended, use either 
the option
`DeferSendingIfSuspended` or `DeferSendingIfSuspendedWithCoalescingKeys`. When 
one of these options
are used, `AuxiliaryProcessProxy::send` will send the message immediately if 
the receiver is
running, or it will queue the message for sending once the process resumes. The 
queued message
is coalesced based on the message name, destination ID, and some of the 
arguments in the message
itself (if the `DeferSendingIfSuspendedWithCoalescingKeys` option is used).

For instance, in this patch:

- We revert the changes in 275588@main and mark 
`SetHiddenPageDOMTimerThrottlingIncreaseLimit` with the 
`DeferSendingIfSuspended` option. This means that we'll keep the latest version 
that message and send it once the web process resumes.
- We revert the changes in 277427@main and mark `PreferenceDidUpdate` with the 
`DeferSendingIfSuspendedWithBatchingKeys=(domain, key)` option. This means that 
we'll keep the latest version of the PreferenceDidUpdate for a given domain and 
key and send it once the web process resumes.
- We mark `SetShouldPlayToPlaybackTarget` with the 
`DeferSendingIfSuspendedWithBatchingKeys=(contextId)` option. This was showing 
up as the most common message clogging up suspended process message queues in 
one of our long-running stress tests. I talked to Eric Carlson about this and 
he said that it'd be safe to coalesce these messages by contextId and send them 
once the process resumes.

* Source/WebKit/Scripts/webkit/messages.py:
(message_to_struct_declaration):
* Source/WebKit/Scripts/webkit/messages_unittest.py:
* Source/WebKit/Scripts/webkit/model.py:
(Message.__init__):
* Source/WebKit/Scripts/webkit/parser.py:
(parse):
(parse_enabled_by_string):
(parse_coalescing_keys):
* Source/WebKit/Scripts/webkit/tests/MessageArgumentDescriptions.cpp:
(IPC::jsValueForArguments):
(IPC::messageArgumentDescriptions):
* Source/WebKit/Scripts/webkit/tests/MessageNames.cpp:
* Source/WebKit/Scripts/webkit/tests/MessageNames.h:
* Source/WebKit/Scripts/webkit/tests/TestWithCVPixelBufferMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithDeferSendingOption.messages.in: 
Copied from Source/WebKit/Shared/AuxiliaryProcess.messages.in.
* 
Source/WebKit/Scripts/webkit/tests/TestWithDeferSendingOptionMessageReceiver.cpp:
 Added.
(WebKit::TestWithDeferSendingOption::didReceiveMessage):
(IPC::jsValueForDecodedMessage<MessageName::TestWithDeferSendingOption_NoOptions>):
(IPC::jsValueForDecodedMessage<MessageName::TestWithDeferSendingOption_NoIndices>):
(IPC::jsValueForDecodedMessage<MessageName::TestWithDeferSendingOption_OneIndex>):
(IPC::jsValueForDecodedMessage<MessageName::TestWithDeferSendingOption_MultipleIndices>):
* Source/WebKit/Scripts/webkit/tests/TestWithDeferSendingOptionMessages.h: 
Copied from Source/WebKit/Scripts/webkit/tests/TestWithEnabledByMessages.h.
(Messages::TestWithDeferSendingOption::messageReceiverName):
(Messages::TestWithDeferSendingOption::NoOptions::name):
(Messages::TestWithDeferSendingOption::NoOptions::NoOptions):
(Messages::TestWithDeferSendingOption::NoOptions::arguments):
(Messages::TestWithDeferSendingOption::NoIndices::name):
(Messages::TestWithDeferSendingOption::NoIndices::NoIndices):
(Messages::TestWithDeferSendingOption::NoIndices::encodeCoalescingKey const):
(Messages::TestWithDeferSendingOption::NoIndices::arguments):
(Messages::TestWithDeferSendingOption::OneIndex::name):
(Messages::TestWithDeferSendingOption::OneIndex::OneIndex):
(Messages::TestWithDeferSendingOption::OneIndex::encodeCoalescingKey const):
(Messages::TestWithDeferSendingOption::OneIndex::arguments):
(Messages::TestWithDeferSendingOption::MultipleIndices::name):
(Messages::TestWithDeferSendingOption::MultipleIndices::MultipleIndices):
(Messages::TestWithDeferSendingOption::MultipleIndices::encodeCoalescingKey 
const):
(Messages::TestWithDeferSendingOption::MultipleIndices::arguments):
* Source/WebKit/Scripts/webkit/tests/TestWithEnabledByAndConjunctionMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithEnabledByMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithEnabledByOrConjunctionMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithEnabledIfMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithIfMessageMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithImageDataMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithLegacyReceiverMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithSemaphoreMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithStreamBatchedMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithStreamBufferMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithStreamMessages.h:
* 
Source/WebKit/Scripts/webkit/tests/TestWithStreamServerConnectionHandleMessages.h:
* 
Source/WebKit/Scripts/webkit/tests/TestWithSuperclassAndWantsAsyncDispatchMessages.h:
* 
Source/WebKit/Scripts/webkit/tests/TestWithSuperclassAndWantsDispatchMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithSuperclassMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithWantsAsyncDispatchMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithWantsDispatchMessages.h:
* 
Source/WebKit/Scripts/webkit/tests/TestWithWantsDispatchNoSyncMessagesMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithoutAttributesMessages.h:
* Source/WebKit/Scripts/webkit/tests/TestWithoutUsingIPCConnectionMessages.h:
* Source/WebKit/Shared/AuxiliaryProcess.h:
* Source/WebKit/Shared/AuxiliaryProcess.messages.in:
* Source/WebKit/Shared/Cocoa/AuxiliaryProcessCocoa.mm:
(WebKit::AuxiliaryProcess::preferencesDidUpdate): Deleted.
* Source/WebKit/UIProcess/AuxiliaryProcessProxy.cpp:
(WebKit::AuxiliaryProcessProxy::sendMessageAfterResuming):
(WebKit::AuxiliaryProcessProxy::didChangeThrottleState):
* Source/WebKit/UIProcess/AuxiliaryProcessProxy.h:
(WebKit::AuxiliaryProcessProxy::send):
* Source/WebKit/UIProcess/Cocoa/AuxiliaryProcessProxyCocoa.mm:
(WebKit::AuxiliaryProcessProxy::notifyPreferencesChanged):
* Source/WebKit/UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::updateHiddenPageThrottlingAutoIncreaseLimit):
(WebKit::WebProcessPool::hiddenPageThrottlingAutoIncreaseLimit const): Deleted.
* Source/WebKit/UIProcess/WebProcessPool.h:
(WebKit::WebProcessPool::sendToAllProcesses):
(WebKit::WebProcessPool::sendToAllProcessesForSession):
(WebKit::WebProcessPool::sendToAllRemoteWorkerProcesses):
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::sendProcessDidResume):
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:
* Source/WebKit/WebProcess/WebProcess.messages.in:

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to