Title: [272709] trunk/Source
Revision
272709
Author
jer.no...@apple.com
Date
2021-02-10 23:24:24 -0800 (Wed, 10 Feb 2021)

Log Message

Move AudioHardwareListener into the GPU Process
https://bugs.webkit.org/show_bug.cgi?id=221455

Reviewed by Eric Carlson.

Source/WebCore:

Allow clients to override the creation method for AudioHardwareListener::create().

* platform/audio/AudioHardwareListener.cpp:
(WebCore::audioHardwareListenerCreationFunction):
(WebCore::AudioHardwareListener::setCreationFunction):
(WebCore::AudioHardwareListener::resetCreationFunction):
(WebCore::AudioHardwareListener::create):
* platform/audio/AudioHardwareListener.h:
* platform/audio/mac/AudioHardwareListenerMac.cpp:
(WebCore::AudioHardwareListener::create): Deleted.

Source/WebKit:

Add a new Remote pair of classes, RemoteAudioHardwareListener/Proxy.

* CMakeLists.txt:
* DerivedSources-input.xcfilelist:
* DerivedSources-output.xcfilelist:
* DerivedSources.make:
* GPUProcess/GPUConnectionToWebProcess.cpp:
(WebKit::GPUConnectionToWebProcess::createAudioHardwareListener):
(WebKit::GPUConnectionToWebProcess::releaseAudioHardwareListener):
* GPUProcess/GPUConnectionToWebProcess.h:
* GPUProcess/GPUConnectionToWebProcess.messages.in:
* GPUProcess/media/RemoteAudioHardwareListenerProxy.cpp:
(WebKit::RemoteAudioHardwareListenerProxy::RemoteAudioHardwareListenerProxy):
(WebKit::RemoteAudioHardwareListenerProxy::audioHardwareDidBecomeActive):
(WebKit::RemoteAudioHardwareListenerProxy::audioHardwareDidBecomeInactive):
(WebKit::RemoteAudioHardwareListenerProxy::audioOutputDeviceChanged):
* GPUProcess/media/RemoteAudioHardwareListenerProxy.h:
* GPUProcess/media/RemoteLegacyCDMFactoryProxy.cpp:
* Scripts/webkit/messages.py:
* Sources.txt:
* SourcesCocoa.txt:
* WebKit.xcodeproj/project.pbxproj:
* WebProcess/GPU/media/RemoteAudioHardwareListener.cpp: Added.
(WebKit::RemoteAudioHardwareListener::create):
(WebKit::RemoteAudioHardwareListener::RemoteAudioHardwareListener):
(WebKit::RemoteAudioHardwareListener::~RemoteAudioHardwareListener):
(WebKit::RemoteAudioHardwareListener::gpuProcessConnectionDidClose):
(WebKit::RemoteAudioHardwareListener::audioHardwareDidBecomeActive):
(WebKit::RemoteAudioHardwareListener::audioHardwareDidBecomeInactive):
(WebKit::RemoteAudioHardwareListener::audioOutputDeviceChanged):
* WebProcess/GPU/media/RemoteAudioHardwareListener.h:
* WebProcess/GPU/media/RemoteAudioHardwareListener.messages.in:
* WebProcess/GPU/media/RemoteAudioHardwareListenerIdentifier.h:
* WebProcess/GPU/webrtc/MediaRecorderPrivate.h:
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::setUseGPUProcessForMedia):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (272708 => 272709)


--- trunk/Source/WebCore/ChangeLog	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebCore/ChangeLog	2021-02-11 07:24:24 UTC (rev 272709)
@@ -1,3 +1,21 @@
+2021-02-10  Jer Noble  <jer.no...@apple.com>
+
+        Move AudioHardwareListener into the GPU Process
+        https://bugs.webkit.org/show_bug.cgi?id=221455
+
+        Reviewed by Eric Carlson.
+
+        Allow clients to override the creation method for AudioHardwareListener::create().
+
+        * platform/audio/AudioHardwareListener.cpp:
+        (WebCore::audioHardwareListenerCreationFunction):
+        (WebCore::AudioHardwareListener::setCreationFunction):
+        (WebCore::AudioHardwareListener::resetCreationFunction):
+        (WebCore::AudioHardwareListener::create):
+        * platform/audio/AudioHardwareListener.h:
+        * platform/audio/mac/AudioHardwareListenerMac.cpp:
+        (WebCore::AudioHardwareListener::create): Deleted.
+
 2021-02-10  Rob Buis  <rb...@igalia.com>
 
         Use event loop to set title

Modified: trunk/Source/WebCore/platform/audio/AudioHardwareListener.cpp (272708 => 272709)


--- trunk/Source/WebCore/platform/audio/AudioHardwareListener.cpp	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebCore/platform/audio/AudioHardwareListener.cpp	2021-02-11 07:24:24 UTC (rev 272709)
@@ -26,15 +26,45 @@
 #include "config.h"
 #include "AudioHardwareListener.h"
 
