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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/rtc_peer_connection_handler.h" 5 #include "content/renderer/media/rtc_peer_connection_handler.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 12 matching lines...) Expand all
23 #include "content/public/common/content_features.h" 23 #include "content/public/common/content_features.h"
24 #include "content/public/common/content_switches.h" 24 #include "content/public/common/content_switches.h"
25 #include "content/renderer/media/media_stream_constraints_util.h" 25 #include "content/renderer/media/media_stream_constraints_util.h"
26 #include "content/renderer/media/media_stream_track.h" 26 #include "content/renderer/media/media_stream_track.h"
27 #include "content/renderer/media/peer_connection_tracker.h" 27 #include "content/renderer/media/peer_connection_tracker.h"
28 #include "content/renderer/media/remote_media_stream_impl.h" 28 #include "content/renderer/media/remote_media_stream_impl.h"
29 #include "content/renderer/media/rtc_certificate.h" 29 #include "content/renderer/media/rtc_certificate.h"
30 #include "content/renderer/media/rtc_data_channel_handler.h" 30 #include "content/renderer/media/rtc_data_channel_handler.h"
31 #include "content/renderer/media/rtc_dtmf_sender_handler.h" 31 #include "content/renderer/media/rtc_dtmf_sender_handler.h"
32 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" 32 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
33 #include "content/renderer/media/webrtc/rtc_stats.h"
33 #include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h" 34 #include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h"
34 #include "content/renderer/media/webrtc_audio_device_impl.h" 35 #include "content/renderer/media/webrtc_audio_device_impl.h"
35 #include "content/renderer/media/webrtc_uma_histograms.h" 36 #include "content/renderer/media/webrtc_uma_histograms.h"
36 #include "content/renderer/render_thread_impl.h" 37 #include "content/renderer/render_thread_impl.h"
37 #include "media/base/media_switches.h" 38 #include "media/base/media_switches.h"
38 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" 39 #include "third_party/WebKit/public/platform/WebMediaConstraints.h"
39 #include "third_party/WebKit/public/platform/WebRTCAnswerOptions.h" 40 #include "third_party/WebKit/public/platform/WebRTCAnswerOptions.h"
40 #include "third_party/WebKit/public/platform/WebRTCConfiguration.h" 41 #include "third_party/WebKit/public/platform/WebRTCConfiguration.h"
41 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" 42 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h"
42 #include "third_party/WebKit/public/platform/WebRTCICECandidate.h" 43 #include "third_party/WebKit/public/platform/WebRTCICECandidate.h"
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 return; 667 return;
667 } 668 }
668 } 669 }
669 670
670 if (!pc->GetStats(observer.get(), track.get(), level)) { 671 if (!pc->GetStats(observer.get(), track.get(), level)) {
671 DVLOG(1) << "GetStats failed."; 672 DVLOG(1) << "GetStats failed.";
672 observer->OnComplete(StatsReports()); 673 observer->OnComplete(StatsReports());
673 } 674 }
674 } 675 }
675 676
677 // A stats collector callback.
678 // It is invoked on the WebRTC signaling thread and will post a task to invoke
679 // |callback| on the thread given in the |main_thread| argument.
680 // The argument to the callback will be a |blink::WebRTCStatsReport|.
681 class GetRTCStatsCallback : public webrtc::RTCStatsCollectorCallback {
682 public:
683 static rtc::scoped_refptr<GetRTCStatsCallback> Create(
684 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
685 std::unique_ptr<blink::WebRTCStatsReportCallback> callback) {
686 return rtc::scoped_refptr<GetRTCStatsCallback>(
687 new rtc::RefCountedObject<GetRTCStatsCallback>(
688 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.
689 }
690
691 void OnStatsDelivered(
692 const rtc::scoped_refptr<const webrtc::RTCStatsReport>& report) override {
693 main_thread_->PostTask(FROM_HERE,
694 base::Bind(&GetRTCStatsCallback::OnStatsDeliveredOnMainThread,
695 this, report));
696 }
697
698 void OnStatsDeliveredOnMainThread(
699 const rtc::scoped_refptr<const webrtc::RTCStatsReport>& report) {
700 DCHECK(main_thread_->BelongsToCurrentThread());
701 DCHECK(report);
702 callback_->OnStatsDelivered(std::unique_ptr<blink::WebRTCStatsReport>(
703 new RTCStatsReport(make_scoped_refptr(report.get()))));
704 }
705
706 protected:
707 GetRTCStatsCallback(
708 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
709 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.
710 : main_thread_(main_thread),
711 callback_(callback) {
712 }
713
714 const scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
715 std::unique_ptr<blink::WebRTCStatsReportCallback> callback_;
716 };
717
718 void GetRTCStatsOnSignalingThread(
719 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
720 scoped_refptr<webrtc::PeerConnectionInterface> native_peer_connection,
721 std::unique_ptr<blink::WebRTCStatsReportCallback> callback) {
722 TRACE_EVENT0("webrtc", "GetRTCStatsOnSignalingThread");
723
724 native_peer_connection->GetStats(
725 GetRTCStatsCallback::Create(main_thread, std::move(callback)));
726 }
727
676 class PeerConnectionUMAObserver : public webrtc::UMAObserver { 728 class PeerConnectionUMAObserver : public webrtc::UMAObserver {
677 public: 729 public:
678 PeerConnectionUMAObserver() {} 730 PeerConnectionUMAObserver() {}
679 ~PeerConnectionUMAObserver() override {} 731 ~PeerConnectionUMAObserver() override {}
680 void IncrementEnumCounter(webrtc::PeerConnectionEnumCounterType counter_type, 732 void IncrementEnumCounter(webrtc::PeerConnectionEnumCounterType counter_type,
681 int counter, 733 int counter,
682 int counter_max) override { 734 int counter_max) override {
683 switch (counter_type) { 735 switch (counter_type) {
684 case webrtc::kEnumCounterAddressFamily: 736 case webrtc::kEnumCounterAddressFamily:
685 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.IPMetrics", counter, 737 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.IPMetrics", counter,
(...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after
1496 blink::WebMediaStreamSource::TypeAudio; 1548 blink::WebMediaStreamSource::TypeAudio;
1497 if (request->hasSelector()) { 1549 if (request->hasSelector()) {
1498 track_type = request->component().source().getType(); 1550 track_type = request->component().source().getType();
1499 track_id = request->component().id().utf8(); 1551 track_id = request->component().id().utf8();
1500 } 1552 }
1501 1553
1502 GetStats(observer, webrtc::PeerConnectionInterface::kStatsOutputLevelStandard, 1554 GetStats(observer, webrtc::PeerConnectionInterface::kStatsOutputLevelStandard,
1503 track_id, track_type); 1555 track_id, track_type);
1504 } 1556 }
1505 1557
1506 // TODO(tommi): It's weird to have three {g|G}etStats methods. Clean this up. 1558 // TODO(tommi,hbos): It's weird to have three {g|G}etStats methods for the
1559 // legacy stats collector API and even more for the new stats API. Clean it up.
1560 // TODO(hbos): Rename old |getStats| and related functions to "getLegacyStats",
1561 // rename new |getStats|'s helper functions from "GetRTCStats*" to "GetStats*".
1507 void RTCPeerConnectionHandler::GetStats( 1562 void RTCPeerConnectionHandler::GetStats(
1508 webrtc::StatsObserver* observer, 1563 webrtc::StatsObserver* observer,
1509 webrtc::PeerConnectionInterface::StatsOutputLevel level, 1564 webrtc::PeerConnectionInterface::StatsOutputLevel level,
1510 const std::string& track_id, 1565 const std::string& track_id,
1511 blink::WebMediaStreamSource::Type track_type) { 1566 blink::WebMediaStreamSource::Type track_type) {
1512 DCHECK(thread_checker_.CalledOnValidThread()); 1567 DCHECK(thread_checker_.CalledOnValidThread());
1513 signaling_thread()->PostTask(FROM_HERE, 1568 signaling_thread()->PostTask(FROM_HERE,
1514 base::Bind(&GetStatsOnSignalingThread, native_peer_connection_, level, 1569 base::Bind(&GetStatsOnSignalingThread, native_peer_connection_, level,
1515 make_scoped_refptr(observer), track_id, track_type)); 1570 make_scoped_refptr(observer), track_id, track_type));
1516 } 1571 }
1517 1572
1573 void RTCPeerConnectionHandler::getStats(
1574 std::unique_ptr<blink::WebRTCStatsReportCallback> callback) {
1575 DCHECK(thread_checker_.CalledOnValidThread());
1576 signaling_thread()->PostTask(FROM_HERE,
1577 base::Bind(&GetRTCStatsOnSignalingThread,
1578 base::ThreadTaskRunnerHandle::Get(), native_peer_connection_,
1579 base::Passed(&callback)));
1580 }
1581
1518 void RTCPeerConnectionHandler::CloseClientPeerConnection() { 1582 void RTCPeerConnectionHandler::CloseClientPeerConnection() {
1519 DCHECK(thread_checker_.CalledOnValidThread()); 1583 DCHECK(thread_checker_.CalledOnValidThread());
1520 if (!is_closed_) 1584 if (!is_closed_)
1521 client_->closePeerConnection(); 1585 client_->closePeerConnection();
1522 } 1586 }
1523 1587
1524 void RTCPeerConnectionHandler::StartEventLog(IPC::PlatformFileForTransit file, 1588 void RTCPeerConnectionHandler::StartEventLog(IPC::PlatformFileForTransit file,
1525 int64_t max_file_size_bytes) { 1589 int64_t max_file_size_bytes) {
1526 DCHECK(thread_checker_.CalledOnValidThread()); 1590 DCHECK(thread_checker_.CalledOnValidThread());
1527 DCHECK(file != IPC::InvalidPlatformFileForTransit()); 1591 DCHECK(file != IPC::InvalidPlatformFileForTransit());
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
1889 } 1953 }
1890 1954
1891 void RTCPeerConnectionHandler::ResetUMAStats() { 1955 void RTCPeerConnectionHandler::ResetUMAStats() {
1892 DCHECK(thread_checker_.CalledOnValidThread()); 1956 DCHECK(thread_checker_.CalledOnValidThread());
1893 num_local_candidates_ipv6_ = 0; 1957 num_local_candidates_ipv6_ = 0;
1894 num_local_candidates_ipv4_ = 0; 1958 num_local_candidates_ipv4_ = 0;
1895 ice_connection_checking_start_ = base::TimeTicks(); 1959 ice_connection_checking_start_ = base::TimeTicks();
1896 memset(ice_state_seen_, 0, sizeof(ice_state_seen_)); 1960 memset(ice_state_seen_, 0, sizeof(ice_state_seen_));
1897 } 1961 }
1898 } // namespace content 1962 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698