| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2  *  Copyright (c) 2015 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 | 
| 11 #include "webrtc/call/rtc_event_log.h" | 11 #include "webrtc/call/rtc_event_log.h" | 
| 12 | 12 | 
| 13 #include <deque> | 13 #include <deque> | 
| 14 #include <vector> | 14 #include <vector> | 
| 15 | 15 | 
| 16 #include "webrtc/base/checks.h" | 16 #include "webrtc/base/checks.h" | 
| 17 #include "webrtc/base/criticalsection.h" | 17 #include "webrtc/base/criticalsection.h" | 
| 18 #include "webrtc/base/thread_annotations.h" | 18 #include "webrtc/base/thread_annotations.h" | 
| 19 #include "webrtc/call.h" | 19 #include "webrtc/call.h" | 
|  | 20 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" | 
| 20 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" | 21 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" | 
|  | 22 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" | 
| 21 #include "webrtc/system_wrappers/include/clock.h" | 23 #include "webrtc/system_wrappers/include/clock.h" | 
| 22 #include "webrtc/system_wrappers/include/file_wrapper.h" | 24 #include "webrtc/system_wrappers/include/file_wrapper.h" | 
| 23 | 25 | 
| 24 #ifdef ENABLE_RTC_EVENT_LOG | 26 #ifdef ENABLE_RTC_EVENT_LOG | 
| 25 // Files generated at build-time by the protobuf compiler. | 27 // Files generated at build-time by the protobuf compiler. | 
| 26 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD | 28 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD | 
| 27 #include "external/webrtc/webrtc/call/rtc_event_log.pb.h" | 29 #include "external/webrtc/webrtc/call/rtc_event_log.pb.h" | 
| 28 #else | 30 #else | 
| 29 #include "webrtc/call/rtc_event_log.pb.h" | 31 #include "webrtc/call/rtc_event_log.pb.h" | 
| 30 #endif | 32 #endif | 
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 262   rtclog::Event event; | 264   rtclog::Event event; | 
| 263   event.set_timestamp_us(clock_->TimeInMicroseconds()); | 265   event.set_timestamp_us(clock_->TimeInMicroseconds()); | 
| 264   event.set_type(rtclog::Event::VIDEO_RECEIVER_CONFIG_EVENT); | 266   event.set_type(rtclog::Event::VIDEO_RECEIVER_CONFIG_EVENT); | 
| 265 | 267 | 
| 266   rtclog::VideoReceiveConfig* receiver_config = | 268   rtclog::VideoReceiveConfig* receiver_config = | 
| 267       event.mutable_video_receiver_config(); | 269       event.mutable_video_receiver_config(); | 
| 268   receiver_config->set_remote_ssrc(config.rtp.remote_ssrc); | 270   receiver_config->set_remote_ssrc(config.rtp.remote_ssrc); | 
| 269   receiver_config->set_local_ssrc(config.rtp.local_ssrc); | 271   receiver_config->set_local_ssrc(config.rtp.local_ssrc); | 
| 270 | 272 | 
| 271   receiver_config->set_rtcp_mode(ConvertRtcpMode(config.rtp.rtcp_mode)); | 273   receiver_config->set_rtcp_mode(ConvertRtcpMode(config.rtp.rtcp_mode)); | 
| 272 |  | 
| 273   receiver_config->set_receiver_reference_time_report( |  | 
| 274       config.rtp.rtcp_xr.receiver_reference_time_report); |  | 
| 275   receiver_config->set_remb(config.rtp.remb); | 274   receiver_config->set_remb(config.rtp.remb); | 
| 276 | 275 | 
| 277   for (const auto& kv : config.rtp.rtx) { | 276   for (const auto& kv : config.rtp.rtx) { | 
| 278     rtclog::RtxMap* rtx = receiver_config->add_rtx_map(); | 277     rtclog::RtxMap* rtx = receiver_config->add_rtx_map(); | 
| 279     rtx->set_payload_type(kv.first); | 278     rtx->set_payload_type(kv.first); | 
| 280     rtx->mutable_config()->set_rtx_ssrc(kv.second.ssrc); | 279     rtx->mutable_config()->set_rtx_ssrc(kv.second.ssrc); | 
| 281     rtx->mutable_config()->set_rtx_payload_type(kv.second.payload_type); | 280     rtx->mutable_config()->set_rtx_payload_type(kv.second.payload_type); | 
| 282   } | 281   } | 
| 283 | 282 | 
| 284   for (const auto& e : config.rtp.extensions) { | 283   for (const auto& e : config.rtp.extensions) { | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 315         sender_config->add_header_extensions(); | 314         sender_config->add_header_extensions(); | 
| 316     extension->set_name(e.name); | 315     extension->set_name(e.name); | 
| 317     extension->set_id(e.id); | 316     extension->set_id(e.id); | 
| 318   } | 317   } | 
| 319 | 318 | 
| 320   for (const auto& rtx_ssrc : config.rtp.rtx.ssrcs) { | 319   for (const auto& rtx_ssrc : config.rtp.rtx.ssrcs) { | 
| 321     sender_config->add_rtx_ssrcs(rtx_ssrc); | 320     sender_config->add_rtx_ssrcs(rtx_ssrc); | 
| 322   } | 321   } | 
| 323   sender_config->set_rtx_payload_type(config.rtp.rtx.payload_type); | 322   sender_config->set_rtx_payload_type(config.rtp.rtx.payload_type); | 
| 324 | 323 | 
| 325   sender_config->set_c_name(config.rtp.c_name); |  | 
| 326 |  | 
| 327   rtclog::EncoderConfig* encoder = sender_config->mutable_encoder(); | 324   rtclog::EncoderConfig* encoder = sender_config->mutable_encoder(); | 
| 328   encoder->set_name(config.encoder_settings.payload_name); | 325   encoder->set_name(config.encoder_settings.payload_name); | 
| 329   encoder->set_payload_type(config.encoder_settings.payload_type); | 326   encoder->set_payload_type(config.encoder_settings.payload_type); | 
| 330   HandleEvent(&event); | 327   HandleEvent(&event); | 
| 331 } | 328 } | 
| 332 | 329 | 
| 333 void RtcEventLogImpl::LogRtpHeader(bool incoming, | 330 void RtcEventLogImpl::LogRtpHeader(bool incoming, | 
| 334                                    MediaType media_type, | 331                                    MediaType media_type, | 
| 335                                    const uint8_t* header, | 332                                    const uint8_t* header, | 
| 336                                    size_t packet_length) { | 333                                    size_t packet_length) { | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
| 364 void RtcEventLogImpl::LogRtcpPacket(bool incoming, | 361 void RtcEventLogImpl::LogRtcpPacket(bool incoming, | 
| 365                                     MediaType media_type, | 362                                     MediaType media_type, | 
| 366                                     const uint8_t* packet, | 363                                     const uint8_t* packet, | 
| 367                                     size_t length) { | 364                                     size_t length) { | 
| 368   rtc::CritScope lock(&crit_); | 365   rtc::CritScope lock(&crit_); | 
| 369   rtclog::Event rtcp_event; | 366   rtclog::Event rtcp_event; | 
| 370   rtcp_event.set_timestamp_us(clock_->TimeInMicroseconds()); | 367   rtcp_event.set_timestamp_us(clock_->TimeInMicroseconds()); | 
| 371   rtcp_event.set_type(rtclog::Event::RTCP_EVENT); | 368   rtcp_event.set_type(rtclog::Event::RTCP_EVENT); | 
| 372   rtcp_event.mutable_rtcp_packet()->set_incoming(incoming); | 369   rtcp_event.mutable_rtcp_packet()->set_incoming(incoming); | 
| 373   rtcp_event.mutable_rtcp_packet()->set_type(ConvertMediaType(media_type)); | 370   rtcp_event.mutable_rtcp_packet()->set_type(ConvertMediaType(media_type)); | 
| 374   rtcp_event.mutable_rtcp_packet()->set_packet_data(packet, length); | 371 | 
|  | 372   RTCPUtility::RtcpCommonHeader header; | 
|  | 373   const uint8_t* block_begin = packet; | 
|  | 374   const uint8_t* packet_end = packet + length; | 
|  | 375   RTC_DCHECK(length <= IP_PACKET_SIZE); | 
|  | 376   uint8_t buffer[IP_PACKET_SIZE]; | 
|  | 377   uint32_t buffer_length = 0; | 
|  | 378   while (block_begin < packet_end) { | 
|  | 379     if (!RtcpParseCommonHeader(block_begin, packet_end - block_begin, | 
|  | 380                                &header)) { | 
|  | 381       break;  // Incorrect message header. | 
|  | 382     } | 
|  | 383     uint32_t block_size = header.BlockSize(); | 
|  | 384     switch (header.packet_type) { | 
|  | 385       case RTCPUtility::PT_SR: | 
|  | 386         FALLTHROUGH(); | 
|  | 387       case RTCPUtility::PT_RR: | 
|  | 388         FALLTHROUGH(); | 
|  | 389       case RTCPUtility::PT_BYE: | 
|  | 390         FALLTHROUGH(); | 
|  | 391       case RTCPUtility::PT_IJ: | 
|  | 392         FALLTHROUGH(); | 
|  | 393       case RTCPUtility::PT_RTPFB: | 
|  | 394         FALLTHROUGH(); | 
|  | 395       case RTCPUtility::PT_PSFB: | 
|  | 396         FALLTHROUGH(); | 
|  | 397       case RTCPUtility::PT_XR: | 
|  | 398         // We log sender reports, receiver reports, bye messages | 
|  | 399         // inter-arrival jitter, third-party loss reports, payload-specific | 
|  | 400         // feedback and extended reports. | 
|  | 401         memcpy(buffer + buffer_length, block_begin, block_size); | 
|  | 402         buffer_length += block_size; | 
|  | 403         break; | 
|  | 404       case RTCPUtility::PT_SDES: | 
|  | 405         FALLTHROUGH(); | 
|  | 406       case RTCPUtility::PT_APP: | 
|  | 407         FALLTHROUGH(); | 
|  | 408       default: | 
|  | 409         // We don't log sender descriptions, application defined messages | 
|  | 410         // or message blocks of unknown type. | 
|  | 411         break; | 
|  | 412     } | 
|  | 413 | 
|  | 414     block_begin += block_size; | 
|  | 415   } | 
|  | 416   rtcp_event.mutable_rtcp_packet()->set_packet_data(buffer, buffer_length); | 
| 375   HandleEvent(&rtcp_event); | 417   HandleEvent(&rtcp_event); | 
| 376 } | 418 } | 
| 377 | 419 | 
| 378 void RtcEventLogImpl::LogAudioPlayout(uint32_t ssrc) { | 420 void RtcEventLogImpl::LogAudioPlayout(uint32_t ssrc) { | 
| 379   rtc::CritScope lock(&crit_); | 421   rtc::CritScope lock(&crit_); | 
| 380   rtclog::Event event; | 422   rtclog::Event event; | 
| 381   event.set_timestamp_us(clock_->TimeInMicroseconds()); | 423   event.set_timestamp_us(clock_->TimeInMicroseconds()); | 
| 382   event.set_type(rtclog::Event::AUDIO_PLAYOUT_EVENT); | 424   event.set_type(rtclog::Event::AUDIO_PLAYOUT_EVENT); | 
| 383   auto playout_event = event.mutable_audio_playout_event(); | 425   auto playout_event = event.mutable_audio_playout_event(); | 
| 384   playout_event->set_local_ssrc(ssrc); | 426   playout_event->set_local_ssrc(ssrc); | 
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 472 } | 514 } | 
| 473 | 515 | 
| 474 #endif  // ENABLE_RTC_EVENT_LOG | 516 #endif  // ENABLE_RTC_EVENT_LOG | 
| 475 | 517 | 
| 476 // RtcEventLog member functions. | 518 // RtcEventLog member functions. | 
| 477 rtc::scoped_ptr<RtcEventLog> RtcEventLog::Create() { | 519 rtc::scoped_ptr<RtcEventLog> RtcEventLog::Create() { | 
| 478   return rtc::scoped_ptr<RtcEventLog>(new RtcEventLogImpl()); | 520   return rtc::scoped_ptr<RtcEventLog>(new RtcEventLogImpl()); | 
| 479 } | 521 } | 
| 480 | 522 | 
| 481 }  // namespace webrtc | 523 }  // namespace webrtc | 
| OLD | NEW | 
|---|