+#include <wtf/Function.h>
+#include <wtf/NeverDestroyed.h>
+
+#if PLATFORM(MAC)
+#include "AudioHardwareListenerMac.h"
+#endif
+
 namespace WebCore {
 
-#if !PLATFORM(MAC)
-Ref<AudioHardwareListener> AudioHardwareListener::create(Client& client)
+static AudioHardwareListener::CreationFunction& audioHardwareListenerCreationFunction()
 {
-    return adoptRef(*new AudioHardwareListener(client));
+    static NeverDestroyed<AudioHardwareListener::CreationFunction> creationFunction;
+    return creationFunction;
 }
+
+void AudioHardwareListener::setCreationFunction(CreationFunction&& function)
+{
+    audioHardwareListenerCreationFunction() = WTFMove(function);
+}
+
+void AudioHardwareListener::resetCreationFunction()
+{
+    audioHardwareListenerCreationFunction() = [] (AudioHardwareListener::Client& client) {
+#if PLATFORM(MAC)
+        return AudioHardwareListenerMac::create(client);
+#else
+        return adoptRef(*new AudioHardwareListener(client));
 #endif
+    };
+}
 
+Ref<AudioHardwareListener> AudioHardwareListener::create(Client& client)
+{
+    if (!audioHardwareListenerCreationFunction())
+        resetCreationFunction();
+
+    return audioHardwareListenerCreationFunction()(client);
+}
+
 AudioHardwareListener::AudioHardwareListener(Client& client)
     : m_client(client)
 {

Modified: trunk/Source/WebCore/platform/audio/AudioHardwareListener.h (272708 => 272709)


--- trunk/Source/WebCore/platform/audio/AudioHardwareListener.h	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebCore/platform/audio/AudioHardwareListener.h	2021-02-11 07:24:24 UTC (rev 272709)
@@ -47,6 +47,10 @@
         virtual void audioOutputDeviceChanged() = 0;
     };
 
+    using CreationFunction = Function<Ref<AudioHardwareListener>(AudioHardwareListener::Client&)>;
+    WEBCORE_EXPORT static void setCreationFunction(CreationFunction&&);
+    WEBCORE_EXPORT static void resetCreationFunction();
+
     WEBCORE_EXPORT static Ref<AudioHardwareListener> create(Client&);
     virtual ~AudioHardwareListener() = default;
     
@@ -61,7 +65,7 @@
     BufferSizeRange supportedBufferSizes() const { return m_supportedBufferSizes; }
 
 protected:
-    AudioHardwareListener(Client&);
+    WEBCORE_EXPORT AudioHardwareListener(Client&);
 
     void setHardwareActivity(AudioHardwareActivityType activity) { m_activity = activity; }
     void setSupportedBufferSizes(BufferSizeRange sizes) { m_supportedBufferSizes = sizes; }

Modified: trunk/Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.cpp (272708 => 272709)


--- trunk/Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.cpp	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.cpp	2021-02-11 07:24:24 UTC (rev 272709)
@@ -109,11 +109,6 @@
     return outputDeviceProperty;
 }
 
