Title: [207818] trunk/Source/WebCore
Revision
207818
Author
[email protected]
Date
2016-10-25 08:02:39 -0700 (Tue, 25 Oct 2016)

Log Message

MediaEndpointConfiguration does not need to be refcounted
https://bugs.webkit.org/show_bug.cgi?id=163888

Patch by Youenn Fablet <[email protected]> on 2016-10-25
Reviewed by Eric Carlson.

No change of behavior.

Updating MediaEndpoint to take a MediaEndpointConfiguration&& instead of a RefPtr<MediaEndpointConfiguration>&&.
This allows ensuring that the configuration is not null and removes the need to ref-count it.

Removing ref-counting from MediaEndpointConfiguration and its related IceServer that is now a struct.
Updated MediaEndpointOwr and mock implementations accordingly.

* Modules/mediastream/MediaEndpointPeerConnection.cpp:
(WebCore::MediaEndpointPeerConnection::setConfiguration):
* platform/mediastream/MediaEndpoint.cpp:
* platform/mediastream/MediaEndpoint.h:
* platform/mediastream/MediaEndpointConfiguration.cpp:
(WebCore::MediaEndpointConfiguration::MediaEndpointConfiguration):
* platform/mediastream/MediaEndpointConfiguration.h:
(WebCore::MediaEndpointConfiguration::iceServers):
* platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
(WebCore::MediaEndpointOwr::setConfiguration):
(WebCore::MediaEndpointOwr::ensureTransportAgentAndTransceivers):
* platform/mediastream/openwebrtc/MediaEndpointOwr.h:
* platform/mock/MockMediaEndpoint.cpp:
* platform/mock/MockMediaEndpoint.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (207817 => 207818)


--- trunk/Source/WebCore/ChangeLog	2016-10-25 14:16:15 UTC (rev 207817)
+++ trunk/Source/WebCore/ChangeLog	2016-10-25 15:02:39 UTC (rev 207818)
@@ -1,5 +1,35 @@
 2016-10-25  Youenn Fablet  <[email protected]>
 
+        MediaEndpointConfiguration does not need to be refcounted
+        https://bugs.webkit.org/show_bug.cgi?id=163888
+
+        Reviewed by Eric Carlson.
+
+        No change of behavior.
+
+        Updating MediaEndpoint to take a MediaEndpointConfiguration&& instead of a RefPtr<MediaEndpointConfiguration>&&.
+        This allows ensuring that the configuration is not null and removes the need to ref-count it.
+
+        Removing ref-counting from MediaEndpointConfiguration and its related IceServer that is now a struct.
+        Updated MediaEndpointOwr and mock implementations accordingly.
+
+        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
+        (WebCore::MediaEndpointPeerConnection::setConfiguration):
+        * platform/mediastream/MediaEndpoint.cpp:
+        * platform/mediastream/MediaEndpoint.h:
+        * platform/mediastream/MediaEndpointConfiguration.cpp:
+        (WebCore::MediaEndpointConfiguration::MediaEndpointConfiguration):
+        * platform/mediastream/MediaEndpointConfiguration.h:
+        (WebCore::MediaEndpointConfiguration::iceServers):
+        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
+        (WebCore::MediaEndpointOwr::setConfiguration):
+        (WebCore::MediaEndpointOwr::ensureTransportAgentAndTransceivers):
+        * platform/mediastream/openwebrtc/MediaEndpointOwr.h:
+        * platform/mock/MockMediaEndpoint.cpp:
+        * platform/mock/MockMediaEndpoint.h:
+
+2016-10-25  Youenn Fablet  <[email protected]>
+
         CachedResourceLoader should set headers of the HTTP request prior checking for the cache
         https://bugs.webkit.org/show_bug.cgi?id=163103
 

Modified: trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp (207817 => 207818)


--- trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp	2016-10-25 14:16:15 UTC (rev 207817)
+++ trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp	2016-10-25 15:02:39 UTC (rev 207818)
@@ -614,11 +614,19 @@
 
 void MediaEndpointPeerConnection::setConfiguration(RTCConfiguration& configuration)
 {
-    Vector<RefPtr<IceServerInfo>> iceServers;
-    for (auto& server : configuration.iceServers())
-        iceServers.append(IceServerInfo::create(server->urls(), server->credential(), server->username()));
+    Vector<MediaEndpointConfiguration::IceServerInfo> iceServers;
+    if (configuration.iceServers().size()) {
+        iceServers.reserveInitialCapacity(configuration.iceServers().size());
+        for (auto& server : configuration.iceServers()) {
+            Vector<URL> urls;
+            urls.reserveInitialCapacity(server->urls().size());
+            for (auto& url : server->urls())
+                urls.uncheckedAppend(URL(URL(), url));
+            iceServers.uncheckedAppend(MediaEndpointConfiguration::IceServerInfo { WTFMove(urls), server->credential(), server->username() });
+        }
+    }
 
-    m_mediaEndpoint->setConfiguration(MediaEndpointConfiguration::create(iceServers, configuration.iceTransportPolicy(), configuration.bundlePolicy()));
+    m_mediaEndpoint->setConfiguration({ WTFMove(iceServers), configuration.iceTransportPolicy(), configuration.bundlePolicy() });
 }
 
 void MediaEndpointPeerConnection::addIceCandidate(RTCIceCandidate& rtcCandidate, PeerConnection::VoidPromise&& promise)

