Merge "trace_processor: Drop bad frame timeline packets"
diff --git a/src/trace_processor/importers/proto/frame_timeline_event_parser.cc b/src/trace_processor/importers/proto/frame_timeline_event_parser.cc
index 32c862c..6473e9c 100644
--- a/src/trace_processor/importers/proto/frame_timeline_event_parser.cc
+++ b/src/trace_processor/importers/proto/frame_timeline_event_parser.cc
@@ -32,6 +32,17 @@
namespace perfetto {
namespace trace_processor {
+namespace {
+
+bool IsBadTimestamp(int64_t ts) {
+ // Very small or very large timestamps are likely a mistake.
+ // See b/185978397
+ constexpr int64_t kBadTimestamp =
+ std::numeric_limits<int64_t>::max() - (10LL * 1000 * 1000 * 1000);
+ return std::abs(ts) >= kBadTimestamp;
+}
+
+} // namespace
using ExpectedDisplayFrameStartDecoder =
protos::pbzero::FrameTimelineEvent_ExpectedDisplayFrameStart_Decoder;
@@ -529,6 +540,13 @@
ConstBytes blob) {
protos::pbzero::FrameTimelineEvent_Decoder frame_event(blob.data, blob.size);
context_->storage->InternString(base::StringView(std::to_string(timestamp)));
+
+ if (IsBadTimestamp(timestamp)) {
+ context_->storage->IncrementStats(
+ stats::frame_timeline_event_parser_errors);
+ return;
+ }
+
if (frame_event.has_expected_display_frame_start()) {
ParseExpectedDisplayFrameStart(timestamp,
frame_event.expected_display_frame_start());