-Ref<AudioHardwareListener> AudioHardwareListener::create(Client& client)
-{
-    return AudioHardwareListenerMac::create(client);
-}
-
 Ref<AudioHardwareListenerMac> AudioHardwareListenerMac::create(Client& client)
 {
     return adoptRef(*new AudioHardwareListenerMac(client));

Modified: trunk/Source/WebKit/CMakeLists.txt (272708 => 272709)


--- trunk/Source/WebKit/CMakeLists.txt	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/CMakeLists.txt	2021-02-11 07:24:24 UTC (rev 272709)
@@ -222,6 +222,7 @@
     WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy
     WebProcess/GPU/graphics/RemoteRenderingBackendProxy
 
+    WebProcess/GPU/media/RemoteAudioHardwareListener
     WebProcess/GPU/media/MediaPlayerPrivateRemote
     WebProcess/GPU/media/MediaSourcePrivateRemote
     WebProcess/GPU/media/RemoteAudioSession

Modified: trunk/Source/WebKit/ChangeLog (272708 => 272709)


--- trunk/Source/WebKit/ChangeLog	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/ChangeLog	2021-02-11 07:24:24 UTC (rev 272709)
@@ -1,3 +1,47 @@
+2021-02-10  Jer Noble  <jer.no...@apple.com>
+
+        Move AudioHardwareListener into the GPU Process
+        https://bugs.webkit.org/show_bug.cgi?id=221455
+
+        Reviewed by Eric Carlson.
+
+        Add a new Remote pair of classes, RemoteAudioHardwareListener/Proxy.
+
+        * CMakeLists.txt:
+        * DerivedSources-input.xcfilelist:
+        * DerivedSources-output.xcfilelist:
+        * DerivedSources.make:
+        * GPUProcess/GPUConnectionToWebProcess.cpp:
+        (WebKit::GPUConnectionToWebProcess::createAudioHardwareListener):
+        (WebKit::GPUConnectionToWebProcess::releaseAudioHardwareListener):
+        * GPUProcess/GPUConnectionToWebProcess.h:
+        * GPUProcess/GPUConnectionToWebProcess.messages.in:
+        * GPUProcess/media/RemoteAudioHardwareListenerProxy.cpp: 
+        (WebKit::RemoteAudioHardwareListenerProxy::RemoteAudioHardwareListenerProxy):
+        (WebKit::RemoteAudioHardwareListenerProxy::audioHardwareDidBecomeActive):
+        (WebKit::RemoteAudioHardwareListenerProxy::audioHardwareDidBecomeInactive):
+        (WebKit::RemoteAudioHardwareListenerProxy::audioOutputDeviceChanged):
+        * GPUProcess/media/RemoteAudioHardwareListenerProxy.h: 
+        * GPUProcess/media/RemoteLegacyCDMFactoryProxy.cpp:
+        * Scripts/webkit/messages.py:
+        * Sources.txt:
+        * SourcesCocoa.txt:
+        * WebKit.xcodeproj/project.pbxproj:
+        * WebProcess/GPU/media/RemoteAudioHardwareListener.cpp: Added.
+        (WebKit::RemoteAudioHardwareListener::create):
+        (WebKit::RemoteAudioHardwareListener::RemoteAudioHardwareListener):
+        (WebKit::RemoteAudioHardwareListener::~RemoteAudioHardwareListener):
+        (WebKit::RemoteAudioHardwareListener::gpuProcessConnectionDidClose):
+        (WebKit::RemoteAudioHardwareListener::audioHardwareDidBecomeActive):
+        (WebKit::RemoteAudioHardwareListener::audioHardwareDidBecomeInactive):
+        (WebKit::RemoteAudioHardwareListener::audioOutputDeviceChanged):
+        * WebProcess/GPU/media/RemoteAudioHardwareListener.h:
+        * WebProcess/GPU/media/RemoteAudioHardwareListener.messages.in:
+        * WebProcess/GPU/media/RemoteAudioHardwareListenerIdentifier.h:
+        * WebProcess/GPU/webrtc/MediaRecorderPrivate.h:
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::setUseGPUProcessForMedia):
+
 2021-02-10  Jiewen Tan  <jiewen_...@apple.com>
 
         [WebAuthn] Update - [ASCAppleIDCredential initWithUser:...] to match the latest SPI

Modified: trunk/Source/WebKit/DerivedSources-input.xcfilelist (272708 => 272709)


--- trunk/Source/WebKit/DerivedSources-input.xcfilelist	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/DerivedSources-input.xcfilelist	2021-02-11 07:24:24 UTC (rev 272709)
@@ -142,6 +142,7 @@
 $(PROJECT_DIR)/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in
 $(PROJECT_DIR)/WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in
 $(PROJECT_DIR)/WebProcess/GPU/media/MediaSourcePrivateRemote.messages.in
+$(PROJECT_DIR)/WebProcess/GPU/media/RemoteAudioHardwareListener.messages.in
 $(PROJECT_DIR)/WebProcess/GPU/media/RemoteAudioSession.messages.in
 $(PROJECT_DIR)/WebProcess/GPU/media/RemoteAudioSourceProviderManager.messages.in
 $(PROJECT_DIR)/WebProcess/GPU/media/RemoteCDMInstance.messages.in

Modified: trunk/Source/WebKit/DerivedSources-output.xcfilelist (272708 => 272709)


--- trunk/Source/WebKit/DerivedSources-output.xcfilelist	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/DerivedSources-output.xcfilelist	2021-02-11 07:24:24 UTC (rev 272709)
@@ -138,6 +138,9 @@
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioDestinationManagerMessages.cpp
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioDestinationManagerMessages.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioDestinationManagerMessagesReplies.h
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioHardwareListenerMessageReceiver.cpp
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioHardwareListenerMessages.h
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioHardwareListenerMessagesReplies.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioMediaStreamTrackRendererManagerMessageReceiver.cpp
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioMediaStreamTrackRendererManagerMessages.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioMediaStreamTrackRendererManagerMessagesReplies.h

Modified: trunk/Source/WebKit/DerivedSources.make (272708 => 272709)


--- trunk/Source/WebKit/DerivedSources.make	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/DerivedSources.make	2021-02-11 07:24:24 UTC (rev 272709)
@@ -178,6 +178,7 @@
 	WebProcess/GPU/webrtc/SampleBufferDisplayLayer \
 	WebProcess/GPU/media/MediaPlayerPrivateRemote \
 	WebProcess/GPU/media/MediaSourcePrivateRemote \
