| Index: media/cast/test/simulator.cc
|
| diff --git a/media/cast/test/simulator.cc b/media/cast/test/simulator.cc
|
| index 135d44bb45c85c9193e08dd213b19c94dc8494f3..157a18fcc346ee2d45b43f5ae6273de918c337df 100644
|
| --- a/media/cast/test/simulator.cc
|
| +++ b/media/cast/test/simulator.cc
|
| @@ -145,24 +145,20 @@ void GotAudioFrame(
|
| base::Bind(&GotAudioFrame, counter, cast_receiver));
|
| }
|
|
|
| -void AppendLog(EncodingEventSubscriber* subscriber,
|
| - const std::string& extra_data,
|
| - const base::FilePath& output_path) {
|
| - media::cast::proto::LogMetadata metadata;
|
| - metadata.set_extra_data(extra_data);
|
| -
|
| - media::cast::FrameEventList frame_events;
|
| - media::cast::PacketEventList packet_events;
|
| - subscriber->GetEventsAndReset(
|
| - &metadata, &frame_events, &packet_events);
|
| +// Serialize |frame_events| and |packet_events| and append to the file
|
| +// located at |output_path|.
|
| +void AppendLogToFile(media::cast::proto::LogMetadata* metadata,
|
| + const media::cast::FrameEventList& frame_events,
|
| + const media::cast::PacketEventList& packet_events,
|
| + const base::FilePath& output_path) {
|
| media::cast::proto::GeneralDescription* gen_desc =
|
| - metadata.mutable_general_description();
|
| + metadata->mutable_general_description();
|
| gen_desc->set_product("Cast Simulator");
|
| gen_desc->set_product_version("0.1");
|
|
|
| scoped_ptr<char[]> serialized_log(new char[media::cast::kMaxSerializedBytes]);
|
| int output_bytes;
|
| - bool success = media::cast::SerializeEvents(metadata,
|
| + bool success = media::cast::SerializeEvents(*metadata,
|
| frame_events,
|
| packet_events,
|
| true,
|
| @@ -330,8 +326,61 @@ void RunSimulation(const base::FilePath& source_path,
|
| elapsed_time += step;
|
| }
|
|
|
| + // Get event logs for audio and video.
|
| + media::cast::proto::LogMetadata audio_metadata, video_metadata;
|
| + media::cast::FrameEventList audio_frame_events, video_frame_events;
|
| + media::cast::PacketEventList audio_packet_events, video_packet_events;
|
| + audio_metadata.set_extra_data(extra_data);
|
| + video_metadata.set_extra_data(extra_data);
|
| + audio_event_subscriber.GetEventsAndReset(
|
| + &audio_metadata, &audio_frame_events, &audio_packet_events);
|
| + video_event_subscriber.GetEventsAndReset(
|
| + &video_metadata, &video_frame_events, &video_packet_events);
|
| +
|
| + // Print simulation results.
|
| +
|
| + // Compute and print statistics for video:
|
| + //
|
| + // * Total video frames captured.
|
| + // * Total video frames encoded.
|
| + // * Total video frames dropped.
|
| + // * Total video frames received late.
|
| + // * Average target bitrate.
|
| + // * Average encoded bitrate.
|
| + int total_video_frames = 0;
|
| + int encoded_video_frames = 0;
|
| + int dropped_video_frames = 0;
|
| + int late_video_frames = 0;
|
| + int64 encoded_size = 0;
|
| + int64 target_bitrate = 0;
|
| + for (size_t i = 0; i < video_frame_events.size(); ++i) {
|
| + const media::cast::proto::AggregatedFrameEvent& event =
|
| + *video_frame_events[i];
|
| + ++total_video_frames;
|
| + if (event.has_encoded_frame_size()) {
|
| + ++encoded_video_frames;
|
| + encoded_size += event.encoded_frame_size();
|
| + target_bitrate += event.target_bitrate();
|
| + } else {
|
| + ++dropped_video_frames;
|
| + }
|
| + if (event.has_delay_millis() && event.delay_millis() < 0)
|
| + ++late_video_frames;
|
| + }
|
| +
|
| + double avg_encoded_bitrate =
|
| + !encoded_video_frames ? 0 :
|
| + 8.0 * encoded_size * video_sender_config.max_frame_rate /
|
| + encoded_video_frames / 1000;
|
| + double avg_target_bitrate =
|
| + !encoded_video_frames ? 0 : target_bitrate / encoded_video_frames / 1000;
|
| +
|
| LOG(INFO) << "Audio frame count: " << audio_frame_count;
|
| - LOG(INFO) << "Video frame count: " << video_frame_count;
|
| + LOG(INFO) << "Total video frames: " << total_video_frames;
|
| + LOG(INFO) << "Dropped video frames " << dropped_video_frames;
|
| + LOG(INFO) << "Late video frames: " << late_video_frames;
|
| + LOG(INFO) << "Average encoded bitrate (kbps): " << avg_encoded_bitrate;
|
| + LOG(INFO) << "Average target bitrate (kbps): " << avg_target_bitrate;
|
| LOG(INFO) << "Writing log: " << output_path.value();
|
|
|
| // Truncate file and then write serialized log.
|
| @@ -342,8 +391,10 @@ void RunSimulation(const base::FilePath& source_path,
|
| return;
|
| }
|
| }
|
| - AppendLog(&video_event_subscriber, extra_data, output_path);
|
| - AppendLog(&audio_event_subscriber, extra_data, output_path);
|
| + AppendLogToFile(&video_metadata, video_frame_events, video_packet_events,
|
| + output_path);
|
| + AppendLogToFile(&audio_metadata, audio_frame_events, audio_packet_events,
|
| + output_path);
|
| }
|
|
|
| NetworkSimulationModel DefaultModel() {
|
|
|