Return status instead of CHECKing in event log parser.
This CL adds ParseStatus/ParseStatusOr classes and returns those instead
of CHECKing that the log is well formed. Some refactoring was required.
We also add a allow_incomplete_logs parameter to the parser which by
default is false. Setting it to true will make the parser log a warning
but return success for errors that typically indicate that the log has
been truncated. "Deeper" errors indicating log corruption still return
an error.
Bug: webrtc:11064
Change-Id: Id5bd6e321de07e250662ae3aaa5ef15f48db6d55
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/158746
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Commit-Queue: Björn Terelius <terelius@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29679}
diff --git a/rtc_tools/rtc_event_log_visualizer/main.cc b/rtc_tools/rtc_event_log_visualizer/main.cc
index cd2f8bb..cac0cb3 100644
--- a/rtc_tools/rtc_event_log_visualizer/main.cc
+++ b/rtc_tools/rtc_event_log_visualizer/main.cc
@@ -29,6 +29,7 @@
#include "logging/rtc_event_log/rtc_event_log_parser.h"
#include "modules/rtp_rtcp/source/rtcp_packet/report_block.h"
#include "rtc_base/checks.h"
+#include "rtc_base/logging.h"
#include "rtc_tools/rtc_event_log_visualizer/analyzer.h"
#include "rtc_tools/rtc_event_log_visualizer/plot_base.h"
#include "rtc_tools/rtc_event_log_visualizer/plot_protobuf.h"
@@ -198,6 +199,12 @@
absl::SetFlagsUsageConfig(config);
std::vector<char*> args = absl::ParseCommandLine(argc, argv);
+ // Print RTC_LOG warnings and errors even in release builds.
+ if (rtc::LogMessage::GetLogToDebug() > rtc::LS_WARNING) {
+ rtc::LogMessage::LogToDebug(rtc::LS_WARNING);
+ }
+ rtc::LogMessage::SetLogToStderr(true);
+
// Flag replacements
std::map<std::string, std::vector<std::string>> flag_aliases = {
{"default",
@@ -241,13 +248,16 @@
header_extensions = webrtc::ParsedRtcEventLog::
UnconfiguredHeaderExtensions::kAttemptWebrtcDefaultConfig;
}
- webrtc::ParsedRtcEventLog parsed_log(header_extensions);
+ webrtc::ParsedRtcEventLog parsed_log(header_extensions,
+ /*allow_incomplete_logs*/ true);
if (args.size() == 2) {
std::string filename = args[1];
- if (!parsed_log.ParseFile(filename)) {
- std::cerr << "Could not parse the entire log file." << std::endl;
- std::cerr << "Only the parsable events will be analyzed." << std::endl;
+ auto status = parsed_log.ParseFile(filename);
+ if (!status.ok()) {
+ std::cerr << "Failed to parse " << filename << ": " << status.message()
+ << std::endl;
+ return -1;
}
}