+	WebProcess/GPU/media/RemoteAudioHardwareListener \
 	WebProcess/GPU/media/RemoteAudioSession \
 	WebProcess/GPU/media/RemoteAudioSourceProviderManager \
 	WebProcess/GPU/media/RemoteCDMInstance \

Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp (272708 => 272709)


--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp	2021-02-11 07:24:24 UTC (rev 272709)
@@ -37,6 +37,7 @@
 #include "LibWebRTCCodecsProxy.h"
 #include "LibWebRTCCodecsProxyMessages.h"
 #include "Logging.h"
+#include "RemoteAudioHardwareListenerProxy.h"
 #include "RemoteAudioMediaStreamTrackRendererManager.h"
 #include "RemoteMediaPlayerManagerProxy.h"
 #include "RemoteMediaPlayerManagerProxyMessages.h"
@@ -404,6 +405,20 @@
 }
 #endif
 
+void GPUConnectionToWebProcess::createAudioHardwareListener(RemoteAudioHardwareListenerIdentifier identifier)
+{
+    auto addResult = m_remoteAudioHardwareListenerMap.ensure(identifier, [&]() {
+        return makeUnique<RemoteAudioHardwareListenerProxy>(*this, WTFMove(identifier));
+    });
+    ASSERT_UNUSED(addResult, addResult.isNewEntry);
+}
+
+void GPUConnectionToWebProcess::releaseAudioHardwareListener(RemoteAudioHardwareListenerIdentifier identifier)
+{
+    bool found = m_remoteAudioHardwareListenerMap.remove(identifier);
+    ASSERT_UNUSED(found, found);
+}
+
 bool GPUConnectionToWebProcess::dispatchMessage(IPC::Connection& connection, IPC::Decoder& decoder)
 {
 #if ENABLE(WEB_AUDIO)

Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h (272708 => 272709)


--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h	2021-02-11 07:24:24 UTC (rev 272709)
@@ -30,6 +30,7 @@
 #include "Connection.h"
 #include "GPUConnectionToWebProcessMessages.h"
 #include "MessageReceiverMap.h"
+#include "RemoteAudioHardwareListenerIdentifier.h"
 #include "RemoteAudioSessionIdentifier.h"
 #include "RenderingBackendIdentifier.h"
 
@@ -50,6 +51,7 @@
 class GPUProcess;
 class LibWebRTCCodecsProxy;
 class RemoteAudioDestinationManager;
+class RemoteAudioHardwareListenerProxy;
 class RemoteAudioMediaStreamTrackRendererManager;
 class RemoteAudioSessionProxy;
 class RemoteAudioSessionProxyManager;
@@ -156,6 +158,9 @@
     void ensureMediaSessionHelper();
 #endif
 
+    void createAudioHardwareListener(RemoteAudioHardwareListenerIdentifier);
+    void releaseAudioHardwareListener(RemoteAudioHardwareListenerIdentifier);
+
     // IPC::Connection::Client
     void didClose(IPC::Connection&) final;
     void didReceiveInvalidMessage(IPC::Connection&, IPC::MessageName) final;
@@ -230,6 +235,9 @@
 #endif
 
     std::unique_ptr<RemoteMediaEngineConfigurationFactoryProxy> m_mediaEngineConfigurationFactoryProxy;
+
+    using RemoteAudioHardwareListenerMap = HashMap<RemoteAudioHardwareListenerIdentifier, std::unique_ptr<RemoteAudioHardwareListenerProxy>>;
+    RemoteAudioHardwareListenerMap m_remoteAudioHardwareListenerMap;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in (272708 => 272709)


--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in	2021-02-11 07:24:24 UTC (rev 272709)
@@ -40,6 +40,8 @@
 #if ENABLE(VP9)
     EnableVP9Decoders(bool shouldEnableVP8Decoder, bool shouldEnableVP9Decoder, bool shouldEnableVP9SWDecoder)
 #endif
+    CreateAudioHardwareListener(WebKit::RemoteAudioHardwareListenerIdentifier identifier)
+    ReleaseAudioHardwareListener(WebKit::RemoteAudioHardwareListenerIdentifier identifier)
 }
 
 #endif // ENABLE(GPU_PROCESS)

Copied: trunk/Source/WebKit/GPUProcess/media/RemoteAudioHardwareListenerProxy.cpp (from rev 272708, trunk/Source/WebCore/platform/audio/AudioHardwareListener.cpp) (0 => 272709)


