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

Side by Side Diff: chrome/renderer/media/cast_session_delegate.cc

Issue 189583004: Cast: Implement log compression and (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 9 months 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/renderer/media/cast_session_delegate.h" 5 #include "chrome/renderer/media/cast_session_delegate.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop/message_loop_proxy.h" 9 #include "base/message_loop/message_loop_proxy.h"
10 #include "chrome/renderer/media/cast_threads.h" 10 #include "chrome/renderer/media/cast_threads.h"
(...skipping 11 matching lines...) Expand all
22 using media::cast::AudioSenderConfig; 22 using media::cast::AudioSenderConfig;
23 using media::cast::CastEnvironment; 23 using media::cast::CastEnvironment;
24 using media::cast::CastSender; 24 using media::cast::CastSender;
25 using media::cast::VideoSenderConfig; 25 using media::cast::VideoSenderConfig;
26 26
27 static base::LazyInstance<CastThreads> g_cast_threads = 27 static base::LazyInstance<CastThreads> g_cast_threads =
28 LAZY_INSTANCE_INITIALIZER; 28 LAZY_INSTANCE_INITIALIZER;
29 29
30 namespace { 30 namespace {
31 31
32 // Allow 10MB for serialized video / audio event logs. 32 // Allow 9MB for serialized video / audio event logs.
33 const int kMaxSerializedBytes = 9000000; 33 const int kMaxSerializedBytes = 9000000;
34 34
35 // Allow about 9MB for video event logs. Assume serialized log data for 35 // Assume serialized log data for each frame will take up to 150 bytes.
36 // each frame will take up to 150 bytes.
37 const int kMaxVideoEventEntries = kMaxSerializedBytes / 150; 36 const int kMaxVideoEventEntries = kMaxSerializedBytes / 150;
38 37
39 // Allow about 9MB for audio event logs. Assume serialized log data for 38 // Assume serialized log data for each frame will take up to 75 bytes.
40 // each frame will take up to 75 bytes.
41 const int kMaxAudioEventEntries = kMaxSerializedBytes / 75; 39 const int kMaxAudioEventEntries = kMaxSerializedBytes / 75;
42 40
43 } // namespace 41 } // namespace
44 42
45 CastSessionDelegate::CastSessionDelegate() 43 CastSessionDelegate::CastSessionDelegate()
46 : io_message_loop_proxy_( 44 : io_message_loop_proxy_(
47 content::RenderThread::Get()->GetIOMessageLoopProxy()), 45 content::RenderThread::Get()->GetIOMessageLoopProxy()),
48 weak_factory_(this) { 46 weak_factory_(this) {
49 DCHECK(io_message_loop_proxy_); 47 DCHECK(io_message_loop_proxy_);
50 } 48 }
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 } 169 }
172 170
173 void CastSessionDelegate::GetEventLogsAndReset( 171 void CastSessionDelegate::GetEventLogsAndReset(
174 bool is_audio, 172 bool is_audio,
175 const EventLogsCallback& callback) { 173 const EventLogsCallback& callback) {
176 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); 174 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
177 175
178 media::cast::EncodingEventSubscriber* subscriber = 176 media::cast::EncodingEventSubscriber* subscriber =
179 is_audio ? audio_event_subscriber_.get() : video_event_subscriber_.get(); 177 is_audio ? audio_event_subscriber_.get() : video_event_subscriber_.get();
180 if (!subscriber) { 178 if (!subscriber) {
181 callback.Run(make_scoped_ptr(new std::string).Pass()); 179 callback.Run(make_scoped_ptr(new base::BinaryValue).Pass());
182 return; 180 return;
183 } 181 }
184 182
185 media::cast::proto::LogMetadata metadata; 183 media::cast::proto::LogMetadata metadata;
186 media::cast::FrameEventMap frame_events; 184 media::cast::FrameEventMap frame_events;
187 media::cast::PacketEventMap packet_events; 185 media::cast::PacketEventMap packet_events;
188 186
189 subscriber->GetEventsAndReset(&metadata, &frame_events, &packet_events); 187 subscriber->GetEventsAndReset(&metadata, &frame_events, &packet_events);
190 188
191 media::cast::LogSerializer log_serializer(kMaxSerializedBytes); 189 scoped_ptr<char[]> serialized_log(new char[kMaxSerializedBytes]);
192 bool success = log_serializer.SerializeEventsForStream( 190 int output_bytes;
193 metadata, frame_events, packet_events); 191 bool success = media::cast::SerializeEvents(metadata,
192 frame_events,
193 packet_events,
194 true,
195 kMaxSerializedBytes,
196 serialized_log.get(),
197 &output_bytes);
194 198
195 if (!success) { 199 if (!success) {
196 VLOG(2) << "Failed to serialize event log."; 200 VLOG(2) << "Failed to serialize event log.";
197 callback.Run(make_scoped_ptr(new std::string).Pass()); 201 callback.Run(make_scoped_ptr(new base::BinaryValue).Pass());
198 return; 202 return;
199 } 203 }
200 204
201 scoped_ptr<std::string> serialized_log = 205 DVLOG(2) << "Serialized log length: " << output_bytes;
202 log_serializer.GetSerializedLogAndReset();
203 DVLOG(2) << "Serialized log length: " << serialized_log->size();
204 206
205 callback.Run(serialized_log.Pass()); 207 scoped_ptr<base::BinaryValue> blob(
208 new base::BinaryValue(serialized_log.Pass(), output_bytes));
209 callback.Run(blob.Pass());
206 } 210 }
207 211
208 void CastSessionDelegate::GetStatsAndReset(bool is_audio, 212 void CastSessionDelegate::GetStatsAndReset(bool is_audio,
209 const StatsCallback& callback) { 213 const StatsCallback& callback) {
210 media::cast::FrameStatsMap frame_stats = 214 media::cast::FrameStatsMap frame_stats =
211 cast_environment_->Logging()->GetFrameStatsData( 215 cast_environment_->Logging()->GetFrameStatsData(
212 is_audio ? media::cast::AUDIO_EVENT : media::cast::VIDEO_EVENT); 216 is_audio ? media::cast::AUDIO_EVENT : media::cast::VIDEO_EVENT);
213 media::cast::PacketStatsMap packet_stats = 217 media::cast::PacketStatsMap packet_stats =
214 cast_environment_->Logging()->GetPacketStatsData( 218 cast_environment_->Logging()->GetPacketStatsData(
215 is_audio ? media::cast::AUDIO_EVENT : media::cast::VIDEO_EVENT); 219 is_audio ? media::cast::AUDIO_EVENT : media::cast::VIDEO_EVENT);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 ++it) { 258 ++it) {
255 cast_environment_->Logging()->InsertPacketEvent(it->timestamp, 259 cast_environment_->Logging()->InsertPacketEvent(it->timestamp,
256 it->type, 260 it->type,
257 it->rtp_timestamp, 261 it->rtp_timestamp,
258 it->frame_id, 262 it->frame_id,
259 it->packet_id, 263 it->packet_id,
260 it->max_packet_id, 264 it->max_packet_id,
261 it->size); 265 it->size);
262 } 266 }
263 } 267 }
OLDNEW
« no previous file with comments | « chrome/renderer/media/cast_session_delegate.h ('k') | chrome/test/data/extensions/api_test/cast_streaming/bad_logging.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698