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

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

Issue 2317063002: WebRTCPeerConnectionHandler::getStats for the new stats collector API (Closed)
Patch Set: Addressed comments Created 4 years, 3 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.cc
diff --git a/content/renderer/media/rtc_peer_connection_handler.cc b/content/renderer/media/rtc_peer_connection_handler.cc
index 24775fa98c0440ba1683458bd70efd9aede19d62..2830e2400c13190c810d147cb283164cb0007478 100644
--- a/content/renderer/media/rtc_peer_connection_handler.cc
+++ b/content/renderer/media/rtc_peer_connection_handler.cc
@@ -30,6 +30,7 @@
#include "content/renderer/media/rtc_data_channel_handler.h"
#include "content/renderer/media/rtc_dtmf_sender_handler.h"
#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
+#include "content/renderer/media/webrtc/rtc_stats.h"
#include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h"
#include "content/renderer/media/webrtc_audio_device_impl.h"
#include "content/renderer/media/webrtc_uma_histograms.h"
@@ -673,6 +674,57 @@ void GetStatsOnSignalingThread(
}
}
+// A stats collector callback.
+// It is invoked on the WebRTC signaling thread and will post a task to invoke
+// |callback| on the thread given in the |main_thread| argument.
+// The argument to the callback will be a |blink::WebRTCStatsReport|.
+class GetRTCStatsCallback : public webrtc::RTCStatsCollectorCallback {
+ public:
+ static rtc::scoped_refptr<GetRTCStatsCallback> Create(
+ const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
+ std::unique_ptr<blink::WebRTCStatsReportCallback> callback) {
+ return rtc::scoped_refptr<GetRTCStatsCallback>(
+ new rtc::RefCountedObject<GetRTCStatsCallback>(
+ main_thread, callback.release()));
perkj_chrome 2016/09/21 12:21:33 std::move - avoid using raw pointer.
hbos_chromium 2016/09/21 19:05:21 RefCountedObject's template constructors does not
perkj_chrome 2016/09/22 05:37:50 I see, that should be fixed.
+ }
+
+ void OnStatsDelivered(
+ const rtc::scoped_refptr<const webrtc::RTCStatsReport>& report) override {
+ main_thread_->PostTask(FROM_HERE,
+ base::Bind(&GetRTCStatsCallback::OnStatsDeliveredOnMainThread,
+ this, report));
+ }
+
+ void OnStatsDeliveredOnMainThread(
+ const rtc::scoped_refptr<const webrtc::RTCStatsReport>& report) {
+ DCHECK(main_thread_->BelongsToCurrentThread());
+ DCHECK(report);
+ callback_->OnStatsDelivered(std::unique_ptr<blink::WebRTCStatsReport>(
+ new RTCStatsReport(make_scoped_refptr(report.get()))));
+ }
+
+ protected:
+ GetRTCStatsCallback(
+ const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
+ blink::WebRTCStatsReportCallback* callback)
perkj_chrome 2016/09/21 12:21:33 std::unique_ptr<blink::WebRTCStatsReportCallback>
hbos_chromium 2016/09/21 19:05:21 See above.
+ : main_thread_(main_thread),
+ callback_(callback) {
+ }
+
+ const scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
+ std::unique_ptr<blink::WebRTCStatsReportCallback> callback_;
+};
+
+void GetRTCStatsOnSignalingThread(
+ const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
+ scoped_refptr<webrtc::PeerConnectionInterface> native_peer_connection,
+ std::unique_ptr<blink::WebRTCStatsReportCallback> callback) {
+ TRACE_EVENT0("webrtc", "GetRTCStatsOnSignalingThread");
+
+ native_peer_connection->GetStats(
+ GetRTCStatsCallback::Create(main_thread, std::move(callback)));
+}
+
class PeerConnectionUMAObserver : public webrtc::UMAObserver {
public:
PeerConnectionUMAObserver() {}
@@ -1503,7 +1555,10 @@ void RTCPeerConnectionHandler::getStats(
track_id, track_type);
}
-// TODO(tommi): It's weird to have three {g|G}etStats methods. Clean this up.
+// TODO(tommi,hbos): It's weird to have three {g|G}etStats methods for the
+// legacy stats collector API and even more for the new stats API. Clean it up.
+// TODO(hbos): Rename old |getStats| and related functions to "getLegacyStats",
+// rename new |getStats|'s helper functions from "GetRTCStats*" to "GetStats*".
void RTCPeerConnectionHandler::GetStats(
webrtc::StatsObserver* observer,
webrtc::PeerConnectionInterface::StatsOutputLevel level,
@@ -1515,6 +1570,15 @@ void RTCPeerConnectionHandler::GetStats(
make_scoped_refptr(observer), track_id, track_type));
}
+void RTCPeerConnectionHandler::getStats(
+ std::unique_ptr<blink::WebRTCStatsReportCallback> callback) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ signaling_thread()->PostTask(FROM_HERE,
+ base::Bind(&GetRTCStatsOnSignalingThread,
+ base::ThreadTaskRunnerHandle::Get(), native_peer_connection_,
+ base::Passed(&callback)));
+}
+
void RTCPeerConnectionHandler::CloseClientPeerConnection() {
DCHECK(thread_checker_.CalledOnValidThread());
if (!is_closed_)

Powered by Google App Engine
This is Rietveld 408576698