--- trunk/Source/WebKit/GPUProcess/media/RemoteAudioHardwareListenerProxy.cpp	                        (rev 0)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteAudioHardwareListenerProxy.cpp	2021-02-11 07:24:24 UTC (rev 272709)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+
+#include "config.h"
+#include "RemoteAudioHardwareListenerProxy.h"
+
+#if ENABLE(GPU_PROCESS)
+
+#include "GPUConnectionToWebProcess.h"
+#include "RemoteAudioHardwareListenerMessages.h"
+
+namespace WebKit {
+
+RemoteAudioHardwareListenerProxy::RemoteAudioHardwareListenerProxy(GPUConnectionToWebProcess& gpuConnection, RemoteAudioHardwareListenerIdentifier&& identifier)
+    : m_gpuConnection(gpuConnection)
+    , m_identifier(WTFMove(identifier))
+    , m_listener(WebCore::AudioHardwareListener::create(*this))
+{
+}
+
+RemoteAudioHardwareListenerProxy::~RemoteAudioHardwareListenerProxy() = default;
+
+void RemoteAudioHardwareListenerProxy::audioHardwareDidBecomeActive()
+{
+    m_gpuConnection.connection().send(Messages::RemoteAudioHardwareListener::AudioHardwareDidBecomeActive(), m_identifier);
+}
+
+void RemoteAudioHardwareListenerProxy::audioHardwareDidBecomeInactive()
+{
+    m_gpuConnection.connection().send(Messages::RemoteAudioHardwareListener::AudioHardwareDidBecomeInactive(), m_identifier);
+}
+
+void RemoteAudioHardwareListenerProxy::audioOutputDeviceChanged()
+{
+    auto supportedBufferSizes = m_listener->supportedBufferSizes();
+    m_gpuConnection.connection().send(Messages::RemoteAudioHardwareListener::AudioOutputDeviceChanged(supportedBufferSizes.minimum, supportedBufferSizes.maximum), m_identifier);
+}
+
+}
+
+#endif

Copied: trunk/Source/WebKit/GPUProcess/media/RemoteAudioHardwareListenerProxy.h (from rev 272708, trunk/Source/WebCore/platform/audio/AudioHardwareListener.cpp) (0 => 272709)


--- trunk/Source/WebKit/GPUProcess/media/RemoteAudioHardwareListenerProxy.h	                        (rev 0)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteAudioHardwareListenerProxy.h	2021-02-11 07:24:24 UTC (rev 272709)
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2021 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 ENABLE(GPU_PROCESS)
+
+#include "MessageReceiver.h"
+#include "RemoteAudioHardwareListenerIdentifier.h"
+#include <WebCore/AudioHardwareListener.h>
+#include <wtf/UniqueRef.h>
+
+namespace IPC {
+class Connection;
+}
+
+namespace WebKit {
+
+class GPUConnectionToWebProcess;
+
+class RemoteAudioHardwareListenerProxy final : private WebCore::AudioHardwareListener::Client {
+    WTF_MAKE_FAST_ALLOCATED;
+public:
+    RemoteAudioHardwareListenerProxy(GPUConnectionToWebProcess&, RemoteAudioHardwareListenerIdentifier&&);
+    virtual ~RemoteAudioHardwareListenerProxy();
+
+private:
+    // AudioHardwareListener::Client
+    void audioHardwareDidBecomeActive() final;
+    void audioHardwareDidBecomeInactive() final;
+    void audioOutputDeviceChanged() final;
+
+    GPUConnectionToWebProcess& m_gpuConnection;
+    RemoteAudioHardwareListenerIdentifier m_identifier;
+    Ref<WebCore::AudioHardwareListener> m_listener;
+};
+
+}
+
+#endif

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMFactoryProxy.cpp (272708 => 272709)


--- trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMFactoryProxy.cpp	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMFactoryProxy.cpp	2021-02-11 07:24:24 UTC (rev 272709)
@@ -28,6 +28,7 @@
 
 #if ENABLE(GPU_PROCESS) && ENABLE(LEGACY_ENCRYPTED_MEDIA)
 
+#include "GPUConnectionToWebProcess.h"
 #include "RemoteLegacyCDMProxy.h"
 #include "RemoteLegacyCDMProxyMessages.h"
 #include "RemoteLegacyCDMSessionProxy.h"

Modified: trunk/Source/WebKit/Scripts/webkit/messages.py (272708 => 272709)


--- trunk/Source/WebKit/Scripts/webkit/messages.py	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/Scripts/webkit/messages.py	2021-02-11 07:24:24 UTC (rev 272709)
@@ -308,6 +308,7 @@
         'WebKit::PDFPluginIdentifier',
         'WebKit::PlaybackSessionContextIdentifier',
         'WebKit::RemoteAudioDestinationIdentifier',
+        'WebKit::RemoteAudioHardwareListenerIdentifier',
         'WebKit::RemoteAudioSessionIdentifier',
         'WebKit::RemoteCDMIdentifier',
         'WebKit::RemoteCDMInstanceIdentifier',

Modified: trunk/Source/WebKit/Sources.txt (272708 => 272709)


--- trunk/Source/WebKit/Sources.txt	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/Sources.txt	2021-02-11 07:24:24 UTC (rev 272709)
@@ -28,6 +28,7 @@
 GPUProcess/graphics/RemoteRenderingBackend.cpp
 GPUProcess/graphics/RemoteGraphicsContextGL.cpp
 GPUProcess/graphics/RemoteResourceCache.cpp
