Correctly count heapprofd_missing_packet.
Change-Id: I69fdb31eb6015f104acf8a54bd1df6e3963b1bb1
diff --git a/src/trace_processor/heap_profile_tracker.cc b/src/trace_processor/heap_profile_tracker.cc
index 1a786fc..67883fc 100644
--- a/src/trace_processor/heap_profile_tracker.cc
+++ b/src/trace_processor/heap_profile_tracker.cc
@@ -227,11 +227,27 @@
void HeapProfileTracker::SetProfilePacketIndex(uint32_t seq_id,
uint64_t index) {
SequenceState& sequence_state = sequence_state_[seq_id];
- if (sequence_state.last_profile_packet_index != 0 &&
- sequence_state.last_profile_packet_index + 1 != index) {
+ bool dropped_packet = false;
+ // heapprofd starts counting at index = 0.
+ if (!sequence_state.prev_index && index != 0) {
+ dropped_packet = true;
+ }
+
+ if (sequence_state.prev_index && *sequence_state.prev_index + 1 != index) {
+ dropped_packet = true;
+ }
+
+ if (dropped_packet) {
+ if (sequence_state.prev_index) {
+ PERFETTO_ELOG("Missing packets between %" PRIu64 " and %" PRIu64,
+ *sequence_state.prev_index, index);
+ } else {
+ PERFETTO_ELOG("Invalid first packet index %" PRIu64 " (!= 0)", index);
+ }
+
context_->storage->IncrementStats(stats::heapprofd_missing_packet);
}
- sequence_state.last_profile_packet_index = index;
+ sequence_state.prev_index = index;
}
void HeapProfileTracker::AddAllocation(
diff --git a/src/trace_processor/heap_profile_tracker.h b/src/trace_processor/heap_profile_tracker.h
index 12cd2da..fe40a84 100644
--- a/src/trace_processor/heap_profile_tracker.h
+++ b/src/trace_processor/heap_profile_tracker.h
@@ -110,7 +110,7 @@
tables::HeapProfileAllocationTable::Row>
free_correction;
- uint64_t last_profile_packet_index = 0;
+ base::Optional<uint64_t> prev_index;
};
std::map<uint32_t, SequenceState> sequence_state_;
TraceProcessorContext* const context_;