Modified: trunk/Source/WebCore/platform/mediastream/MediaEndpoint.cpp (207817 => 207818)


--- trunk/Source/WebCore/platform/mediastream/MediaEndpoint.cpp	2016-10-25 14:16:15 UTC (rev 207817)
+++ trunk/Source/WebCore/platform/mediastream/MediaEndpoint.cpp	2016-10-25 15:02:39 UTC (rev 207818)
@@ -57,7 +57,7 @@
 public:
     EmptyMediaEndpoint(MediaEndpointClient&) { }
 
-    void setConfiguration(RefPtr<MediaEndpointConfiguration>&&) override { }
+    void setConfiguration(MediaEndpointConfiguration&&) override { }
 
     void generateDtlsInfo() override { }
     MediaPayloadVector getDefaultAudioPayloads() override { return MediaPayloadVector(); }

Modified: trunk/Source/WebCore/platform/mediastream/MediaEndpoint.h (207817 => 207818)


--- trunk/Source/WebCore/platform/mediastream/MediaEndpoint.h	2016-10-25 14:16:15 UTC (rev 207817)
+++ trunk/Source/WebCore/platform/mediastream/MediaEndpoint.h	2016-10-25 15:02:39 UTC (rev 207818)
@@ -63,7 +63,7 @@
 
     using IceTransportState = PeerConnectionStates::IceTransportState;
 
-    virtual void setConfiguration(RefPtr<MediaEndpointConfiguration>&&) = 0;
+    virtual void setConfiguration(MediaEndpointConfiguration&&) = 0;
 
     virtual void generateDtlsInfo() = 0;
     virtual MediaPayloadVector getDefaultAudioPayloads() = 0;

Modified: trunk/Source/WebCore/platform/mediastream/MediaEndpointConfiguration.cpp (207817 => 207818)


--- trunk/Source/WebCore/platform/mediastream/MediaEndpointConfiguration.cpp	2016-10-25 14:16:15 UTC (rev 207817)
+++ trunk/Source/WebCore/platform/mediastream/MediaEndpointConfiguration.cpp	2016-10-25 15:02:39 UTC (rev 207818)
@@ -35,19 +35,17 @@
 
 namespace WebCore {
 
-IceServerInfo::IceServerInfo(const Vector<String>& urls, const String& credential, const String& username)
-    : m_credential(credential)
-    , m_username(username)
+MediaEndpointConfiguration::MediaEndpointConfiguration(Vector<IceServerInfo>&& iceServers, IceTransportPolicy iceTransportPolicy, BundlePolicy bundlePolicy)
+    : iceServers(WTFMove(iceServers))
+    , iceTransportPolicy(iceTransportPolicy)
+    , bundlePolicy(bundlePolicy)
 {
-    m_urls.reserveCapacity(urls.size());
-    for (auto& url : urls)
-        m_urls.append(URL(URL(), url));
 }
 
-MediaEndpointConfiguration::MediaEndpointConfiguration(Vector<RefPtr<IceServerInfo>>& iceServers, IceTransportPolicy iceTransportPolicy, BundlePolicy bundlePolicy)
-    : m_iceServers(iceServers)
-    , m_iceTransportPolicy(iceTransportPolicy)
-    , m_bundlePolicy(bundlePolicy)
+MediaEndpointConfiguration::IceServerInfo::IceServerInfo(Vector<URL>&& urls, const String& credential, const String& username)
+    : urls(WTFMove(urls))
+    , credential(credential)
+    , username(username)
 {
 }
 

Modified: trunk/Source/WebCore/platform/mediastream/MediaEndpointConfiguration.h (207817 => 207818)


--- trunk/Source/WebCore/platform/mediastream/MediaEndpointConfiguration.h	2016-10-25 14:16:15 UTC (rev 207817)
+++ trunk/Source/WebCore/platform/mediastream/MediaEndpointConfiguration.h	2016-10-25 15:02:39 UTC (rev 207818)
@@ -28,64 +28,37 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef MediaEndpointConfiguration_h
-#define MediaEndpointConfiguration_h
+#pragma once
 
 #if ENABLE(WEB_RTC)
 
 #include "PeerConnectionStates.h"
 #include "URL.h"
-#include <wtf/RefCounted.h>
-#include <wtf/RefPtr.h>
 #include <wtf/Vector.h>
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
-class IceServerInfo : public RefCounted<IceServerInfo> {
-public:
-    static RefPtr<IceServerInfo> create(const Vector<String>& urls, const String& credential, const String& username)
-    {
-        return adoptRef(new IceServerInfo(urls, credential, username));
-    }
-    virtual ~IceServerInfo() { }
+struct MediaEndpointConfiguration {
+    // FIXME: We might be able to remove these constructors once all compilers can handle without it (see https://bugs.webkit.org/show_bug.cgi?id=163255#c15)
+    struct IceServerInfo {
+        Vector<URL> urls;
+        String credential;
+        String username;
 
-    const Vector<URL>& urls() const { return m_urls; }
-    const String& credential() const { return m_credential; }
-    const String& username() const { return m_username; }
+        IceServerInfo(Vector<URL>&&, const String&, const String&);
+    };
 
-private:
-    IceServerInfo(const Vector<String>& urls, const String& credential, const String& username);
-
-    Vector<URL> m_urls;
-    String m_credential;
-    String m_username;
-};
-
-class MediaEndpointConfiguration : public RefCounted<MediaEndpointConfiguration> {
-public:
     using IceTransportPolicy = PeerConnectionStates::IceTransportPolicy;
     using BundlePolicy = PeerConnectionStates::BundlePolicy;
 
-    static RefPtr<MediaEndpointConfiguration> create(Vector<RefPtr<IceServerInfo>>& iceServers, IceTransportPolicy iceTransportPolicy, BundlePolicy bundlePolicy)
-    {
-        return adoptRef(new MediaEndpointConfiguration(iceServers, iceTransportPolicy, bundlePolicy));
-    }
+    MediaEndpointConfiguration(Vector<IceServerInfo>&&, IceTransportPolicy, BundlePolicy);
 
-    const Vector<RefPtr<IceServerInfo>>& iceServers() const { return m_iceServers; }
-    IceTransportPolicy iceTransportPolicy() const { return m_iceTransportPolicy; }
-    BundlePolicy bundlePolicy() const { return m_bundlePolicy; }
-
-private:
-    MediaEndpointConfiguration(Vector<RefPtr<IceServerInfo>>&, IceTransportPolicy, BundlePolicy);
-
-    Vector<RefPtr<IceServerInfo>> m_iceServers;
-    IceTransportPolicy m_iceTransportPolicy;
-    BundlePolicy m_bundlePolicy;
+    Vector<IceServerInfo> iceServers;
+    IceTransportPolicy iceTransportPolicy;
+    BundlePolicy bundlePolicy;
 };
 
 } // namespace WebCore
 
 #endif // ENABLE(WEB_RTC)
-
-#endif // MediaEndpointConfiguration_h

Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp (207817 => 207818)


--- trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp	2016-10-25 14:16:15 UTC (rev 207817)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp	2016-10-25 15:02:39 UTC (rev 207818)
@@ -89,9 +89,9 @@
     g_regex_unref(m_helperServerRegEx);
 }
 
-void MediaEndpointOwr::setConfiguration(RefPtr<MediaEndpointConfiguration>&& configuration)
+void MediaEndpointOwr::setConfiguration(MediaEndpointConfiguration&& configuration)
 {
-    m_configuration = configuration;
+    m_configuration = WTFMove(configuration);
 }
 
 static void cryptoDataCallback(gchar* privateKey, gchar* certificate, gchar* fingerprint, gchar* fingerprintFunction, gpointer data)
@@ -552,8 +552,9 @@
     if (!m_transportAgent) {
         m_transportAgent = owr_transport_agent_new(false);
 
-        for (auto& server : m_configuration->iceServers()) {
-            for (auto& webkitUrl : server->urls()) {
+        ASSERT(m_configuration);
+        for (auto& server : m_configuration->iceServers) {
+            for (auto& webkitUrl : server.urls) {
                 HelperServerUrl url;
                 // WebKit's URL class can't handle ICE helper server urls properly
                 parseHelperServerUrl(*m_helperServerRegEx, webkitUrl, url);
@@ -570,7 +571,7 @@
 
                     owr_transport_agent_add_helper_server(m_transportAgent, serverType,
                         url.host.ascii().data(), port,
-                        server->username().ascii().data(), server->credential().ascii().data());
+                        server.username.ascii().data(), server.credential.ascii().data());
                 } else
                     ASSERT_NOT_REACHED();
             }

Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h (207817 => 207818)


--- trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h	2016-10-25 14:16:15 UTC (rev 207817)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h	2016-10-25 15:02:39 UTC (rev 207818)
@@ -82,7 +82,7 @@
     MediaEndpointOwr(MediaEndpointClient&);
     ~MediaEndpointOwr();
 
-    void setConfiguration(RefPtr<MediaEndpointConfiguration>&&) override;
+    void setConfiguration(MediaEndpointConfiguration&&) override;
 
     void generateDtlsInfo() override;
     MediaPayloadVector getDefaultAudioPayloads() override;
@@ -125,7 +125,7 @@
     void ensureTransportAgentAndTransceivers(bool isInitiator, const Vector<TransceiverConfig>&);
     void internalAddRemoteCandidate(OwrSession*, IceCandidate&, const String& ufrag, const String& password);
 
-    RefPtr<MediaEndpointConfiguration> m_configuration;
+    Optional<MediaEndpointConfiguration> m_configuration;
     GRegex* m_helperServerRegEx;
 
     OwrTransportAgent* m_transportAgent;

Modified: trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp (207817 => 207818)


--- trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp	2016-10-25 14:16:15 UTC (rev 207817)
+++ trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp	2016-10-25 15:02:39 UTC (rev 207818)
@@ -63,11 +63,6 @@
     stop();
 }
 
-void MockMediaEndpoint::setConfiguration(RefPtr<MediaEndpointConfiguration>&& configuration)
-{
-    UNUSED_PARAM(configuration);
-}
-
 void MockMediaEndpoint::generateDtlsInfo()
 {
     callOnMainThread([this]() {

Modified: trunk/Source/WebCore/platform/mock/MockMediaEndpoint.h (207817 => 207818)


--- trunk/Source/WebCore/platform/mock/MockMediaEndpoint.h	2016-10-25 14:16:15 UTC (rev 207817)
+++ trunk/Source/WebCore/platform/mock/MockMediaEndpoint.h	2016-10-25 15:02:39 UTC (rev 207818)
@@ -38,7 +38,7 @@
 
 namespace WebCore {
 
-class MockMediaEndpoint : public MediaEndpoint {
+class MockMediaEndpoint final : public MediaEndpoint {
 public:
     WEBCORE_EXPORT static std::unique_ptr<MediaEndpoint> create(MediaEndpointClient&);
 
@@ -45,25 +45,25 @@
     MockMediaEndpoint(MediaEndpointClient&);
     ~MockMediaEndpoint();
 
-    void setConfiguration(RefPtr<MediaEndpointConfiguration>&&) override;
+    void setConfiguration(MediaEndpointConfiguration&&) final { };
 
-    void generateDtlsInfo() override;
-    MediaPayloadVector getDefaultAudioPayloads() override;
-    MediaPayloadVector getDefaultVideoPayloads() override;
-    MediaPayloadVector filterPayloads(const MediaPayloadVector& remotePayloads, const MediaPayloadVector& defaultPayloads) override;
+    void generateDtlsInfo() final;
+    MediaPayloadVector getDefaultAudioPayloads() final;
+    MediaPayloadVector getDefaultVideoPayloads() final;
+    MediaPayloadVector filterPayloads(const MediaPayloadVector& remotePayloads, const MediaPayloadVector& defaultPayloads) final;
 
-    UpdateResult updateReceiveConfiguration(MediaEndpointSessionConfiguration*, bool isInitiator) override;
-    UpdateResult updateSendConfiguration(MediaEndpointSessionConfiguration*, const RealtimeMediaSourceMap&, bool isInitiator) override;
+    UpdateResult updateReceiveConfiguration(MediaEndpointSessionConfiguration*, bool isInitiator) final;
+    UpdateResult updateSendConfiguration(MediaEndpointSessionConfiguration*, const RealtimeMediaSourceMap&, bool isInitiator) final;
 
-    void addRemoteCandidate(IceCandidate&, const String& mid, const String& ufrag, const String& password) override;
+    void addRemoteCandidate(IceCandidate&, const String& mid, const String& ufrag, const String& password) final;
 
-    Ref<RealtimeMediaSource> createMutedRemoteSource(const String& mid, RealtimeMediaSource::Type) override;
-    void replaceSendSource(RealtimeMediaSource&, const String& mid) override;
-    void replaceMutedRemoteSourceMid(const String& oldMid, const String& newMid) override;
+    Ref<RealtimeMediaSource> createMutedRemoteSource(const String& mid, RealtimeMediaSource::Type) final;
+    void replaceSendSource(RealtimeMediaSource&, const String& mid) final;
+    void replaceMutedRemoteSourceMid(const String& oldMid, const String& newMid) final;
 
-    void stop() override;
+    void stop() final;
 
-    void emulatePlatformEvent(const String& action) override;
+    void emulatePlatformEvent(const String& action) final;
 
 private:
     void updateConfigurationMids(const MediaEndpointSessionConfiguration&);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to