+GPUProcess/media/RemoteAudioHardwareListenerProxy.cpp
 GPUProcess/media/RemoteAudioSessionProxy.cpp
 GPUProcess/media/RemoteAudioSessionProxyManager.cpp
 GPUProcess/media/RemoteAudioTrackProxy.cpp
@@ -585,6 +586,7 @@
 WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp
 WebProcess/GPU/media/MediaSourcePrivateRemote.cpp
 WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp
+WebProcess/GPU/media/RemoteAudioHardwareListener.cpp
 WebProcess/GPU/media/RemoteAudioSession.cpp
 WebProcess/GPU/media/RemoteCDM.cpp
 WebProcess/GPU/media/RemoteCDMFactory.cpp

Modified: trunk/Source/WebKit/SourcesCocoa.txt (272708 => 272709)


--- trunk/Source/WebKit/SourcesCocoa.txt	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/SourcesCocoa.txt	2021-02-11 07:24:24 UTC (rev 272709)
@@ -694,6 +694,7 @@
 MessageArgumentDescriptions.cpp @no-unify
 MessageNames.cpp
 RemoteAudioDestinationManagerMessageReceiver.cpp
+RemoteAudioHardwareListenerMessageReceiver.cpp
 RemoteAudioSessionMessageReceiver.cpp
 RemoteAudioSessionProxyMessageReceiver.cpp
 RemoteAudioMediaStreamTrackRendererManagerMessageReceiver.cpp

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (272708 => 272709)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2021-02-11 07:24:24 UTC (rev 272709)
@@ -5490,6 +5490,15 @@
 		CD19A26A1A13E821008D650E /* WebDiagnosticLoggingClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebDiagnosticLoggingClient.h; sourceTree = "<group>"; };
 		CD19D2E82046406F0017074A /* FullscreenTouchSecheuristic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FullscreenTouchSecheuristic.h; path = ios/fullscreen/FullscreenTouchSecheuristic.h; sourceTree = "<group>"; };
 		CD19D2E92046406F0017074A /* FullscreenTouchSecheuristic.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FullscreenTouchSecheuristic.cpp; path = ios/fullscreen/FullscreenTouchSecheuristic.cpp; sourceTree = "<group>"; };
+		CD20CE6E25CC90510069B542 /* RemoteAudioHardwareListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteAudioHardwareListener.h; sourceTree = "<group>"; };
+		CD20CE6F25CC90510069B542 /* RemoteAudioHardwareListener.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteAudioHardwareListener.cpp; sourceTree = "<group>"; };
+		CD20CE7125CC92E80069B542 /* RemoteAudioHardwareListener.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = RemoteAudioHardwareListener.messages.in; sourceTree = "<group>"; };
+		CD20CE7325CC96500069B542 /* RemoteAudioHardwareListenerIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteAudioHardwareListenerIdentifier.h; sourceTree = "<group>"; };
+		CD20CE7425CC999F0069B542 /* RemoteAudioHardwareListenerProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteAudioHardwareListenerProxy.h; sourceTree = "<group>"; };
+		CD20CE7525CC999F0069B542 /* RemoteAudioHardwareListenerProxy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteAudioHardwareListenerProxy.cpp; sourceTree = "<group>"; };
+		CD20CE7725CD2B9D0069B542 /* RemoteAudioHardwareListenerMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteAudioHardwareListenerMessageReceiver.cpp; sourceTree = "<group>"; };
+		CD20CE7825CD2B9D0069B542 /* RemoteAudioHardwareListenerMessagesReplies.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteAudioHardwareListenerMessagesReplies.h; sourceTree = "<group>"; };
+		CD20CE7925CD2B9E0069B542 /* RemoteAudioHardwareListenerMessages.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteAudioHardwareListenerMessages.h; sourceTree = "<group>"; };
 		CD3EEF3125799618006563BB /* RemoteMediaEngineConfigurationFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteMediaEngineConfigurationFactory.h; sourceTree = "<group>"; };
 		CD3EEF3225799618006563BB /* RemoteMediaEngineConfigurationFactory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteMediaEngineConfigurationFactory.cpp; sourceTree = "<group>"; };
 		CD3EEF3325799717006563BB /* RemoteMediaEngineConfigurationFactoryProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteMediaEngineConfigurationFactoryProxy.h; sourceTree = "<group>"; };
@@ -5967,6 +5976,10 @@
 				1DF29018257F202F003C28AF /* MediaSourcePrivateRemote.messages.in */,
 				9B5BEC29240101580070C6EF /* RemoteAudioDestinationProxy.cpp */,
 				9B5BEC28240101580070C6EF /* RemoteAudioDestinationProxy.h */,
