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

Side by Side Diff: media/cast/test/simulator.cc

Issue 433363002: Cast: cast_simulator to print more info (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 // Simulate end to end streaming. 5 // Simulate end to end streaming.
6 // 6 //
7 // Input: 7 // Input:
8 // --source= 8 // --source=
9 // WebM used as the source of video and audio frames. 9 // WebM used as the source of video and audio frames.
10 // --output= 10 // --output=
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 int* counter, 138 int* counter,
139 CastReceiver* cast_receiver, 139 CastReceiver* cast_receiver,
140 scoped_ptr<AudioBus> audio_bus, 140 scoped_ptr<AudioBus> audio_bus,
141 const base::TimeTicks& playout_time, 141 const base::TimeTicks& playout_time,
142 bool is_continuous) { 142 bool is_continuous) {
143 ++*counter; 143 ++*counter;
144 cast_receiver->RequestDecodedAudioFrame( 144 cast_receiver->RequestDecodedAudioFrame(
145 base::Bind(&GotAudioFrame, counter, cast_receiver)); 145 base::Bind(&GotAudioFrame, counter, cast_receiver));
146 } 146 }
147 147
148 void AppendLog(EncodingEventSubscriber* subscriber, 148 void AppendLog(media::cast::proto::LogMetadata* metadata,
hubbe 2014/08/04 22:37:24 Document with comment?
Alpha Left Google 2014/08/04 22:44:09 Done.
149 const std::string& extra_data, 149 const media::cast::FrameEventList& frame_events,
150 const media::cast::PacketEventList& packet_events,
150 const base::FilePath& output_path) { 151 const base::FilePath& output_path) {
151 media::cast::proto::LogMetadata metadata;
152 metadata.set_extra_data(extra_data);
153
154 media::cast::FrameEventList frame_events;
155 media::cast::PacketEventList packet_events;
156 subscriber->GetEventsAndReset(
157 &metadata, &frame_events, &packet_events);
158 media::cast::proto::GeneralDescription* gen_desc = 152 media::cast::proto::GeneralDescription* gen_desc =
159 metadata.mutable_general_description(); 153 metadata->mutable_general_description();
160 gen_desc->set_product("Cast Simulator"); 154 gen_desc->set_product("Cast Simulator");
161 gen_desc->set_product_version("0.1"); 155 gen_desc->set_product_version("0.1");
162 156
163 scoped_ptr<char[]> serialized_log(new char[media::cast::kMaxSerializedBytes]); 157 scoped_ptr<char[]> serialized_log(new char[media::cast::kMaxSerializedBytes]);
164 int output_bytes; 158 int output_bytes;
165 bool success = media::cast::SerializeEvents(metadata, 159 bool success = media::cast::SerializeEvents(*metadata,
166 frame_events, 160 frame_events,
167 packet_events, 161 packet_events,
168 true, 162 true,
169 media::cast::kMaxSerializedBytes, 163 media::cast::kMaxSerializedBytes,
170 serialized_log.get(), 164 serialized_log.get(),
171 &output_bytes); 165 &output_bytes);
172 166
173 if (!success) { 167 if (!success) {
174 LOG(ERROR) << "Failed to serialize log."; 168 LOG(ERROR) << "Failed to serialize log.";
175 return; 169 return;
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 // Run for 3 minutes. 318 // Run for 3 minutes.
325 base::TimeDelta elapsed_time; 319 base::TimeDelta elapsed_time;
326 while (elapsed_time.InMinutes() < 3) { 320 while (elapsed_time.InMinutes() < 3) {
327 // Each step is 100us. 321 // Each step is 100us.
328 base::TimeDelta step = base::TimeDelta::FromMicroseconds(100); 322 base::TimeDelta step = base::TimeDelta::FromMicroseconds(100);
329 task_runner->Sleep(step); 323 task_runner->Sleep(step);
330 elapsed_time += step; 324 elapsed_time += step;
331 } 325 }
332 326
333 LOG(INFO) << "Audio frame count: " << audio_frame_count; 327 LOG(INFO) << "Audio frame count: " << audio_frame_count;
334 LOG(INFO) << "Video frame count: " << video_frame_count;
335 LOG(INFO) << "Writing log: " << output_path.value();
336 328
337 // Truncate file and then write serialized log. 329 // Truncate file and then write serialized log.
338 { 330 {
339 base::ScopedFILE file(base::OpenFile(output_path, "wb")); 331 base::ScopedFILE file(base::OpenFile(output_path, "wb"));
340 if (!file.get()) { 332 if (!file.get()) {
341 LOG(INFO) << "Cannot write to log."; 333 LOG(INFO) << "Cannot write to log.";
342 return; 334 return;
343 } 335 }
344 } 336 }
345 AppendLog(&video_event_subscriber, extra_data, output_path); 337
346 AppendLog(&audio_event_subscriber, extra_data, output_path); 338 media::cast::proto::LogMetadata audio_metadata, video_metadata;
hubbe 2014/08/04 22:37:24 This is a giant function, but each block above has
Alpha Left Google 2014/08/04 22:44:09 Done.
339 audio_metadata.set_extra_data(extra_data);
340 video_metadata.set_extra_data(extra_data);
341
342 media::cast::FrameEventList audio_frame_events, video_frame_events;
343 media::cast::PacketEventList audio_packet_events, video_packet_events;
344 audio_event_subscriber.GetEventsAndReset(
345 &audio_metadata, &audio_frame_events, &audio_packet_events);
346 video_event_subscriber.GetEventsAndReset(
347 &video_metadata, &video_frame_events, &video_packet_events);
348
349 int total_video_frames = 0;
350 int encoded_video_frames = 0;
351 int dropped_video_frames = 0;
352 int late_video_frames = 0;
353 int64 encoded_size = 0;
354 int64 target_bitrate = 0;
355 for (size_t i = 0; i < video_frame_events.size(); ++i) {
356 const media::cast::proto::AggregatedFrameEvent& event =
357 *video_frame_events[i];
358 ++total_video_frames;
359 if (event.has_encoded_frame_size()) {
360 ++encoded_video_frames;
361 encoded_size += event.encoded_frame_size();
362 target_bitrate += event.target_bitrate();
363 } else {
364 ++dropped_video_frames;
365 }
366 if (event.has_delay_millis() && event.delay_millis() < 0)
367 ++late_video_frames;
368 }
369
370 double avg_encoded_bitrate =
371 !encoded_video_frames ? 0 :
372 8.0 * encoded_size * video_sender_config.max_frame_rate /
373 encoded_video_frames / 1000;
374 double avg_target_bitrate =
375 !encoded_video_frames ? 0 : target_bitrate / encoded_video_frames / 1000;
376
377 LOG(INFO) << "Total video frames: " << total_video_frames;
378 LOG(INFO) << "Dropped video frames " << dropped_video_frames;
379 LOG(INFO) << "Late video frames: " << late_video_frames;
380 LOG(INFO) << "Average encoded bitrate (kbps): " << avg_encoded_bitrate;
381 LOG(INFO) << "Average target bitrate (kbps): " << avg_target_bitrate;
382 LOG(INFO) << "Writing log: " << output_path.value();
383 AppendLog(&video_metadata, video_frame_events, video_packet_events,
384 output_path);
385 AppendLog(&audio_metadata, audio_frame_events, audio_packet_events,
386 output_path);
347 } 387 }
348 388
349 NetworkSimulationModel DefaultModel() { 389 NetworkSimulationModel DefaultModel() {
350 NetworkSimulationModel model; 390 NetworkSimulationModel model;
351 model.set_type(cast::proto::INTERRUPTED_POISSON_PROCESS); 391 model.set_type(cast::proto::INTERRUPTED_POISSON_PROCESS);
352 IPPModel* ipp = model.mutable_ipp(); 392 IPPModel* ipp = model.mutable_ipp();
353 ipp->set_coef_burstiness(0.609); 393 ipp->set_coef_burstiness(0.609);
354 ipp->set_coef_variance(4.1); 394 ipp->set_coef_variance(4.1);
355 395
356 ipp->add_average_rate(0.609); 396 ipp->add_average_rate(0.609);
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 values.SetBoolean("sim", true); 498 values.SetBoolean("sim", true);
459 values.SetString("sim-id", sim_id); 499 values.SetString("sim-id", sim_id);
460 500
461 std::string extra_data; 501 std::string extra_data;
462 base::JSONWriter::Write(&values, &extra_data); 502 base::JSONWriter::Write(&values, &extra_data);
463 503
464 // Run. 504 // Run.
465 media::cast::RunSimulation(source_path, output_path, extra_data, model); 505 media::cast::RunSimulation(source_path, output_path, extra_data, model);
466 return 0; 506 return 0;
467 } 507 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698