Index: media/cast/transport/cast_transport_sender_impl.cc |
diff --git a/media/cast/transport/cast_transport_sender_impl.cc b/media/cast/transport/cast_transport_sender_impl.cc |
index d8f0de2b5df97b954446cf0e5f3718c95b4bce5d..3c288298c613de71f21f58830435fa17a4605b2d 100644 |
--- a/media/cast/transport/cast_transport_sender_impl.cc |
+++ b/media/cast/transport/cast_transport_sender_impl.cc |
@@ -16,12 +16,18 @@ CastTransportSender* CastTransportSender::CreateCastTransportSender( |
net::NetLog* net_log, |
base::TickClock* clock, |
const CastTransportConfig& config, |
+ const CastLoggingConfig& logging_config, |
const CastTransportStatusCallback& status_callback, |
+ const BulkRawEventsCallback& raw_events_callback, |
+ base::TimeDelta raw_events_callback_interval, |
const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner) { |
return new CastTransportSenderImpl(net_log, |
clock, |
config, |
+ logging_config, |
status_callback, |
+ raw_events_callback, |
+ raw_events_callback_interval, |
transport_task_runner.get(), |
NULL); |
} |
@@ -30,7 +36,10 @@ CastTransportSenderImpl::CastTransportSenderImpl( |
net::NetLog* net_log, |
base::TickClock* clock, |
const CastTransportConfig& config, |
+ const CastLoggingConfig& logging_config, |
const CastTransportStatusCallback& status_callback, |
+ const BulkRawEventsCallback& raw_events_callback, |
+ base::TimeDelta raw_events_callback_interval, |
const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner, |
PacketSender* external_transport) |
: transport_(external_transport ? NULL |
@@ -44,15 +53,32 @@ CastTransportSenderImpl::CastTransportSenderImpl( |
transport_task_runner), |
rtcp_builder_(&pacer_), |
audio_sender_(config, clock, transport_task_runner, &pacer_), |
- video_sender_(config, clock, transport_task_runner, &pacer_) { |
+ video_sender_(config, clock, transport_task_runner, &pacer_), |
+ logging_(transport_task_runner, logging_config), |
+ raw_events_callback_(raw_events_callback) { |
if (audio_sender_.initialized() && video_sender_.initialized()) { |
status_callback.Run(TRANSPORT_INITIALIZED); |
} else { |
status_callback.Run(TRANSPORT_UNINITIALIZED); |
} |
+ |
+ if (!raw_events_callback_.is_null()) { |
+ DCHECK(logging_config.enable_raw_data_collection); |
+ DCHECK(raw_events_callback_interval > base::TimeDelta()); |
+ event_subscriber_.reset(new SimpleEventSubscriber); |
+ logging_.AddRawEventSubscriber(event_subscriber_.get()); |
+ raw_events_timer_.Start( |
+ FROM_HERE, |
+ raw_events_callback_interval, |
+ this, |
+ &CastTransportSenderImpl::SendRawEvents); |
+ } |
} |
-CastTransportSenderImpl::~CastTransportSenderImpl() {} |
+CastTransportSenderImpl::~CastTransportSenderImpl() { |
+ if (event_subscriber_.get()) |
+ logging_.RemoveRawEventSubscriber(event_subscriber_.get()); |
+} |
void CastTransportSenderImpl::SetPacketReceiver( |
const PacketReceiverCallback& packet_receiver) { |
@@ -102,6 +128,14 @@ void CastTransportSenderImpl::SubscribeVideoRtpStatsCallback( |
video_sender_.SubscribeVideoRtpStatsCallback(callback); |
} |
+void CastTransportSenderImpl::SendRawEvents() { |
+ DCHECK(event_subscriber_.get()); |
+ DCHECK(!raw_events_callback_.is_null()); |
+ std::vector<PacketEvent> packet_events; |
+ event_subscriber_->GetPacketEventsAndReset(&packet_events); |
+ raw_events_callback_.Run(packet_events); |
+} |
+ |
} // namespace transport |
} // namespace cast |
} // namespace media |