Index: chrome/renderer/media/cast_session_delegate.cc |
diff --git a/chrome/renderer/media/cast_session_delegate.cc b/chrome/renderer/media/cast_session_delegate.cc |
index d5133b61cc0259899b38a5d422f96ca694b321a3..ce2603744dacf0176dfd4e091aa60f36a421e979 100644 |
--- a/chrome/renderer/media/cast_session_delegate.cc |
+++ b/chrome/renderer/media/cast_session_delegate.cc |
@@ -12,6 +12,7 @@ |
#include "media/cast/cast_config.h" |
#include "media/cast/cast_environment.h" |
#include "media/cast/cast_sender.h" |
+#include "media/cast/logging/encoding_event_subscriber.h" |
#include "media/cast/logging/logging_defines.h" |
#include "media/cast/transport/cast_transport_config.h" |
#include "media/cast/transport/cast_transport_sender.h" |
@@ -21,6 +22,18 @@ using media::cast::CastEnvironment; |
using media::cast::CastSender; |
using media::cast::VideoSenderConfig; |
+namespace { |
+ |
+// Allow about 9MB for video event logs. Assume serialized log data for |
+// each frame will take up to 150 bytes. |
+const int kMaxVideoEventEntries = 9000000 / 150; |
+ |
+// Allow about 9MB for audio event logs. Assume serialized log data for |
+// each frame will take up to 75 bytes. |
+const int kMaxAudioEventEntries = 9000000 / 75; |
+ |
+} // namespace |
+ |
CastSessionDelegate::CastSessionDelegate() |
: audio_encode_thread_("CastAudioEncodeThread"), |
video_encode_thread_("CastVideoEncodeThread"), |
@@ -32,6 +45,15 @@ CastSessionDelegate::CastSessionDelegate() |
CastSessionDelegate::~CastSessionDelegate() { |
DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); |
+ |
+ if (audio_event_subscriber_.get()) { |
+ cast_environment_->Logging()->RemoveRawEventSubscriber( |
+ audio_event_subscriber_.get()); |
+ } |
+ if (video_event_subscriber_.get()) { |
+ cast_environment_->Logging()->RemoveRawEventSubscriber( |
+ video_event_subscriber_.get()); |
+ } |
} |
void CastSessionDelegate::Initialize() { |
@@ -86,6 +108,16 @@ void CastSessionDelegate::StartUDP( |
StartSendingInternal(); |
} |
+void CastSessionDelegate::GetEventLogsAndReset( |
+ const EventLogsCallback& callback) { |
+ if (!cast_sender_.get()) |
+ return; |
+ |
+ // TODO(imcheng): Get data from event subscribers. |
+ scoped_ptr<std::string> result(new std::string); |
+ callback.Run(result.Pass()); |
+} |
+ |
void CastSessionDelegate::StatusNotificationCB( |
media::cast::transport::CastTransportStatus unused_status) { |
DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); |
@@ -116,11 +148,25 @@ void CastSessionDelegate::StartSendingInternal() { |
config.audio_rtp_config = audio_config_->rtp_config; |
config.audio_frequency = audio_config_->frequency; |
config.audio_channels = audio_config_->channels; |
+ |
+ if (!audio_event_subscriber_.get()) { |
+ audio_event_subscriber_.reset(new media::cast::EncodingEventSubscriber( |
+ media::cast::AUDIO_EVENT, kMaxAudioEventEntries)); |
+ cast_environment_->Logging()->AddRawEventSubscriber( |
+ audio_event_subscriber_.get()); |
+ } |
} |
if (video_config_) { |
config.video_ssrc = video_config_->sender_ssrc; |
config.video_codec = video_config_->codec; |
config.video_rtp_config = video_config_->rtp_config; |
+ |
+ if (!video_event_subscriber_.get()) { |
+ video_event_subscriber_.reset(new media::cast::EncodingEventSubscriber( |
+ media::cast::VIDEO_EVENT, kMaxVideoEventEntries)); |
+ cast_environment_->Logging()->AddRawEventSubscriber( |
+ video_event_subscriber_.get()); |
+ } |
} |
cast_transport_.reset(new CastTransportSenderIPC( |