Commit dfeed63c authored by hclam@chromium.org's avatar hclam@chromium.org

Cast: cast_simulator to print more info

Print more information in cast_simulator:
1. Total video frames.
2. Dropped video frames.
3. Late video frames.
4. Avg. target bitrate.
5. Avg. encoded bitrate.

Review URL: https://codereview.chromium.org/433363002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@287733 0039d316-1c4b-4281-b951-d872f2087c98
parent dcf8d538
......@@ -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() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment