Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Unified Diff: content/renderer/media/rtc_peer_connection_handler.h

Issue 675013005: Split libjingle's signaling thread from the UI thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Broken changes for review Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/rtc_peer_connection_handler.h
diff --git a/content/renderer/media/rtc_peer_connection_handler.h b/content/renderer/media/rtc_peer_connection_handler.h
index 0a32c0f11c919b120960c905f2fe7bf486b84cf9..e421bd356d2037284218ebd79a81d673eb99c38c 100644
--- a/content/renderer/media/rtc_peer_connection_handler.h
+++ b/content/renderer/media/rtc_peer_connection_handler.h
@@ -11,8 +11,13 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "base/single_thread_task_runner.h"
+#include "base/threading/thread.h"
+#include "base/threading/thread_checker.h"
#include "content/common/content_export.h"
#include "content/renderer/media/webrtc/media_stream_track_metrics.h"
+#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
#include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandler.h"
#include "third_party/WebKit/public/platform/WebRTCStatsRequest.h"
#include "third_party/WebKit/public/platform/WebRTCStatsResponse.h"
@@ -28,6 +33,7 @@ namespace content {
class PeerConnectionDependencyFactory;
class PeerConnectionTracker;
class RemoteMediaStreamImpl;
+class RtcDataChannelHandler;
class RTCMediaConstraints;
class WebRtcMediaStreamAdapter;
@@ -72,7 +78,6 @@ class CONTENT_EXPORT LocalRTCStatsRequest
private:
blink::WebRTCStatsRequest impl_;
- rtc::scoped_refptr<LocalRTCStatsResponse> response_;
};
// RTCPeerConnectionHandler is a delegate for the RTC PeerConnection API
@@ -82,12 +87,12 @@ class CONTENT_EXPORT LocalRTCStatsRequest
// Callbacks to the webrtc::PeerConnectionObserver implementation also occur on
// the main render thread.
class CONTENT_EXPORT RTCPeerConnectionHandler
- : NON_EXPORTED_BASE(public blink::WebRTCPeerConnectionHandler),
- NON_EXPORTED_BASE(public webrtc::PeerConnectionObserver) {
+ : NON_EXPORTED_BASE(public blink::WebRTCPeerConnectionHandler) {
public:
RTCPeerConnectionHandler(
blink::WebRTCPeerConnectionHandlerClient* client,
- PeerConnectionDependencyFactory* dependency_factory);
+ PeerConnectionDependencyFactory* dependency_factory,
+ const scoped_refptr<base::SingleThreadTaskRunner>& signaling_thread);
virtual ~RTCPeerConnectionHandler();
// Destroy all existing RTCPeerConnectionHandler objects.
@@ -158,30 +163,16 @@ class CONTENT_EXPORT RTCPeerConnectionHandler
const blink::WebMediaStreamTrack& track) override;
virtual void stop() override;
- // webrtc::PeerConnectionObserver implementation
- void OnError() override;
- // Triggered when the SignalingState changed.
- void OnSignalingChange(
- webrtc::PeerConnectionInterface::SignalingState new_state) override;
- void OnAddStream(webrtc::MediaStreamInterface* stream) override;
- void OnRemoveStream(webrtc::MediaStreamInterface* stream) override;
- void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) override;
- void OnIceConnectionChange(
- webrtc::PeerConnectionInterface::IceConnectionState new_state) override;
- void OnIceGatheringChange(
- webrtc::PeerConnectionInterface::IceGatheringState new_state) override;
-
- void OnDataChannel(webrtc::DataChannelInterface* data_channel) override;
- void OnRenegotiationNeeded() override;
-
// Delegate functions to allow for mocking of WebKit interfaces.
// getStats takes ownership of request parameter.
- virtual void getStats(LocalRTCStatsRequest* request);
+ virtual void getStats(const scoped_refptr<LocalRTCStatsRequest>& request);
- // Calls GetStats on |native_peer_connection_|.
+ // Asynchronously calls native_peer_connection_->getStats on the signaling
+ // thread. If the |track_id| is empty, the |track_type| parameter is ignored.
void GetStats(webrtc::StatsObserver* observer,
- webrtc::MediaStreamTrackInterface* track,
- webrtc::PeerConnectionInterface::StatsOutputLevel level);
+ webrtc::PeerConnectionInterface::StatsOutputLevel level,
+ const std::string& track_id,
+ blink::WebMediaStreamSource::Type track_type);
// Tells the |client_| to close RTCPeerConnection.
void CloseClientPeerConnection();
@@ -193,20 +184,42 @@ class CONTENT_EXPORT RTCPeerConnectionHandler
return native_peer_connection_.get();
}
+ class Observer;
+ friend class Observer;
+
+ void OnSignalingChange(
+ webrtc::PeerConnectionInterface::SignalingState new_state);
+ void OnIceConnectionChange(
+ webrtc::PeerConnectionInterface::IceConnectionState new_state);
+ void OnIceGatheringChange(
+ webrtc::PeerConnectionInterface::IceGatheringState new_state);
+ void OnRenegotiationNeeded();
+ void OnAddStream(scoped_ptr<RemoteMediaStreamImpl> stream);
+ void OnRemoveStream(
+ const scoped_refptr<webrtc::MediaStreamInterface>& stream);
+ void OnDataChannel(scoped_ptr<RtcDataChannelHandler> handler);
+ void OnIceCandidate(const std::string& sdp, const std::string& sdp_mid,
+ int sdp_mline_index, int component, int address_family);
+
private:
webrtc::SessionDescriptionInterface* CreateNativeSessionDescription(
- const blink::WebRTCSessionDescription& description,
+ const std::string& sdp, const std::string& type,
webrtc::SdpParseError* error);
+ base::ThreadChecker thread_checker_;
+
// |client_| is a weak pointer, and is valid until stop() has returned.
blink::WebRTCPeerConnectionHandlerClient* client_;
// |dependency_factory_| is a raw pointer, and is valid for the lifetime of
// RenderThreadImpl.
- PeerConnectionDependencyFactory* dependency_factory_;
+ PeerConnectionDependencyFactory* const dependency_factory_;
blink::WebFrame* frame_;
+ // Libjingle's signaling thread.
+ const scoped_refptr<base::SingleThreadTaskRunner> signaling_thread_;
+
ScopedVector<WebRtcMediaStreamAdapter> local_streams_;
PeerConnectionTracker* peer_connection_tracker_;
@@ -222,12 +235,14 @@ class CONTENT_EXPORT RTCPeerConnectionHandler
// |native_peer_connection_| is the libjingle native PeerConnection object.
scoped_refptr<webrtc::PeerConnectionInterface> native_peer_connection_;
+ scoped_refptr<Observer> peer_connection_observer_;
typedef std::map<webrtc::MediaStreamInterface*,
content::RemoteMediaStreamImpl*> RemoteStreamMap;
RemoteStreamMap remote_streams_;
scoped_refptr<webrtc::UMAObserver> uma_observer_;
base::TimeTicks ice_connection_checking_start_;
+ base::WeakPtrFactory<RTCPeerConnectionHandler> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(RTCPeerConnectionHandler);
};

Powered by Google App Engine
This is Rietveld 408576698