Add trace_bounds table
Bug: b/123567619
Change-Id: I26ab6eac455da16dfa0ccd61803bce3e225a6613
diff --git a/src/trace_processor/trace_storage.cc b/src/trace_processor/trace_storage.cc
index 3eca3ee..3259cb0 100644
--- a/src/trace_processor/trace_storage.cc
+++ b/src/trace_processor/trace_storage.cc
@@ -17,6 +17,23 @@
#include "src/trace_processor/trace_storage.h"
#include <string.h>
+#include <algorithm>
+#include <limits>
+
+namespace {
+template <typename T>
+void MaybeUpdateMinMax(T begin_it,
+ T end_it,
+ int64_t* min_value,
+ int64_t* max_value) {
+ if (begin_it == end_it) {
+ return;
+ }
+ std::pair<T, T> minmax = std::minmax_element(begin_it, end_it);
+ *min_value = std::min(*min_value, *minmax.first);
+ *max_value = std::max(*max_value, *minmax.second);
+}
+} // namespace
namespace perfetto {
namespace trace_processor {
@@ -70,5 +87,25 @@
times_ended_.back() = time_ended;
}
+std::pair<int64_t, int64_t> TraceStorage::GetTraceTimestampBoundsNs() const {
+ int64_t start_ns = std::numeric_limits<int64_t>::max();
+ int64_t end_ns = std::numeric_limits<int64_t>::min();
+ MaybeUpdateMinMax(slices_.start_ns().begin(), slices_.start_ns().end(),
+ &start_ns, &end_ns);
+ MaybeUpdateMinMax(counters_.timestamps().begin(),
+ counters_.timestamps().end(), &start_ns, &end_ns);
+ MaybeUpdateMinMax(instants_.timestamps().begin(),
+ instants_.timestamps().end(), &start_ns, &end_ns);
+ MaybeUpdateMinMax(nestable_slices_.start_ns().begin(),
+ nestable_slices_.start_ns().end(), &start_ns, &end_ns);
+ MaybeUpdateMinMax(android_log_.timestamps().begin(),
+ android_log_.timestamps().end(), &start_ns, &end_ns);
+
+ if (start_ns == std::numeric_limits<int64_t>::max()) {
+ return std::make_pair(0, 0);
+ }
+ return std::make_pair(start_ns, end_ns);
+}
+
} // namespace trace_processor
} // namespace perfetto