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

Unified Diff: media/cast/test/sender.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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/cast/logging/serialize_deserialize_test.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/cast/test/sender.cc
diff --git a/media/cast/test/sender.cc b/media/cast/test/sender.cc
index c6af48f77fb63e9c104c4ace78c31545a3031481..5737ca694e0752bba879ba099f1a48355cf986a6 100644
--- a/media/cast/test/sender.cc
+++ b/media/cast/test/sender.cc
@@ -46,7 +46,8 @@ namespace cast {
#define DEFAULT_VIDEO_CODEC_MAX_BITRATE "4000"
#define DEFAULT_VIDEO_CODEC_MIN_BITRATE "1000"
-#define DEFAULT_LOGGING_DURATION "30"
+#define DEFAULT_LOGGING_DURATION "10"
+#define DEFAULT_COMPRESS_LOGS "1"
namespace {
static const int kAudioChannels = 2;
@@ -57,6 +58,9 @@ static const int kSoundFrequency = 1234; // Frequency of sinusoid wave.
static const float kSoundVolume = 0.5f;
static const int kFrameTimerMs = 33;
+// The max allowed size of serialized log.
+const int kMaxSerializedLogBytes = 10 * 1000 * 1000;
+
// Dummy callback function that does nothing except to accept ownership of
// |audio_bus| for destruction. This guarantees that the audio_bus is valid for
// the entire duration of the encode/send process (not equivalent to DoNothing).
@@ -88,12 +92,30 @@ int GetLoggingDuration() {
return input.GetIntInput();
}
-std::string GetLogFileDestination() {
+std::string GetVideoLogFileDestination(bool compress) {
+ test::InputBuilder input(
+ "Enter video events log file destination.",
+ compress ? "./video_events.log.gz" : "./video_events.log",
+ INT_MIN,
+ INT_MAX);
+ return input.GetStringInput();
+}
+
+std::string GetAudioLogFileDestination(bool compress) {
test::InputBuilder input(
- "Enter log file destination.", "./raw_events.log", INT_MIN, INT_MAX);
+ "Enter audio events log file destination.",
+ compress ? "./audio_events.log.gz" : "./audio_events.log",
+ INT_MIN,
+ INT_MAX);
return input.GetStringInput();
}
+bool CompressLogs() {
+ test::InputBuilder input(
+ "Enter 1 to enable compression on logs.", DEFAULT_COMPRESS_LOGS, 0, 1);
+ return (1 == input.GetIntInput());
+}
+
bool ReadFromFile() {
test::InputBuilder input(
"Enter 1 to read from file.", DEFAULT_READ_FROM_FILE, 0, 1);
@@ -351,61 +373,60 @@ net::IPEndPoint CreateUDPAddress(std::string ip_str, int port) {
return net::IPEndPoint(ip_number, port);
}
+void DumpLoggingData(
+ scoped_ptr<media::cast::EncodingEventSubscriber> event_subscriber,
+ file_util::ScopedFILE log_file,
+ bool compress) {
+ media::cast::FrameEventMap frame_events;
+ media::cast::PacketEventMap packet_events;
+ media::cast::proto::LogMetadata log_metadata;
+
+ event_subscriber->GetEventsAndReset(
+ &log_metadata, &frame_events, &packet_events);
+
+ VLOG(0) << "Frame map size: " << frame_events.size();
+ VLOG(0) << "Packet map size: " << packet_events.size();
+
+ scoped_ptr<char[]> event_log(new char[media::cast::kMaxSerializedLogBytes]);
+ int event_log_bytes;
+ if (!media::cast::SerializeEvents(log_metadata,
+ frame_events,
+ packet_events,
+ compress,
+ media::cast::kMaxSerializedLogBytes,
+ event_log.get(),
+ &event_log_bytes)) {
+ VLOG(0) << "Failed to serialize events.";
+ return;
+ }
+
+ VLOG(0) << "Events serialized length: " << event_log_bytes;
+
+ int ret = fwrite(event_log.get(), 1, event_log_bytes, log_file.get());
+ if (ret != event_log_bytes)
+ VLOG(0) << "Failed to write logs to file.";
+}
+
void WriteLogsToFileAndStopSubscribing(
const scoped_refptr<media::cast::CastEnvironment>& cast_environment,
scoped_ptr<media::cast::EncodingEventSubscriber> video_event_subscriber,
scoped_ptr<media::cast::EncodingEventSubscriber> audio_event_subscriber,
- file_util::ScopedFILE log_file) {
- media::cast::LogSerializer serializer(media::cast::kMaxSerializedLogBytes);
-
+ file_util::ScopedFILE video_log_file,
+ file_util::ScopedFILE audio_log_file,
+ bool compress) {
// Serialize video events.
cast_environment->Logging()->RemoveRawEventSubscriber(
video_event_subscriber.get());
- media::cast::FrameEventMap frame_events;
- media::cast::PacketEventMap packet_events;
- media::cast::proto::LogMetadata video_log_metadata;
- video_event_subscriber->GetEventsAndReset(
- &video_log_metadata, &frame_events, &packet_events);
-
- VLOG(0) << "Video frame map size: " << frame_events.size();
- VLOG(0) << "Video packet map size: " << packet_events.size();
-
- if (!serializer.SerializeEventsForStream(
- video_log_metadata, frame_events, packet_events)) {
- VLOG(1) << "Failed to serialize video events.";
- return;
- }
-
- int length_so_far = serializer.GetSerializedLength();
- VLOG(0) << "Video events serialized length: " << length_so_far;
-
- // Serialize audio events.
- media::cast::proto::LogMetadata audio_log_metadata;
cast_environment->Logging()->RemoveRawEventSubscriber(
audio_event_subscriber.get());
- audio_event_subscriber->GetEventsAndReset(
- &audio_log_metadata, &frame_events, &packet_events);
- VLOG(0) << "Audio frame map size: " << frame_events.size();
- VLOG(0) << "Audio packet map size: " << packet_events.size();
+ VLOG(0) << "Dumping logging data for video stream.";
+ DumpLoggingData(
+ video_event_subscriber.Pass(), video_log_file.Pass(), compress);
- if (!serializer.SerializeEventsForStream(
- audio_log_metadata, frame_events, packet_events)) {
- VLOG(1) << "Failed to serialize audio events.";
- return;
- }
-
- VLOG(0) << "Audio events serialized length: "
- << serializer.GetSerializedLength() - length_so_far;
-
- scoped_ptr<std::string> serialized_string =
- serializer.GetSerializedLogAndReset();
- VLOG(0) << "Serialized string size: " << serialized_string->size();
-
- size_t ret = fwrite(
- &(*serialized_string)[0], 1, serialized_string->size(), log_file.get());
- if (ret != serialized_string->size())
- VLOG(1) << "Failed to write logs to file.";
+ VLOG(0) << "Dumping logging data for audio stream.";
+ DumpLoggingData(
+ audio_event_subscriber.Pass(), audio_log_file.Pass(), compress);
}
} // namespace
@@ -503,7 +524,11 @@ int main(int argc, char** argv) {
scoped_ptr<media::cast::EncodingEventSubscriber> video_event_subscriber;
scoped_ptr<media::cast::EncodingEventSubscriber> audio_event_subscriber;
if (logging_duration > 0) {
- std::string log_file_name(media::cast::GetLogFileDestination());
+ bool compress = media::cast::CompressLogs();
+ std::string video_log_file_name(
+ media::cast::GetVideoLogFileDestination(compress));
+ std::string audio_log_file_name(
+ media::cast::GetAudioLogFileDestination(compress));
video_event_subscriber.reset(new media::cast::EncodingEventSubscriber(
media::cast::VIDEO_EVENT, 10000));
audio_event_subscriber.reset(new media::cast::EncodingEventSubscriber(
@@ -512,9 +537,18 @@ int main(int argc, char** argv) {
video_event_subscriber.get());
cast_environment->Logging()->AddRawEventSubscriber(
audio_event_subscriber.get());
- file_util::ScopedFILE log_file(fopen(log_file_name.c_str(), "w"));
- if (!log_file) {
- VLOG(1) << "Failed to open log file for writing.";
+
+ file_util::ScopedFILE video_log_file(
+ fopen(video_log_file_name.c_str(), "w"));
+ if (!video_log_file) {
+ VLOG(1) << "Failed to open video log file for writing.";
+ exit(-1);
+ }
+
+ file_util::ScopedFILE audio_log_file(
+ fopen(audio_log_file_name.c_str(), "w"));
+ if (!audio_log_file) {
+ VLOG(1) << "Failed to open audio log file for writing.";
exit(-1);
}
@@ -524,7 +558,9 @@ int main(int argc, char** argv) {
cast_environment,
base::Passed(&video_event_subscriber),
base::Passed(&audio_event_subscriber),
- base::Passed(&log_file)),
+ base::Passed(&video_log_file),
+ base::Passed(&audio_log_file),
+ compress),
base::TimeDelta::FromSeconds(logging_duration));
}
« no previous file with comments | « media/cast/logging/serialize_deserialize_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698