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 fd7139993c6fc0638e9c17cb02d17643e7b398f6..65043cefa9f1976eaee887adc33c29a4118d3b29 100644 |
--- a/media/cast/transport/cast_transport_sender_impl.cc |
+++ b/media/cast/transport/cast_transport_sender_impl.cc |
@@ -16,15 +16,21 @@ CastTransportSender* CastTransportSender::CreateCastTransportSender( |
base::TickClock* clock, |
const CastTransportConfig& config, |
const CastTransportStatusCallback& status_callback, |
+ const BulkRawEventsCallback& raw_events_callback, |
const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner) { |
- return new CastTransportSenderImpl( |
- clock, config, status_callback, transport_task_runner.get(), NULL); |
+ return new CastTransportSenderImpl(clock, |
+ config, |
+ status_callback, |
+ raw_events_callback, |
+ transport_task_runner.get(), |
+ NULL); |
} |
CastTransportSenderImpl::CastTransportSenderImpl( |
base::TickClock* clock, |
const CastTransportConfig& config, |
const CastTransportStatusCallback& status_callback, |
+ const BulkRawEventsCallback& raw_events_callback, |
const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner, |
PacketSender* external_transport) |
: transport_(external_transport ? NULL |
@@ -37,15 +43,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, |
+ CastLoggingConfig(config.enable_raw_event_logging, |
+ false, false)), |
+ 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 (config.enable_raw_event_logging) { |
+ event_subscriber_.reset(new SimpleEventSubscriber); |
+ logging_.AddRawEventSubscriber(event_subscriber_.get()); |
+ raw_events_timer_.Start( |
+ FROM_HERE, |
+ base::TimeDelta::FromSeconds(kSendRawEventsIntervalSecs), |
+ this, |
+ &CastTransportSenderImpl::SendRawEvents); |
+ } |
} |
-CastTransportSenderImpl::~CastTransportSenderImpl() {} |
+CastTransportSenderImpl::~CastTransportSenderImpl() { |
+ if (event_subscriber_.get()) |
+ logging_.RemoveRawEventSubscriber(event_subscriber_.get()); |
+} |
void CastTransportSenderImpl::SetPacketReceiver( |
const PacketReceiverCallback& packet_receiver) { |
@@ -95,6 +118,13 @@ void CastTransportSenderImpl::SubscribeVideoRtpStatsCallback( |
video_sender_.SubscribeVideoRtpStatsCallback(callback); |
} |
+void CastTransportSenderImpl::SendRawEvents() { |
+ DCHECK(event_subscriber_.get()); |
+ std::vector<PacketEvent> packet_events; |
+ event_subscriber_->GetPacketEventsAndReset(&packet_events); |
+ raw_events_callback_.Run(packet_events); |
+} |
+ |
} // namespace transport |
} // namespace cast |
} // namespace media |