Changeset 272858 in webkit


Ignore:
Timestamp:
Feb 15, 2021 9:35:52 AM (3 years ago)
Author:
youenn@apple.com
Message:

Move WebRTCPlatformCodecsInGPUProcessEnabled to Page Settings
https://bugs.webkit.org/show_bug.cgi?id=221893

Reviewed by Eric Carlson.

Source/ThirdParty/libwebrtc:

Always use the remote factory to simplify things. This ensures that factories remain in sync whether callbacks are set or not.
We check anyway whether callbacks are set and use them if needed.
Otherwise, we default to the in-process code path.

  • Source/webrtc/sdk/WebKit/WebKitDecoder.mm:

(webrtc::createWebKitDecoderFactory):

  • Source/webrtc/sdk/WebKit/WebKitEncoder.mm:

(webrtc::createWebKitEncoderFactory):

Source/WebCore:

Covered by existing tests.

  • page/RuntimeEnabledFeatures.h:

(WebCore::RuntimeEnabledFeatures::setWebRTCH264SimulcastEnabled):
(WebCore::RuntimeEnabledFeatures::webRTCPlatformCodecsInGPUProcessEnabled const): Deleted.
(WebCore::RuntimeEnabledFeatures::setWebRTCPlatformCodecsInGPUProcessEnabled): Deleted.

  • testing/InternalSettings.cpp:

(WebCore::InternalSettings::setWebRTCPlatformCodecsInGPUProcessEnabled): Deleted.

  • testing/InternalSettings.h:
  • testing/InternalSettings.idl:

Source/WebKit:

Make LibWebRTCProvider and MediaRecorder provider keep a WebPage reference.
Use it to get WebRTCPlatformCodecsInGPUProcessEnabled setting when needed.
For LibWebRTCProvider, set callback only once before creating the first peer connection.
This makes sure we do not change callbacks while using them in another thread.

  • WebProcess/GPU/webrtc/MediaRecorderProvider.cpp:

(WebKit::MediaRecorderProvider::createMediaRecorderPrivate):

  • WebProcess/GPU/webrtc/MediaRecorderProvider.h:

(WebKit::MediaRecorderProvider::MediaRecorderProvider):

  • WebProcess/Network/webrtc/LibWebRTCProvider.cpp:

(WebKit::LibWebRTCProvider::createPeerConnection):

  • WebProcess/Network/webrtc/LibWebRTCProvider.h:

(WebKit::LibWebRTCProvider::LibWebRTCProvider):

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::m_limitsNavigationsToAppBoundDomains):

Source/WTF:

  • Scripts/Preferences/WebPreferencesExperimental.yaml:
