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

Side by Side Diff: webrtc/call/rtc_event_log.cc

Issue 1411673003: Added protobuf message for loss-based BWE events, and wired it up to the send side bandwidth estima… (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase Created 5 years, 1 month 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
« no previous file with comments | « webrtc/call/rtc_event_log.h ('k') | webrtc/call/rtc_event_log.proto » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 const VideoSendStream::Config& config) override {} 47 const VideoSendStream::Config& config) override {}
48 void LogRtpHeader(bool incoming, 48 void LogRtpHeader(bool incoming,
49 MediaType media_type, 49 MediaType media_type,
50 const uint8_t* header, 50 const uint8_t* header,
51 size_t packet_length) override {} 51 size_t packet_length) override {}
52 void LogRtcpPacket(bool incoming, 52 void LogRtcpPacket(bool incoming,
53 MediaType media_type, 53 MediaType media_type,
54 const uint8_t* packet, 54 const uint8_t* packet,
55 size_t length) override {} 55 size_t length) override {}
56 void LogAudioPlayout(uint32_t ssrc) override {} 56 void LogAudioPlayout(uint32_t ssrc) override {}
57 void LogBwePacketLossEvent(int32_t bitrate,
58 uint8_t fraction_loss,
59 int32_t total_packets) override {}
57 }; 60 };
58 61
59 #else // ENABLE_RTC_EVENT_LOG is defined 62 #else // ENABLE_RTC_EVENT_LOG is defined
60 63
61 class RtcEventLogImpl final : public RtcEventLog { 64 class RtcEventLogImpl final : public RtcEventLog {
62 public: 65 public:
63 RtcEventLogImpl(); 66 RtcEventLogImpl();
64 67
65 void SetBufferDuration(int64_t buffer_duration_us) override; 68 void SetBufferDuration(int64_t buffer_duration_us) override;
66 void StartLogging(const std::string& file_name, int duration_ms) override; 69 void StartLogging(const std::string& file_name, int duration_ms) override;
67 bool StartLogging(rtc::PlatformFile log_file) override; 70 bool StartLogging(rtc::PlatformFile log_file) override;
68 void StopLogging() override; 71 void StopLogging() override;
69 void LogVideoReceiveStreamConfig( 72 void LogVideoReceiveStreamConfig(
70 const VideoReceiveStream::Config& config) override; 73 const VideoReceiveStream::Config& config) override;
71 void LogVideoSendStreamConfig(const VideoSendStream::Config& config) override; 74 void LogVideoSendStreamConfig(const VideoSendStream::Config& config) override;
72 void LogRtpHeader(bool incoming, 75 void LogRtpHeader(bool incoming,
73 MediaType media_type, 76 MediaType media_type,
74 const uint8_t* header, 77 const uint8_t* header,
75 size_t packet_length) override; 78 size_t packet_length) override;
76 void LogRtcpPacket(bool incoming, 79 void LogRtcpPacket(bool incoming,
77 MediaType media_type, 80 MediaType media_type,
78 const uint8_t* packet, 81 const uint8_t* packet,
79 size_t length) override; 82 size_t length) override;
80 void LogAudioPlayout(uint32_t ssrc) override; 83 void LogAudioPlayout(uint32_t ssrc) override;
84 void LogBwePacketLossEvent(int32_t bitrate,
85 uint8_t fraction_loss,
86 int32_t total_packets) override;
81 87
82 private: 88 private:
83 // Starts logging. This function assumes the file_ has been opened succesfully 89 // Starts logging. This function assumes the file_ has been opened succesfully
84 // and that the start_time_us_ and _duration_us_ have been set. 90 // and that the start_time_us_ and _duration_us_ have been set.
85 void StartLoggingLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_); 91 void StartLoggingLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_);
86 // Stops logging and clears the stored data and buffers. 92 // Stops logging and clears the stored data and buffers.
87 void StopLoggingLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_); 93 void StopLoggingLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_);
88 // Adds a new event to the logfile if logging is active, or adds it to the 94 // Adds a new event to the logfile if logging is active, or adds it to the
89 // list of recent log events otherwise. 95 // list of recent log events otherwise.
90 void HandleEvent(rtclog::Event* event) EXCLUSIVE_LOCKS_REQUIRED(crit_); 96 void HandleEvent(rtclog::Event* event) EXCLUSIVE_LOCKS_REQUIRED(crit_);
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 void RtcEventLogImpl::StopLogging() { 253 void RtcEventLogImpl::StopLogging() {
248 rtc::CritScope lock(&crit_); 254 rtc::CritScope lock(&crit_);
249 StopLoggingLocked(); 255 StopLoggingLocked();
250 } 256 }
251 257
252 void RtcEventLogImpl::LogVideoReceiveStreamConfig( 258 void RtcEventLogImpl::LogVideoReceiveStreamConfig(
253 const VideoReceiveStream::Config& config) { 259 const VideoReceiveStream::Config& config) {
254 rtc::CritScope lock(&crit_); 260 rtc::CritScope lock(&crit_);
255 261
256 rtclog::Event event; 262 rtclog::Event event;
257 const int64_t timestamp = clock_->TimeInMicroseconds(); 263 event.set_timestamp_us(clock_->TimeInMicroseconds());
258 event.set_timestamp_us(timestamp);
259 event.set_type(rtclog::Event::VIDEO_RECEIVER_CONFIG_EVENT); 264 event.set_type(rtclog::Event::VIDEO_RECEIVER_CONFIG_EVENT);
260 265
261 rtclog::VideoReceiveConfig* receiver_config = 266 rtclog::VideoReceiveConfig* receiver_config =
262 event.mutable_video_receiver_config(); 267 event.mutable_video_receiver_config();
263 receiver_config->set_remote_ssrc(config.rtp.remote_ssrc); 268 receiver_config->set_remote_ssrc(config.rtp.remote_ssrc);
264 receiver_config->set_local_ssrc(config.rtp.local_ssrc); 269 receiver_config->set_local_ssrc(config.rtp.local_ssrc);
265 270
266 receiver_config->set_rtcp_mode(ConvertRtcpMode(config.rtp.rtcp_mode)); 271 receiver_config->set_rtcp_mode(ConvertRtcpMode(config.rtp.rtcp_mode));
267 272
268 receiver_config->set_receiver_reference_time_report( 273 receiver_config->set_receiver_reference_time_report(
(...skipping 20 matching lines...) Expand all
289 decoder->set_payload_type(d.payload_type); 294 decoder->set_payload_type(d.payload_type);
290 } 295 }
291 HandleEvent(&event); 296 HandleEvent(&event);
292 } 297 }
293 298
294 void RtcEventLogImpl::LogVideoSendStreamConfig( 299 void RtcEventLogImpl::LogVideoSendStreamConfig(
295 const VideoSendStream::Config& config) { 300 const VideoSendStream::Config& config) {
296 rtc::CritScope lock(&crit_); 301 rtc::CritScope lock(&crit_);
297 302
298 rtclog::Event event; 303 rtclog::Event event;
299 const int64_t timestamp = clock_->TimeInMicroseconds(); 304 event.set_timestamp_us(clock_->TimeInMicroseconds());
300 event.set_timestamp_us(timestamp);
301 event.set_type(rtclog::Event::VIDEO_SENDER_CONFIG_EVENT); 305 event.set_type(rtclog::Event::VIDEO_SENDER_CONFIG_EVENT);
302 306
303 rtclog::VideoSendConfig* sender_config = event.mutable_video_sender_config(); 307 rtclog::VideoSendConfig* sender_config = event.mutable_video_sender_config();
304 308
305 for (const auto& ssrc : config.rtp.ssrcs) { 309 for (const auto& ssrc : config.rtp.ssrcs) {
306 sender_config->add_ssrcs(ssrc); 310 sender_config->add_ssrcs(ssrc);
307 } 311 }
308 312
309 for (const auto& e : config.rtp.extensions) { 313 for (const auto& e : config.rtp.extensions) {
310 rtclog::RtpHeaderExtension* extension = 314 rtclog::RtpHeaderExtension* extension =
(...skipping 30 matching lines...) Expand all
341 if (x) { 345 if (x) {
342 if (packet_length < 12u + cc * 4u + 4u) { 346 if (packet_length < 12u + cc * 4u + 4u) {
343 return; // Don't read outside the packet. 347 return; // Don't read outside the packet.
344 } 348 }
345 size_t x_len = ByteReader<uint16_t>::ReadBigEndian(header + 14 + cc * 4); 349 size_t x_len = ByteReader<uint16_t>::ReadBigEndian(header + 14 + cc * 4);
346 header_length += (x_len + 1) * 4; 350 header_length += (x_len + 1) * 4;
347 } 351 }
348 352
349 rtc::CritScope lock(&crit_); 353 rtc::CritScope lock(&crit_);
350 rtclog::Event rtp_event; 354 rtclog::Event rtp_event;
351 const int64_t timestamp = clock_->TimeInMicroseconds(); 355 rtp_event.set_timestamp_us(clock_->TimeInMicroseconds());
352 rtp_event.set_timestamp_us(timestamp);
353 rtp_event.set_type(rtclog::Event::RTP_EVENT); 356 rtp_event.set_type(rtclog::Event::RTP_EVENT);
354 rtp_event.mutable_rtp_packet()->set_incoming(incoming); 357 rtp_event.mutable_rtp_packet()->set_incoming(incoming);
355 rtp_event.mutable_rtp_packet()->set_type(ConvertMediaType(media_type)); 358 rtp_event.mutable_rtp_packet()->set_type(ConvertMediaType(media_type));
356 rtp_event.mutable_rtp_packet()->set_packet_length(packet_length); 359 rtp_event.mutable_rtp_packet()->set_packet_length(packet_length);
357 rtp_event.mutable_rtp_packet()->set_header(header, header_length); 360 rtp_event.mutable_rtp_packet()->set_header(header, header_length);
358 HandleEvent(&rtp_event); 361 HandleEvent(&rtp_event);
359 } 362 }
360 363
361 void RtcEventLogImpl::LogRtcpPacket(bool incoming, 364 void RtcEventLogImpl::LogRtcpPacket(bool incoming,
362 MediaType media_type, 365 MediaType media_type,
363 const uint8_t* packet, 366 const uint8_t* packet,
364 size_t length) { 367 size_t length) {
365 rtc::CritScope lock(&crit_); 368 rtc::CritScope lock(&crit_);
366 rtclog::Event rtcp_event; 369 rtclog::Event rtcp_event;
367 const int64_t timestamp = clock_->TimeInMicroseconds(); 370 rtcp_event.set_timestamp_us(clock_->TimeInMicroseconds());
368 rtcp_event.set_timestamp_us(timestamp);
369 rtcp_event.set_type(rtclog::Event::RTCP_EVENT); 371 rtcp_event.set_type(rtclog::Event::RTCP_EVENT);
370 rtcp_event.mutable_rtcp_packet()->set_incoming(incoming); 372 rtcp_event.mutable_rtcp_packet()->set_incoming(incoming);
371 rtcp_event.mutable_rtcp_packet()->set_type(ConvertMediaType(media_type)); 373 rtcp_event.mutable_rtcp_packet()->set_type(ConvertMediaType(media_type));
372 rtcp_event.mutable_rtcp_packet()->set_packet_data(packet, length); 374 rtcp_event.mutable_rtcp_packet()->set_packet_data(packet, length);
373 HandleEvent(&rtcp_event); 375 HandleEvent(&rtcp_event);
374 } 376 }
375 377
376 void RtcEventLogImpl::LogAudioPlayout(uint32_t ssrc) { 378 void RtcEventLogImpl::LogAudioPlayout(uint32_t ssrc) {
377 rtc::CritScope lock(&crit_); 379 rtc::CritScope lock(&crit_);
378 rtclog::Event event; 380 rtclog::Event event;
379 const int64_t timestamp = clock_->TimeInMicroseconds(); 381 event.set_timestamp_us(clock_->TimeInMicroseconds());
380 event.set_timestamp_us(timestamp);
381 event.set_type(rtclog::Event::AUDIO_PLAYOUT_EVENT); 382 event.set_type(rtclog::Event::AUDIO_PLAYOUT_EVENT);
382 auto playout_event = event.mutable_audio_playout_event(); 383 auto playout_event = event.mutable_audio_playout_event();
383 playout_event->set_local_ssrc(ssrc); 384 playout_event->set_local_ssrc(ssrc);
384 HandleEvent(&event); 385 HandleEvent(&event);
385 } 386 }
386 387
388 void RtcEventLogImpl::LogBwePacketLossEvent(int32_t bitrate,
389 uint8_t fraction_loss,
390 int32_t total_packets) {
391 rtc::CritScope lock(&crit_);
392 rtclog::Event event;
393 event.set_timestamp_us(clock_->TimeInMicroseconds());
394 event.set_type(rtclog::Event::BWE_PACKET_LOSS_EVENT);
395 auto bwe_event = event.mutable_bwe_packet_loss_event();
396 bwe_event->set_bitrate(bitrate);
397 bwe_event->set_fraction_loss(fraction_loss);
398 bwe_event->set_total_packets(total_packets);
399 HandleEvent(&event);
400 }
401
387 void RtcEventLogImpl::StopLoggingLocked() { 402 void RtcEventLogImpl::StopLoggingLocked() {
388 if (currently_logging_) { 403 if (currently_logging_) {
389 currently_logging_ = false; 404 currently_logging_ = false;
390 // Create a LogEnd event 405 // Create a LogEnd event
391 rtclog::Event event; 406 rtclog::Event event;
392 int64_t timestamp = clock_->TimeInMicroseconds(); 407 event.set_timestamp_us(clock_->TimeInMicroseconds());
393 event.set_timestamp_us(timestamp);
394 event.set_type(rtclog::Event::LOG_END); 408 event.set_type(rtclog::Event::LOG_END);
395 // Store the event and close the file 409 // Store the event and close the file
396 RTC_DCHECK(file_->Open()); 410 RTC_DCHECK(file_->Open());
397 StoreToFile(&event); 411 StoreToFile(&event);
398 file_->CloseFile(); 412 file_->CloseFile();
399 if (platform_file_ != rtc::kInvalidPlatformFileValue) { 413 if (platform_file_ != rtc::kInvalidPlatformFileValue) {
400 rtc::ClosePlatformFile(platform_file_); 414 rtc::ClosePlatformFile(platform_file_);
401 platform_file_ = rtc::kInvalidPlatformFileValue; 415 platform_file_ = rtc::kInvalidPlatformFileValue;
402 } 416 }
403 } 417 }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 } 472 }
459 473
460 #endif // ENABLE_RTC_EVENT_LOG 474 #endif // ENABLE_RTC_EVENT_LOG
461 475
462 // RtcEventLog member functions. 476 // RtcEventLog member functions.
463 rtc::scoped_ptr<RtcEventLog> RtcEventLog::Create() { 477 rtc::scoped_ptr<RtcEventLog> RtcEventLog::Create() {
464 return rtc::scoped_ptr<RtcEventLog>(new RtcEventLogImpl()); 478 return rtc::scoped_ptr<RtcEventLog>(new RtcEventLogImpl());
465 } 479 }
466 480
467 } // namespace webrtc 481 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/call/rtc_event_log.h ('k') | webrtc/call/rtc_event_log.proto » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698