| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2016 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2016 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 } else if (!num_pending_partial_reports_) { | 408 } else if (!num_pending_partial_reports_) { |
| 409 // Only start gathering stats if we're not already gathering stats. In the | 409 // Only start gathering stats if we're not already gathering stats. In the |
| 410 // case of already gathering stats, |callback_| will be invoked when there | 410 // case of already gathering stats, |callback_| will be invoked when there |
| 411 // are no more pending partial reports. | 411 // are no more pending partial reports. |
| 412 | 412 |
| 413 // "Now" using a system clock, relative to the UNIX epoch (Jan 1, 1970, | 413 // "Now" using a system clock, relative to the UNIX epoch (Jan 1, 1970, |
| 414 // UTC), in microseconds. The system clock could be modified and is not | 414 // UTC), in microseconds. The system clock could be modified and is not |
| 415 // necessarily monotonically increasing. | 415 // necessarily monotonically increasing. |
| 416 int64_t timestamp_us = rtc::TimeUTCMicros(); | 416 int64_t timestamp_us = rtc::TimeUTCMicros(); |
| 417 | 417 |
| 418 num_pending_partial_reports_ = 3; | 418 num_pending_partial_reports_ = 2; |
| 419 partial_report_timestamp_us_ = cache_now_us; | 419 partial_report_timestamp_us_ = cache_now_us; |
| 420 invoker_.AsyncInvoke<void>(RTC_FROM_HERE, signaling_thread_, | |
| 421 rtc::Bind(&RTCStatsCollector::ProducePartialResultsOnSignalingThread, | |
| 422 rtc::scoped_refptr<RTCStatsCollector>(this), timestamp_us)); | |
| 423 | |
| 424 // TODO(hbos): No stats are gathered by | |
| 425 // |ProducePartialResultsOnWorkerThread|, remove it. | |
| 426 invoker_.AsyncInvoke<void>(RTC_FROM_HERE, worker_thread_, | |
| 427 rtc::Bind(&RTCStatsCollector::ProducePartialResultsOnWorkerThread, | |
| 428 rtc::scoped_refptr<RTCStatsCollector>(this), timestamp_us)); | |
| 429 | 420 |
| 430 // Prepare |channel_names_| and |media_info_| for use in | 421 // Prepare |channel_names_| and |media_info_| for use in |
| 431 // |ProducePartialResultsOnNetworkThread|. | 422 // |ProducePartialResultsOnNetworkThread|. |
| 432 channel_name_pairs_.reset(new ChannelNamePairs()); | 423 channel_name_pairs_.reset(new ChannelNamePairs()); |
| 433 if (pc_->session()->voice_channel()) { | 424 if (pc_->session()->voice_channel()) { |
| 434 channel_name_pairs_->voice = rtc::Optional<ChannelNamePair>( | 425 channel_name_pairs_->voice = rtc::Optional<ChannelNamePair>( |
| 435 ChannelNamePair(pc_->session()->voice_channel()->content_name(), | 426 ChannelNamePair(pc_->session()->voice_channel()->content_name(), |
| 436 pc_->session()->voice_channel()->transport_name())); | 427 pc_->session()->voice_channel()->transport_name())); |
| 437 } | 428 } |
| 438 if (pc_->session()->video_channel()) { | 429 if (pc_->session()->video_channel()) { |
| 439 channel_name_pairs_->video = rtc::Optional<ChannelNamePair>( | 430 channel_name_pairs_->video = rtc::Optional<ChannelNamePair>( |
| 440 ChannelNamePair(pc_->session()->video_channel()->content_name(), | 431 ChannelNamePair(pc_->session()->video_channel()->content_name(), |
| 441 pc_->session()->video_channel()->transport_name())); | 432 pc_->session()->video_channel()->transport_name())); |
| 442 } | 433 } |
| 443 if (pc_->session()->data_channel()) { | 434 if (pc_->session()->data_channel()) { |
| 444 channel_name_pairs_->data = rtc::Optional<ChannelNamePair>( | 435 channel_name_pairs_->data = rtc::Optional<ChannelNamePair>( |
| 445 ChannelNamePair(pc_->session()->data_channel()->content_name(), | 436 ChannelNamePair(pc_->session()->data_channel()->content_name(), |
| 446 pc_->session()->data_channel()->transport_name())); | 437 pc_->session()->data_channel()->transport_name())); |
| 447 } | 438 } |
| 448 media_info_.reset(PrepareMediaInfo_s().release()); | 439 media_info_.reset(PrepareMediaInfo_s().release()); |
| 440 |
| 449 invoker_.AsyncInvoke<void>(RTC_FROM_HERE, network_thread_, | 441 invoker_.AsyncInvoke<void>(RTC_FROM_HERE, network_thread_, |
| 450 rtc::Bind(&RTCStatsCollector::ProducePartialResultsOnNetworkThread, | 442 rtc::Bind(&RTCStatsCollector::ProducePartialResultsOnNetworkThread, |
| 451 rtc::scoped_refptr<RTCStatsCollector>(this), timestamp_us)); | 443 rtc::scoped_refptr<RTCStatsCollector>(this), timestamp_us)); |
| 444 ProducePartialResultsOnSignalingThread(timestamp_us); |
| 452 } | 445 } |
| 453 } | 446 } |
| 454 | 447 |
| 455 void RTCStatsCollector::ClearCachedStatsReport() { | 448 void RTCStatsCollector::ClearCachedStatsReport() { |
| 456 RTC_DCHECK(signaling_thread_->IsCurrent()); | 449 RTC_DCHECK(signaling_thread_->IsCurrent()); |
| 457 cached_report_ = nullptr; | 450 cached_report_ = nullptr; |
| 458 } | 451 } |
| 459 | 452 |
| 460 void RTCStatsCollector::WaitForPendingRequest() { | 453 void RTCStatsCollector::WaitForPendingRequest() { |
| 461 RTC_DCHECK(signaling_thread_->IsCurrent()); | 454 RTC_DCHECK(signaling_thread_->IsCurrent()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 474 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create( | 467 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create( |
| 475 timestamp_us); | 468 timestamp_us); |
| 476 | 469 |
| 477 ProduceDataChannelStats_s(timestamp_us, report.get()); | 470 ProduceDataChannelStats_s(timestamp_us, report.get()); |
| 478 ProduceMediaStreamAndTrackStats_s(timestamp_us, report.get()); | 471 ProduceMediaStreamAndTrackStats_s(timestamp_us, report.get()); |
| 479 ProducePeerConnectionStats_s(timestamp_us, report.get()); | 472 ProducePeerConnectionStats_s(timestamp_us, report.get()); |
| 480 | 473 |
| 481 AddPartialResults(report); | 474 AddPartialResults(report); |
| 482 } | 475 } |
| 483 | 476 |
| 484 void RTCStatsCollector::ProducePartialResultsOnWorkerThread( | |
| 485 int64_t timestamp_us) { | |
| 486 RTC_DCHECK(worker_thread_->IsCurrent()); | |
| 487 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create( | |
| 488 timestamp_us); | |
| 489 | |
| 490 // TODO(hbos): There are no stats to be gathered on this thread, remove this | |
| 491 // method. | |
| 492 | |
| 493 AddPartialResults(report); | |
| 494 } | |
| 495 | |
| 496 void RTCStatsCollector::ProducePartialResultsOnNetworkThread( | 477 void RTCStatsCollector::ProducePartialResultsOnNetworkThread( |
| 497 int64_t timestamp_us) { | 478 int64_t timestamp_us) { |
| 498 RTC_DCHECK(network_thread_->IsCurrent()); | 479 RTC_DCHECK(network_thread_->IsCurrent()); |
| 499 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create( | 480 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create( |
| 500 timestamp_us); | 481 timestamp_us); |
| 501 | 482 |
| 502 std::unique_ptr<SessionStats> session_stats = | 483 std::unique_ptr<SessionStats> session_stats = |
| 503 pc_->session()->GetStats(*channel_name_pairs_); | 484 pc_->session()->GetStats(*channel_name_pairs_); |
| 504 if (session_stats) { | 485 if (session_stats) { |
| 505 std::map<std::string, CertificateStatsPair> transport_cert_stats = | 486 std::map<std::string, CertificateStatsPair> transport_cert_stats = |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 955 const std::string& type) { | 936 const std::string& type) { |
| 956 return CandidateTypeToRTCIceCandidateType(type); | 937 return CandidateTypeToRTCIceCandidateType(type); |
| 957 } | 938 } |
| 958 | 939 |
| 959 const char* DataStateToRTCDataChannelStateForTesting( | 940 const char* DataStateToRTCDataChannelStateForTesting( |
| 960 DataChannelInterface::DataState state) { | 941 DataChannelInterface::DataState state) { |
| 961 return DataStateToRTCDataChannelState(state); | 942 return DataStateToRTCDataChannelState(state); |
| 962 } | 943 } |
| 963 | 944 |
| 964 } // namespace webrtc | 945 } // namespace webrtc |
| OLD | NEW |