Location:
trunk/Source
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/ThirdParty/libwebrtc/ChangeLog

    r272758 r272858  
     12021-02-15  Youenn Fablet  <youenn@apple.com>
     2
     3        Move WebRTCPlatformCodecsInGPUProcessEnabled to Page Settings
     4        https://bugs.webkit.org/show_bug.cgi?id=221893
     5
     6        Reviewed by Eric Carlson.
     7
     8        Always use the remote factory to simplify things. This ensures that factories remain in sync whether callbacks are set or not.
     9        We check anyway whether callbacks are set and use them if needed.
     10        Otherwise, we default to the in-process code path.
     11
     12        * Source/webrtc/sdk/WebKit/WebKitDecoder.mm:
     13        (webrtc::createWebKitDecoderFactory):
     14        * Source/webrtc/sdk/WebKit/WebKitEncoder.mm:
     15        (webrtc::createWebKitEncoderFactory):
     16
    1172021-02-11  Jer Noble  <jer.noble@apple.com>
    218
  • trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitDecoder.mm

    r270256 r272858  
    227227{
    228228    auto internalFactory = ObjCToNativeVideoDecoderFactory([[RTCDefaultVideoDecoderFactory alloc] initWithH265: supportsH265 == WebKitH265::On vp9Profile0:supportsVP9 > WebKitVP9::Off vp9Profile2:supportsVP9 == WebKitVP9::Profile0And2 vp9VTB: supportsVP9VTB == WebKitVP9VTB::On]);
    229     if (videoDecoderCallbacks().createCallback)
    230         return std::make_unique<RemoteVideoDecoderFactory>(std::move(internalFactory));
    231     return internalFactory;
     229    return std::make_unique<RemoteVideoDecoderFactory>(std::move(internalFactory));
    232230}
    233231
  • trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.mm

    r270256 r272858  
    223223    auto internalFactory = ObjCToNativeVideoEncoderFactory([[RTCDefaultVideoEncoderFactory alloc] initWithH265: supportsH265 == WebKitH265::On vp9Profile0:supportsVP9 > WebKitVP9::Off vp9Profile2:supportsVP9 == WebKitVP9::Profile0And2 lowLatencyH264:useH264LowLatency == WebKitH264LowLatency::On]);
    224224
    225     if (videoEncoderCallbacks().createCallback)
    226         internalFactory = std::make_unique<RemoteVideoEncoderFactory>(std::move(internalFactory));
    227 
    228     return std::make_unique<VideoEncoderFactoryWithSimulcast>(std::move(internalFactory));
     225    return std::make_unique<VideoEncoderFactoryWithSimulcast>(std::make_unique<RemoteVideoEncoderFactory>(std::move(internalFactory)));
    229226}
    230227
  • trunk/Source/WTF/ChangeLog

    r272848 r272858  
     12021-02-15  Youenn Fablet  <youenn@apple.com>
     2
     3        Move WebRTCPlatformCodecsInGPUProcessEnabled to Page Settings
     4        https://bugs.webkit.org/show_bug.cgi?id=221893
     5
     6        Reviewed by Eric Carlson.
     7
     8        * Scripts/Preferences/WebPreferencesExperimental.yaml:
     9
    1102021-02-15  Lauro Moura  <lmoura@igalia.com>
    211
  • trunk/Source/WTF/Scripts/Preferences/WebPreferencesExperimental.yaml

    r272848 r272858  
    11081108  humanReadableName: "WebRTC Platform Codecs in GPU Process"
    11091109  humanReadableDescription: "Enable WebRTC Platform Codecs in GPU Process"
    1110   webcoreBinding: RuntimeEnabledFeatures
    11111110  condition: ENABLE(WEB_RTC)
    11121111  defaultValue:
     
    11151114    WebKit:
    11161115      default: WebKit::defaultWebRTCCodecsInGPUProcess()
     1116    WebCore:
     1117      default: false
    11171118
    11181119WebRTCPlatformSocketsEnabled:
  • trunk/Source/WebCore/ChangeLog

    r272856 r272858  
     12021-02-15  Youenn Fablet  <youenn@apple.com>
     2
     3        Move WebRTCPlatformCodecsInGPUProcessEnabled to Page Settings
     4        https://bugs.webkit.org/show_bug.cgi?id=221893
     5
     6        Reviewed by Eric Carlson.
     7
     8        Covered by existing tests.
     9
     10        * page/RuntimeEnabledFeatures.h:
     11        (WebCore::RuntimeEnabledFeatures::setWebRTCH264SimulcastEnabled):
     12        (WebCore::RuntimeEnabledFeatures::webRTCPlatformCodecsInGPUProcessEnabled const): Deleted.
     13        (WebCore::RuntimeEnabledFeatures::setWebRTCPlatformCodecsInGPUProcessEnabled): Deleted.
     14        * testing/InternalSettings.cpp:
     15        (WebCore::InternalSettings::setWebRTCPlatformCodecsInGPUProcessEnabled): Deleted.
     16        * testing/InternalSettings.h:
     17        * testing/InternalSettings.idl:
     18
    1192021-02-15  Zalan Bujtas  <zalan@apple.com>
    220
  • trunk/Source/WebCore/page/RuntimeEnabledFeatures.h

    r272769 r272858  
    164164    bool webRTCH264SimulcastEnabled() const { return m_isWebRTCH264SimulcastEnabled; }
    165165    void setWebRTCH264SimulcastEnabled(bool isEnabled) { m_isWebRTCH264SimulcastEnabled = isEnabled; }
    166     bool webRTCPlatformCodecsInGPUProcessEnabled() const { return m_isWebRTCPlatformCodecsInGPUProcessEnabled; }
    167     void setWebRTCPlatformCodecsInGPUProcessEnabled(bool isEnabled) { m_isWebRTCPlatformCodecsInGPUProcessEnabled = isEnabled; }
    168166    bool webRTCPlatformSocketsEnabled() const { return m_isWebRTCPlatformSocketsEnabled; }
    169167    void setWebRTCPlatformSocketsEnabled(bool isEnabled) { m_isWebRTCPlatformSocketsEnabled = isEnabled; }
     
    337335    bool m_isWebRTCH264SimulcastEnabled { true };
    338336    bool m_isWebRTCMDNSICECandidatesEnabled { false };
    339     bool m_isWebRTCPlatformCodecsInGPUProcessEnabled { false };
    340337    bool m_isWebRTCH265CodecEnabled { false };
    341338    bool m_isWebRTCVP9Profile0CodecEnabled { false };
  • trunk/Source/WebCore/testing/InternalSettings.cpp

    r270823 r272858  
    460460}
    461461
    462 ExceptionOr<void> InternalSettings::setWebRTCPlatformCodecsInGPUProcessEnabled(bool enabled)
    463 {
    464     if (!m_page)
    465         return Exception { InvalidAccessError };
    466 #if ENABLE(WEB_RTC)
    467     RuntimeEnabledFeatures::sharedFeatures().setWebRTCPlatformCodecsInGPUProcessEnabled(enabled);
    468 #else
    469     UNUSED_PARAM(enabled);
    470 #endif
    471     return { };
    472 }
    473 
    474462bool InternalSettings::vp9DecoderEnabled() const
    475463{
  • trunk/Source/WebCore/testing/InternalSettings.h

    r270823 r272858  
    9595    ExceptionOr<void> setFetchAPIKeepAliveEnabled(bool);
    9696    ExceptionOr<void> setCustomPasteboardDataEnabled(bool);
    97     ExceptionOr<void> setWebRTCPlatformCodecsInGPUProcessEnabled(bool);
    9897
    9998    bool vp9DecoderEnabled() const;
  • trunk/Source/WebCore/testing/InternalSettings.idl

    r270823 r272858  
    7070    [MayThrowException] undefined setFetchAPIKeepAliveEnabled(boolean enabled);
    7171    [MayThrowException] undefined setCustomPasteboardDataEnabled(boolean enabled);
    72     [MayThrowException] undefined setWebRTCPlatformCodecsInGPUProcessEnabled(boolean enabled);
    7372
    7473    readonly attribute boolean vp9DecoderEnabled;
  • trunk/Source/WebKit/ChangeLog

    r272855 r272858  
     12021-02-15  Youenn Fablet  <youenn@apple.com>
     2
     3        Move WebRTCPlatformCodecsInGPUProcessEnabled to Page Settings
     4        https://bugs.webkit.org/show_bug.cgi?id=221893
     5
     6        Reviewed by Eric Carlson.
     7
     8        Make LibWebRTCProvider and MediaRecorder provider keep a WebPage reference.
     9        Use it to get WebRTCPlatformCodecsInGPUProcessEnabled setting when needed.
     10        For LibWebRTCProvider, set callback only once before creating the first peer connection.
     11        This makes sure we do not change callbacks while using them in another thread.
     12
     13        * WebProcess/GPU/webrtc/MediaRecorderProvider.cpp:
     14        (WebKit::MediaRecorderProvider::createMediaRecorderPrivate):
     15        * WebProcess/GPU/webrtc/MediaRecorderProvider.h:
     16        (WebKit::MediaRecorderProvider::MediaRecorderProvider):
     17        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
     18        (WebKit::LibWebRTCProvider::createPeerConnection):
     19        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
     20        (WebKit::LibWebRTCProvider::LibWebRTCProvider):
     21        * WebProcess/WebPage/WebPage.cpp:
     22        (WebKit::m_limitsNavigationsToAppBoundDomains):
     23
    1242021-02-15  Youenn Fablet  <youenn@apple.com>
    225
  • trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderProvider.cpp

    r272206 r272858  
    3030
    3131#include "MediaRecorderPrivate.h"
     32#include "WebPage.h"
    3233#include <WebCore/MediaRecorderPrivate.h>
    33 #include <WebCore/RuntimeEnabledFeatures.h>
     34#include <WebCore/Page.h>
     35#include <WebCore/Settings.h>
    3436
    3537namespace WebKit {
     
    3941{
    4042#if ENABLE(GPU_PROCESS) && HAVE(AVASSETWRITERDELEGATE)
    41     if (RuntimeEnabledFeatures::sharedFeatures().webRTCPlatformCodecsInGPUProcessEnabled())
     43    auto* page = m_webPage.corePage();
     44    if (page && page->settings().webRTCPlatformCodecsInGPUProcessEnabled())
    4245        return makeUnique<MediaRecorderPrivate>(stream, options);
    4346#endif
  • trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderProvider.h

    r266116 r272858  
    3030namespace WebKit {
    3131
     32class WebPage;
     33
    3234class MediaRecorderProvider final : public WebCore::MediaRecorderProvider {
    3335public:
    34     MediaRecorderProvider() = default;
     36    explicit MediaRecorderProvider(WebPage&);
    3537
    3638private:
     
    3840    std::unique_ptr<WebCore::MediaRecorderPrivate> createMediaRecorderPrivate(WebCore::MediaStreamPrivate&, const WebCore::MediaRecorderPrivateOptions&) final;
    3941#endif
     42
     43#if ENABLE(GPU_PROCESS) && HAVE(AVASSETWRITERDELEGATE)
     44    WebPage& m_webPage;
     45#endif
    4046};
    4147
     48inline MediaRecorderProvider::MediaRecorderProvider(WebPage& webPage)
     49#if ENABLE(GPU_PROCESS) && HAVE(AVASSETWRITERDELEGATE)
     50    : m_webPage(webPage)
     51#endif
     52{
    4253}
     54
     55}
  • trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp

    r272202 r272858  
    3434
    3535#include "LibWebRTCNetwork.h"
     36#include "WebPage.h"
    3637#include "WebProcess.h"
    37 #include <WebCore/RuntimeEnabledFeatures.h>
     38#include <WebCore/Page.h>
     39#include <WebCore/Settings.h>
    3840#include <webrtc/api/async_resolver_factory.h>
    3941#include <webrtc/pc/peer_connection_factory.h>
     
    5456{
    5557#if ENABLE(GPU_PROCESS) && PLATFORM(COCOA) && !PLATFORM(MACCATALYST)
    56     LibWebRTCCodecs::setCallbacks(RuntimeEnabledFeatures::sharedFeatures().webRTCPlatformCodecsInGPUProcessEnabled());
     58    if (!m_didInitializeCallback) {
     59        // We initialize only once since callbacks are used in background threads.
     60        auto* page = m_webPage.corePage();
     61        LibWebRTCCodecs::setCallbacks(page && page->settings().webRTCPlatformCodecsInGPUProcessEnabled());
     62        m_didInitializeCallback = true;
     63    }
    5764#endif
     65
    5866    return WebCore::LibWebRTCProvider::createPeerConnection(observer, WebProcess::singleton().libWebRTCNetwork().monitor(), *socketFactory, WTFMove(configuration), makeUnique<AsyncResolverFactory>());
    5967}
  • trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h

    r272202 r272858  
    3636namespace WebKit {
    3737
     38class WebPage;
     39
    3840#if USE(LIBWEBRTC)
    3941
     
    4850class LibWebRTCProvider final : public LibWebRTCProviderBase {
    4951public:
    50     LibWebRTCProvider() { m_useNetworkThreadWithSocketServer = false; }
     52    explicit LibWebRTCProvider(WebPage&);
    5153
    5254private:
     
    5961    void disableNonLocalhostConnections() final;
    6062    void startedNetworkThread() final;
     63
     64#if ENABLE(GPU_PROCESS) && PLATFORM(COCOA) && !PLATFORM(MACCATALYST)
     65    WebPage& m_webPage;
     66    bool m_didInitializeCallback { false };
     67#endif
    6168};
     69
     70inline LibWebRTCProvider::LibWebRTCProvider(WebPage& webPage)
     71#if ENABLE(GPU_PROCESS) && PLATFORM(COCOA) && !PLATFORM(MACCATALYST)
     72    : m_webPage(webPage)
     73#endif
     74{
     75    m_useNetworkThreadWithSocketServer = false;
     76}
     77
     78inline UniqueRef<LibWebRTCProvider> createLibWebRTCProvider(WebPage& page)
     79{
     80    return makeUniqueRef<LibWebRTCProvider>(page);
     81}
    6282#else
    6383using LibWebRTCProvider = WebCore::LibWebRTCProvider;
     84
     85inline UniqueRef<LibWebRTCProvider> createLibWebRTCProvider(WebPage&)
     86{
     87    return makeUniqueRef<LibWebRTCProvider>();
     88}
    6489#endif // USE(LIBWEBRTC)
    6590
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r272808 r272858  
    524524        makeUniqueRef<WebEditorClient>(this),
    525525        WebSocketProvider::create(),
    526         makeUniqueRef<WebKit::LibWebRTCProvider>(),
     526        createLibWebRTCProvider(*this),
    527527        WebProcess::singleton().cacheStorageProvider(),
    528528        m_userContentController,
     
    532532        makeUniqueRef<WebFrameLoaderClient>(m_mainFrame.copyRef()),
    533533        makeUniqueRef<WebSpeechRecognitionProvider>(m_identifier),
    534         makeUniqueRef<MediaRecorderProvider>()
     534        makeUniqueRef<MediaRecorderProvider>(*this)
    535535    );
    536536    pageConfiguration.chromeClient = new WebChromeClient(*this);
Note: See TracChangeset for help on using the changeset viewer.