+				CD20CE6F25CC90510069B542 /* RemoteAudioHardwareListener.cpp */,
+				CD20CE6E25CC90510069B542 /* RemoteAudioHardwareListener.h */,
+				CD20CE7125CC92E80069B542 /* RemoteAudioHardwareListener.messages.in */,
+				CD20CE7325CC96500069B542 /* RemoteAudioHardwareListenerIdentifier.h */,
 				CDBB49F5240D8AC60017C292 /* RemoteAudioSession.cpp */,
 				CDBB49F4240D8AC60017C292 /* RemoteAudioSession.h */,
 				CDD5356F240DD34300F7B8C4 /* RemoteAudioSession.messages.in */,
@@ -6040,6 +6053,8 @@
 				9B1229CC23FF25F2008CA751 /* RemoteAudioDestinationManager.cpp */,
 				9B1229CB23FF25F2008CA751 /* RemoteAudioDestinationManager.h */,
 				9B1229CF23FF2814008CA751 /* RemoteAudioDestinationManager.messages.in */,
+				CD20CE7525CC999F0069B542 /* RemoteAudioHardwareListenerProxy.cpp */,
+				CD20CE7425CC999F0069B542 /* RemoteAudioHardwareListenerProxy.h */,
 				CDBB49F7240D8C950017C292 /* RemoteAudioSessionProxy.cpp */,
 				CDBB49F6240D8C950017C292 /* RemoteAudioSessionProxy.h */,
 				CDBB49F8240D8D530017C292 /* RemoteAudioSessionProxy.messages.in */,
@@ -10809,6 +10824,9 @@
 				1A043B5C124D5E9D00FFBFB5 /* PluginProcessProxyMessages.h */,
 				1A8EFA6E1252B84100F7067F /* PluginProxyMessageReceiver.cpp */,
 				1A8EFA6F1252B84100F7067F /* PluginProxyMessages.h */,
+				CD20CE7725CD2B9D0069B542 /* RemoteAudioHardwareListenerMessageReceiver.cpp */,
+				CD20CE7925CD2B9E0069B542 /* RemoteAudioHardwareListenerMessages.h */,
+				CD20CE7825CD2B9D0069B542 /* RemoteAudioHardwareListenerMessagesReplies.h */,
 				CDD53576240DDE0700F7B8C4 /* RemoteAudioSessionMessageReceiver.cpp */,
 				CDD53575240DDE0700F7B8C4 /* RemoteAudioSessionMessages.h */,
 				CDD53574240DDE0700F7B8C4 /* RemoteAudioSessionMessagesReplies.h */,

Added: trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.cpp (0 => 272709)


--- trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.cpp	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.cpp	2021-02-11 07:24:24 UTC (rev 272709)
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+
+#include "config.h"
+#include "RemoteAudioHardwareListener.h"
+
+#if ENABLE(GPU_PROCESS)
+
+#include "GPUConnectionToWebProcessMessages.h"
+#include "GPUProcessProxy.h"
+#include "RemoteAudioHardwareListenerMessages.h"
+#include "WebProcess.h"
+
+namespace WebKit {
+
+using namespace WebCore;
+
+Ref<RemoteAudioHardwareListener> RemoteAudioHardwareListener::create(AudioHardwareListener::Client& client, WebProcess& webProcess)
+{
+    return adoptRef(*new RemoteAudioHardwareListener(client, webProcess));
+}
+
+RemoteAudioHardwareListener::RemoteAudioHardwareListener(AudioHardwareListener::Client& client, WebProcess& webProcess)
+    : AudioHardwareListener(client)
+    , m_process(webProcess)
+    , m_identifier(RemoteAudioHardwareListenerIdentifier::generate())
+{
+    auto& connection = WebProcess::singleton().ensureGPUProcessConnection();
+    connection.addClient(*this);
+    connection.messageReceiverMap().addMessageReceiver(Messages::RemoteAudioHardwareListener::messageReceiverName(), m_identifier.toUInt64(), *this);
+    connection.connection().send(Messages::GPUConnectionToWebProcess::CreateAudioHardwareListener(m_identifier), { });
+}
+
+RemoteAudioHardwareListener::~RemoteAudioHardwareListener()
+{
+    auto& connection = WebProcess::singleton().ensureGPUProcessConnection();
+    connection.messageReceiverMap().removeMessageReceiver(*this);
+    connection.connection().send(Messages::GPUConnectionToWebProcess::ReleaseAudioHardwareListener(m_identifier), 0);
+}
+
+void RemoteAudioHardwareListener::gpuProcessConnectionDidClose(GPUProcessConnection&)
+{
+    audioHardwareDidBecomeInactive();
+}
+
+void RemoteAudioHardwareListener::audioHardwareDidBecomeActive()
+{
+    setHardwareActivity(AudioHardwareActivityType::IsActive);
+    m_client.audioHardwareDidBecomeActive();
+}
+
+void RemoteAudioHardwareListener::audioHardwareDidBecomeInactive()
+{
+    setHardwareActivity(AudioHardwareActivityType::IsInactive);
+    m_client.audioHardwareDidBecomeInactive();
+}
+
+void RemoteAudioHardwareListener::audioOutputDeviceChanged(size_t bufferSizeMinimum, size_t bufferSizeMaximum)
+{
+    setSupportedBufferSizes({ bufferSizeMinimum, bufferSizeMaximum });
+    m_client.audioOutputDeviceChanged();
+}
+
+}
+
+#endif

Copied: trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.h (from rev 272708, trunk/Source/WebCore/platform/audio/AudioHardwareListener.cpp) (0 => 272709)


--- trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.h	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.h	2021-02-11 07:24:24 UTC (rev 272709)
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2021 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 ENABLE(GPU_PROCESS)
+
+#include "GPUProcessConnection.h"
+#include "MessageReceiver.h"
+#include "RemoteAudioHardwareListenerIdentifier.h"
+#include <WebCore/AudioHardwareListener.h>
+
+namespace IPC {
+class Connection;
+}
+
+namespace WebKit {
+
+class GPUProcessConnection;
+class WebProcess;
+
+class RemoteAudioHardwareListener final
+    : public WebCore::AudioHardwareListener
+    , private GPUProcessConnection::Client
+    , private IPC::MessageReceiver {
+    WTF_MAKE_FAST_ALLOCATED;
+public:
+    static Ref<RemoteAudioHardwareListener> create(WebCore::AudioHardwareListener::Client&, WebProcess&);
+    ~RemoteAudioHardwareListener();
+
+private:
+    RemoteAudioHardwareListener(WebCore::AudioHardwareListener::Client&, WebProcess&);
+
+    // IPC::MessageReceiver
+    void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
+
+    // GPUProcessConnection::Client
+    void gpuProcessConnectionDidClose(GPUProcessConnection&) final;
+
+    // Messages
+    void audioHardwareDidBecomeActive();
+    void audioHardwareDidBecomeInactive();
+    void audioOutputDeviceChanged(size_t bufferSizeMinimum, size_t bufferSizeMaximum);
+
+    WebProcess& m_process;
+    RemoteAudioHardwareListenerIdentifier m_identifier;
+};
+
+}
+
+#endif

Copied: trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.messages.in (from rev 272708, trunk/Source/WebCore/platform/audio/AudioHardwareListener.cpp) (0 => 272709)


--- trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.messages.in	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.messages.in	2021-02-11 07:24:24 UTC (rev 272709)
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+
+#if ENABLE(GPU_PROCESS)
+
+messages -> RemoteAudioHardwareListener {
+    AudioHardwareDidBecomeActive()
+    AudioHardwareDidBecomeInactive()
+    AudioOutputDeviceChanged(uint64_t bufferSizeMinimum, uint64_t bufferSizeMaximum)
+}
+
+#endif

Copied: trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListenerIdentifier.h (from rev 272708, trunk/Source/WebCore/platform/audio/AudioHardwareListener.cpp) (0 => 272709)


--- trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListenerIdentifier.h	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListenerIdentifier.h	2021-02-11 07:24:24 UTC (rev 272709)
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2021 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 ENABLE(GPU_PROCESS)
+
+#include <wtf/ObjectIdentifier.h>
+
+namespace WebKit {
+
+enum RemoteAudioHardwareListenerIdentifierType { };
+using RemoteAudioHardwareListenerIdentifier = ObjectIdentifier<RemoteAudioHardwareListenerIdentifierType>;
+
+} // namespace WebKit
+
+#endif

Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (272708 => 272709)


--- trunk/Source/WebKit/WebProcess/WebProcess.cpp	2021-02-11 06:26:32 UTC (rev 272708)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp	2021-02-11 07:24:24 UTC (rev 272709)
@@ -43,6 +43,7 @@
 #include "NetworkSessionCreationParameters.h"
 #include "PluginProcessConnectionManager.h"
 #include "ProcessAssertion.h"
+#include "RemoteAudioHardwareListener.h"
 #include "RemoteAudioSession.h"
 #include "RemoteLegacyCDMFactory.h"
 #include "RemoteMediaEngineConfigurationFactory.h"
@@ -1952,6 +1953,11 @@
         ensureGPUProcessConnection().mediaEngineConfigurationFactory().registerFactory();
     else
         MediaEngineConfigurationFactory::resetFactories();
+
+    if (useGPUProcessForMedia)
+        WebCore::AudioHardwareListener::setCreationFunction([this] (WebCore::AudioHardwareListener::Client& client) { return RemoteAudioHardwareListener::create(client, *this); });
+    else
+        WebCore::AudioHardwareListener::resetCreationFunction();
 }
 
 bool WebProcess::shouldUseRemoteRenderingFor(RenderingPurpose purpose)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to