trace_processor: add memory events
This CL adds the parsing and storing of the following events into
the counters table:
rss_stat
ion_heap_grow
ion_heap_shrink
It also
- fixes the inconsistent naming in the refType enum
- renames sched tracker to better reflect it's purpose
- remove pre-computed deltas because they can be ambiguous
Bug:117642698
Change-Id: Ie843298b2b54bc8f3997e1afe297e12e1e98215d
diff --git a/src/trace_processor/BUILD.gn b/src/trace_processor/BUILD.gn
index 2b468af..852a706 100644
--- a/src/trace_processor/BUILD.gn
+++ b/src/trace_processor/BUILD.gn
@@ -46,6 +46,8 @@
"chunked_trace_reader.h",
"counters_table.cc",
"counters_table.h",
+ "event_tracker.cc",
+ "event_tracker.h",
"process_table.cc",
"process_table.h",
"process_tracker.cc",
@@ -58,8 +60,6 @@
"query_constraints.h",
"sched_slice_table.cc",
"sched_slice_table.h",
- "sched_tracker.cc",
- "sched_tracker.h",
"scoped_db.h",
"slice_table.cc",
"slice_table.h",
@@ -140,12 +140,12 @@
testonly = true
sources = [
"counters_table_unittest.cc",
+ "event_tracker_unittest.cc",
"process_table_unittest.cc",
"process_tracker_unittest.cc",
"proto_trace_parser_unittest.cc",
"query_constraints_unittest.cc",
"sched_slice_table_unittest.cc",
- "sched_tracker_unittest.cc",
"slice_tracker_unittest.cc",
"span_operator_table_unittest.cc",
"thread_table_unittest.cc",
diff --git a/src/trace_processor/counters_table.cc b/src/trace_processor/counters_table.cc
index 000891f..b38df90 100644
--- a/src/trace_processor/counters_table.cc
+++ b/src/trace_processor/counters_table.cc
@@ -44,8 +44,6 @@
return CompareValues(co.refs(), f_idx, s_idx, ob.desc);
case CountersTable::Column::kDuration:
return CompareValues(co.durations(), f_idx, s_idx, ob.desc);
- case CountersTable::Column::kValueDelta:
- return CompareValues(co.value_deltas(), f_idx, s_idx, ob.desc);
case CountersTable::Column::kRefType:
return CompareValues(co.types(), f_idx, s_idx, ob.desc);
default:
@@ -82,7 +80,6 @@
Table::Column(Column::kName, "name", ColumnType::kString),
Table::Column(Column::kValue, "value", ColumnType::kUlong),
Table::Column(Column::kDuration, "dur", ColumnType::kUlong),
- Table::Column(Column::kValueDelta, "value_delta", ColumnType::kUlong),
Table::Column(Column::kRef, "ref", ColumnType::kUint),
Table::Column(Column::kRefType, "ref_type", ColumnType::kString),
},
@@ -130,9 +127,6 @@
case CountersTable::Column::kDuration:
FilterColumn(counters.durations(), 0, cs, v, &filter);
break;
- case CountersTable::Column::kValueDelta:
- FilterColumn(counters.value_deltas(), 0, cs, v, &filter);
- break;
case CountersTable::Column::kRefType: {
// TODO(lalitm): add support for filtering here.
}
@@ -173,11 +167,11 @@
}
case Column::kRefType: {
switch (storage_->counters().types()[row]) {
- case RefType::kCPU_ID: {
+ case RefType::kCpuId: {
sqlite3_result_text(context, "cpu", -1, nullptr);
break;
}
- case RefType::kUTID: {
+ case RefType::kUtid: {
sqlite3_result_text(context, "utid", -1, nullptr);
break;
}
@@ -201,12 +195,6 @@
context, static_cast<int64_t>(storage_->counters().durations()[row]));
break;
}
- case Column::kValueDelta: {
- sqlite3_result_int64(
- context,
- static_cast<int64_t>(storage_->counters().value_deltas()[row]));
- break;
- }
default:
PERFETTO_FATAL("Unknown column %d", N);
break;
diff --git a/src/trace_processor/counters_table.h b/src/trace_processor/counters_table.h
index c35b887..425056b 100644
--- a/src/trace_processor/counters_table.h
+++ b/src/trace_processor/counters_table.h
@@ -33,9 +33,8 @@
kName = 1,
kValue = 2,
kDuration = 3,
- kValueDelta = 4,
- kRef = 5,
- kRefType = 6,
+ kRef = 4,
+ kRefType = 5,
};
static void RegisterTable(sqlite3* db, const TraceStorage* storage);
diff --git a/src/trace_processor/counters_table_unittest.cc b/src/trace_processor/counters_table_unittest.cc
index dc2ff0a..77af0d2 100644
--- a/src/trace_processor/counters_table_unittest.cc
+++ b/src/trace_processor/counters_table_unittest.cc
@@ -15,7 +15,7 @@
*/
#include "src/trace_processor/counters_table.h"
-#include "src/trace_processor/sched_tracker.h"
+#include "src/trace_processor/event_tracker.h"
#include "src/trace_processor/scoped_db.h"
#include "src/trace_processor/trace_processor_context.h"
@@ -34,7 +34,7 @@
db_.reset(db);
context_.storage.reset(new TraceStorage());
- context_.sched_tracker.reset(new SchedTracker(&context_));
+ context_.event_tracker.reset(new EventTracker(&context_));
CountersTable::RegisterTable(db_.get(), context_.storage.get());
}
@@ -64,14 +64,11 @@
uint32_t freq = 3000;
context_.storage->mutable_counters()->AddCounter(
- timestamp, 0 /* dur */, 1, freq, 0 /* value delta */, 1 /* cpu */,
- RefType::kCPU_ID);
+ timestamp, 0 /* dur */, 1, freq, 1 /* cpu */, RefType::kCpuId);
context_.storage->mutable_counters()->AddCounter(
- timestamp + 1, 1 /* dur */, 1, freq + 1000, 1000 /* value delta */,
- 1 /* cpu */, RefType::kCPU_ID);
+ timestamp + 1, 1 /* dur */, 1, freq + 1000, 1 /* cpu */, RefType::kCpuId);
context_.storage->mutable_counters()->AddCounter(
- timestamp + 2, 1 /* dur */, 1, freq + 2000, 1000 /* value delta */,
- 2 /* cpu */, RefType::kCPU_ID);
+ timestamp + 2, 1 /* dur */, 1, freq + 2000, 2 /* cpu */, RefType::kCpuId);
PrepareValidStatement("SELECT ts, dur, value FROM counters where ref = 1");
@@ -94,14 +91,12 @@
uint32_t name_id = 1;
context_.storage->mutable_counters()->AddCounter(
- timestamp, 1 /* dur */, name_id, freq, 0 /* value delta */, 1 /* cpu */,
- RefType::kCPU_ID);
+ timestamp, 1 /* dur */, name_id, freq, 1 /* cpu */, RefType::kCpuId);
context_.storage->mutable_counters()->AddCounter(
- timestamp + 1, 2 /* dur */, name_id, freq + 1000, 1000 /* value delta */,
- 1 /* cpu */, RefType::kCPU_ID);
+ timestamp + 1, 2 /* dur */, name_id, freq + 1000, 1 /* cpu */,
+ RefType::kCpuId);
context_.storage->mutable_counters()->AddCounter(
- timestamp + 3, 0 /* dur */, name_id, freq, -1000 /* value delta */,
- 1 /* cpu */, RefType::kCPU_ID);
+ timestamp + 3, 0 /* dur */, name_id, freq, 1 /* cpu */, RefType::kCpuId);
PrepareValidStatement(
"SELECT value, sum(dur) as dur_sum FROM counters where value > 0 group "
diff --git a/src/trace_processor/sched_tracker.cc b/src/trace_processor/event_tracker.cc
similarity index 84%
rename from src/trace_processor/sched_tracker.cc
rename to src/trace_processor/event_tracker.cc
index 67071a0..fdf1d4e 100644
--- a/src/trace_processor/sched_tracker.cc
+++ b/src/trace_processor/event_tracker.cc
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#include "src/trace_processor/sched_tracker.h"
+#include "src/trace_processor/event_tracker.h"
#include "perfetto/base/utils.h"
#include "src/trace_processor/process_tracker.h"
#include "src/trace_processor/trace_processor_context.h"
@@ -24,17 +24,17 @@
namespace perfetto {
namespace trace_processor {
-SchedTracker::SchedTracker(TraceProcessorContext* context)
+EventTracker::EventTracker(TraceProcessorContext* context)
: idle_string_id_(context->storage->InternString("idle")),
context_(context) {}
-SchedTracker::~SchedTracker() = default;
+EventTracker::~EventTracker() = default;
-StringId SchedTracker::GetThreadNameId(uint32_t tid, base::StringView comm) {
+StringId EventTracker::GetThreadNameId(uint32_t tid, base::StringView comm) {
return tid == 0 ? idle_string_id_ : context_->storage->InternString(comm);
}
-void SchedTracker::PushSchedSwitch(uint32_t cpu,
+void EventTracker::PushSchedSwitch(uint32_t cpu,
uint64_t timestamp,
uint32_t prev_pid,
uint32_t,
@@ -72,7 +72,7 @@
pending_slice->pid = next_pid;
}
-void SchedTracker::PushCounter(uint64_t timestamp,
+void EventTracker::PushCounter(uint64_t timestamp,
double value,
StringId name_id,
uint64_t ref,
@@ -89,16 +89,15 @@
auto counter_it = pending_counters_per_key_.find(key);
if (counter_it != pending_counters_per_key_.end()) {
size_t idx = counter_it->second;
-
uint64_t duration = timestamp - counters->timestamps()[idx];
- double value_delta = value - counters->values()[idx];
+ // Update duration of previously stored event.
counters->set_duration(idx, duration);
- counters->set_value_delta(idx, value_delta);
}
- pending_counters_per_key_[key] = counters->AddCounter(
- timestamp, 0 /* duration */, name_id, value, 0 /* value_delta */,
- static_cast<int64_t>(ref), ref_type);
+ // At this point we don't know the duration so just store 0.
+ pending_counters_per_key_[key] =
+ counters->AddCounter(timestamp, 0 /* duration */, name_id, value,
+ static_cast<int64_t>(ref), ref_type);
}
} // namespace trace_processor
diff --git a/src/trace_processor/sched_tracker.h b/src/trace_processor/event_tracker.h
similarity index 89%
rename from src/trace_processor/sched_tracker.h
rename to src/trace_processor/event_tracker.h
index 3679240..29ceee5 100644
--- a/src/trace_processor/sched_tracker.h
+++ b/src/trace_processor/event_tracker.h
@@ -14,8 +14,8 @@
* limitations under the License.
*/
-#ifndef SRC_TRACE_PROCESSOR_SCHED_TRACKER_H_
-#define SRC_TRACE_PROCESSOR_SCHED_TRACKER_H_
+#ifndef SRC_TRACE_PROCESSOR_EVENT_TRACKER_H_
+#define SRC_TRACE_PROCESSOR_EVENT_TRACKER_H_
#include <array>
#include <limits>
@@ -31,12 +31,12 @@
// This class takes sched events from the trace and processes them to store
// as sched slices.
-class SchedTracker {
+class EventTracker {
public:
- explicit SchedTracker(TraceProcessorContext*);
- SchedTracker(const SchedTracker&) = delete;
- SchedTracker& operator=(const SchedTracker&) = delete;
- virtual ~SchedTracker();
+ explicit EventTracker(TraceProcessorContext*);
+ EventTracker(const EventTracker&) = delete;
+ EventTracker& operator=(const EventTracker&) = delete;
+ virtual ~EventTracker();
StringId GetThreadNameId(uint32_t tid, base::StringView comm);
@@ -100,4 +100,4 @@
} // namespace trace_processor
} // namespace perfetto
-#endif // SRC_TRACE_PROCESSOR_SCHED_TRACKER_H_
+#endif // SRC_TRACE_PROCESSOR_EVENT_TRACKER_H_
diff --git a/src/trace_processor/sched_tracker_unittest.cc b/src/trace_processor/event_tracker_unittest.cc
similarity index 61%
rename from src/trace_processor/sched_tracker_unittest.cc
rename to src/trace_processor/event_tracker_unittest.cc
index 863052e..ab308d1 100644
--- a/src/trace_processor/sched_tracker_unittest.cc
+++ b/src/trace_processor/event_tracker_unittest.cc
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#include "src/trace_processor/sched_tracker.h"
+#include "src/trace_processor/event_tracker.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "src/trace_processor/process_tracker.h"
@@ -28,19 +28,19 @@
using ::testing::InSequence;
using ::testing::Invoke;
-class SchedTrackerTest : public ::testing::Test {
+class EventTrackerTest : public ::testing::Test {
public:
- SchedTrackerTest() {
+ EventTrackerTest() {
context.storage.reset(new TraceStorage());
context.process_tracker.reset(new ProcessTracker(&context));
- context.sched_tracker.reset(new SchedTracker(&context));
+ context.event_tracker.reset(new EventTracker(&context));
}
protected:
TraceProcessorContext context;
};
-TEST_F(SchedTrackerTest, InsertSecondSched) {
+TEST_F(EventTrackerTest, InsertSecondSched) {
uint32_t cpu = 3;
uint64_t timestamp = 100;
uint32_t pid_1 = 2;
@@ -50,11 +50,11 @@
uint32_t pid_2 = 4;
const auto& timestamps = context.storage->slices().start_ns();
- context.sched_tracker->PushSchedSwitch(cpu, timestamp, pid_1, prev_state,
+ context.event_tracker->PushSchedSwitch(cpu, timestamp, pid_1, prev_state,
pid_2, kCommProc1);
ASSERT_EQ(timestamps.size(), 1);
- context.sched_tracker->PushSchedSwitch(cpu, timestamp + 1, pid_2, prev_state,
+ context.event_tracker->PushSchedSwitch(cpu, timestamp + 1, pid_2, prev_state,
pid_1, kCommProc2);
ASSERT_EQ(timestamps.size(), 2ul);
@@ -66,7 +66,7 @@
ASSERT_EQ(context.storage->slices().utids().front(), 1);
}
-TEST_F(SchedTrackerTest, InsertThirdSched_SameThread) {
+TEST_F(EventTrackerTest, InsertThirdSched_SameThread) {
uint32_t cpu = 3;
uint64_t timestamp = 100;
uint32_t prev_state = 32;
@@ -74,17 +74,17 @@
static const char kCommProc2[] = "process2";
const auto& timestamps = context.storage->slices().start_ns();
- context.sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/4, prev_state,
+ context.event_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/4, prev_state,
/*tid=*/2, kCommProc1);
ASSERT_EQ(timestamps.size(), 1);
- context.sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/2,
+ context.event_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/2,
prev_state,
/*tid=*/4, kCommProc1);
- context.sched_tracker->PushSchedSwitch(cpu, timestamp + 11, /*tid=*/4,
+ context.event_tracker->PushSchedSwitch(cpu, timestamp + 11, /*tid=*/4,
prev_state,
/*tid=*/2, kCommProc2);
- context.sched_tracker->PushSchedSwitch(cpu, timestamp + 31, /*tid=*/4,
+ context.event_tracker->PushSchedSwitch(cpu, timestamp + 31, /*tid=*/4,
prev_state,
/*tid=*/2, kCommProc1);
@@ -98,18 +98,18 @@
context.storage->slices().utids().at(2));
}
-TEST_F(SchedTrackerTest, CounterDuration) {
+TEST_F(EventTrackerTest, CounterDuration) {
uint32_t cpu = 3;
uint64_t timestamp = 100;
StringId name_id = 0;
- context.sched_tracker->PushCounter(timestamp, 1000, name_id, cpu,
- RefType::kCPU_ID);
- context.sched_tracker->PushCounter(timestamp + 1, 4000, name_id, cpu,
- RefType::kCPU_ID);
- context.sched_tracker->PushCounter(timestamp + 3, 5000, name_id, cpu,
- RefType::kCPU_ID);
- context.sched_tracker->PushCounter(timestamp + 9, 1000, name_id, cpu,
- RefType::kCPU_ID);
+ context.event_tracker->PushCounter(timestamp, 1000, name_id, cpu,
+ RefType::kCpuId);
+ context.event_tracker->PushCounter(timestamp + 1, 4000, name_id, cpu,
+ RefType::kCpuId);
+ context.event_tracker->PushCounter(timestamp + 3, 5000, name_id, cpu,
+ RefType::kCpuId);
+ context.event_tracker->PushCounter(timestamp + 9, 1000, name_id, cpu,
+ RefType::kCpuId);
ASSERT_EQ(context.storage->counters().counter_count(), 4ul);
ASSERT_EQ(context.storage->counters().timestamps().at(0), timestamp);
@@ -125,33 +125,6 @@
ASSERT_EQ(context.storage->counters().values().at(2), 5000);
}
-TEST_F(SchedTrackerTest, MixedEventsValueDelta) {
- uint32_t cpu = 3;
- uint64_t timestamp = 100;
- StringId name_id_cpu = 0;
- StringId name_id_upid = 0;
- UniquePid upid = 12;
- context.sched_tracker->PushCounter(timestamp, 1000, name_id_cpu, cpu,
- RefType::kCPU_ID);
- context.sched_tracker->PushCounter(timestamp + 1, 0, name_id_upid, upid,
- RefType::kUTID);
- context.sched_tracker->PushCounter(timestamp + 3, 5000, name_id_cpu, cpu,
- RefType::kCPU_ID);
- context.sched_tracker->PushCounter(timestamp + 9, 1, name_id_upid, upid,
- RefType::kUTID);
-
- ASSERT_EQ(context.storage->counters().counter_count(), 4ul);
- ASSERT_EQ(context.storage->counters().timestamps().at(0), timestamp);
- ASSERT_EQ(context.storage->counters().durations().at(0), 3);
- ASSERT_EQ(context.storage->counters().values().at(0), 1000);
- ASSERT_EQ(context.storage->counters().value_deltas().at(0), 4000);
-
- ASSERT_EQ(context.storage->counters().timestamps().at(1), timestamp + 1);
- ASSERT_EQ(context.storage->counters().durations().at(1), 8);
- ASSERT_EQ(context.storage->counters().values().at(1), 0);
- ASSERT_EQ(context.storage->counters().value_deltas().at(1), 1);
-}
-
} // namespace
} // namespace trace_processor
} // namespace perfetto
diff --git a/src/trace_processor/process_table_unittest.cc b/src/trace_processor/process_table_unittest.cc
index 34fed84..7012f87 100644
--- a/src/trace_processor/process_table_unittest.cc
+++ b/src/trace_processor/process_table_unittest.cc
@@ -15,8 +15,8 @@
*/
#include "src/trace_processor/process_table.h"
+#include "src/trace_processor/event_tracker.h"
#include "src/trace_processor/process_tracker.h"
-#include "src/trace_processor/sched_tracker.h"
#include "src/trace_processor/scoped_db.h"
#include "src/trace_processor/trace_processor_context.h"
diff --git a/src/trace_processor/process_tracker_unittest.cc b/src/trace_processor/process_tracker_unittest.cc
index eac2bab..7c2ac3e 100644
--- a/src/trace_processor/process_tracker_unittest.cc
+++ b/src/trace_processor/process_tracker_unittest.cc
@@ -17,7 +17,7 @@
#include "src/trace_processor/process_tracker.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
-#include "src/trace_processor/sched_tracker.h"
+#include "src/trace_processor/event_tracker.h"
#include "src/trace_processor/trace_processor.h"
namespace perfetto {
@@ -33,7 +33,7 @@
ProcessTrackerTest() {
context.storage.reset(new TraceStorage());
context.process_tracker.reset(new ProcessTracker(&context));
- context.sched_tracker.reset(new SchedTracker(&context));
+ context.event_tracker.reset(new EventTracker(&context));
}
protected:
@@ -77,9 +77,9 @@
static const char kCommProc1[] = "process1";
static const char kCommProc2[] = "process2";
- context.sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1, prev_state,
+ context.event_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1, prev_state,
/*tid=*/4, kCommProc1);
- context.sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4,
+ context.event_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4,
prev_state, /*tid=*/1, kCommProc2);
context.process_tracker->UpdateProcess(2, "test");
diff --git a/src/trace_processor/proto_trace_parser.cc b/src/trace_processor/proto_trace_parser.cc
index 1cb2086..3ce91f1 100644
--- a/src/trace_processor/proto_trace_parser.cc
+++ b/src/trace_processor/proto_trace_parser.cc
@@ -25,8 +25,8 @@
#include "perfetto/base/utils.h"
#include "perfetto/protozero/proto_decoder.h"
#include "perfetto/traced/sys_stats_counters.h"
+#include "src/trace_processor/event_tracker.h"
#include "src/trace_processor/process_tracker.h"
-#include "src/trace_processor/sched_tracker.h"
#include "src/trace_processor/slice_tracker.h"
#include "src/trace_processor/trace_processor_context.h"
@@ -122,13 +122,23 @@
context->storage->InternString("cpu.times.io_wait_ns")),
cpu_times_irq_ns_id_(context->storage->InternString("cpu.times.irq_ns")),
cpu_times_softirq_ns_id_(
- context->storage->InternString("cpu.times.softirq_ns")) {
+ context->storage->InternString("cpu.times.softirq_ns")),
+ ion_heap_grow_id_(context->storage->InternString("ion_heap_grow")),
+ ion_heap_shrink_id_(context->storage->InternString("ion_heap_shrink")) {
for (const auto& name : BuildMeminfoCounterNames()) {
meminfo_strs_id_.emplace_back(context->storage->InternString(name));
}
for (const auto& name : BuildVmstatCounterNames()) {
vmstat_strs_id_.emplace_back(context->storage->InternString(name));
}
+ rss_members_.emplace_back(
+ context->storage->InternString("rss_stat.mm_filepages"));
+ rss_members_.emplace_back(
+ context->storage->InternString("rss_stat.mm_anonpages"));
+ rss_members_.emplace_back(
+ context->storage->InternString("rss_stat.mm_swapents"));
+ rss_members_.emplace_back(
+ context->storage->InternString("rss_stat.nr_mm_counters"));
}
ProtoTraceParser::~ProtoTraceParser() = default;
@@ -187,17 +197,17 @@
break;
}
case protos::SysStats::kNumForksFieldNumber: {
- context_->sched_tracker->PushCounter(
+ context_->event_tracker->PushCounter(
ts, fld.as_uint32(), num_forks_name_id_, 0, RefType::kNoRef);
break;
}
case protos::SysStats::kNumIrqTotalFieldNumber: {
- context_->sched_tracker->PushCounter(
+ context_->event_tracker->PushCounter(
ts, fld.as_uint32(), num_irq_total_name_id_, 0, RefType::kNoRef);
break;
}
case protos::SysStats::kNumSoftirqTotalFieldNumber: {
- context_->sched_tracker->PushCounter(ts, fld.as_uint32(),
+ context_->event_tracker->PushCounter(ts, fld.as_uint32(),
num_softirq_total_name_id_, 0,
RefType::kNoRef);
break;
@@ -225,7 +235,7 @@
}
RefType ref_type = is_soft ? RefType::kIrq : RefType::kSoftIrq;
StringId name_id = is_soft ? num_irq_name_id_ : num_softirq_name_id_;
- context_->sched_tracker->PushCounter(ts, value, name_id, key, ref_type);
+ context_->event_tracker->PushCounter(ts, value, name_id, key, ref_type);
}
void ProtoTraceParser::ParseMemInfo(uint64_t ts, TraceBlobView mem) {
@@ -246,7 +256,7 @@
PERFETTO_ELOG("MemInfo key %d is not recognized.", key);
return;
}
- context_->sched_tracker->PushCounter(ts, value, meminfo_strs_id_[key], 0,
+ context_->event_tracker->PushCounter(ts, value, meminfo_strs_id_[key], 0,
RefType::kNoRef);
}
@@ -268,7 +278,7 @@
PERFETTO_ELOG("VmStat key %d is not recognized.", key);
return;
}
- context_->sched_tracker->PushCounter(ts, value, vmstat_strs_id_[key], 0,
+ context_->event_tracker->PushCounter(ts, value, vmstat_strs_id_[key], 0,
RefType::kNoRef);
}
@@ -295,44 +305,44 @@
switch (fld.id) {
case protos::SysStats::CpuTimes::kUserNsFieldNumber: {
value = fld.as_uint32();
- context_->sched_tracker->PushCounter(ts, value, cpu_times_user_ns_id_,
- cpu, RefType::kCPU_ID);
+ context_->event_tracker->PushCounter(ts, value, cpu_times_user_ns_id_,
+ cpu, RefType::kCpuId);
break;
}
case protos::SysStats::CpuTimes::kUserIceNsFieldNumber: {
value = fld.as_uint32();
- context_->sched_tracker->PushCounter(
- ts, value, cpu_times_user_ice_ns_id_, cpu, RefType::kCPU_ID);
+ context_->event_tracker->PushCounter(
+ ts, value, cpu_times_user_ice_ns_id_, cpu, RefType::kCpuId);
break;
}
case protos::SysStats::CpuTimes::kSystemModeNsFieldNumber: {
value = fld.as_uint32();
- context_->sched_tracker->PushCounter(
- ts, value, cpu_times_system_mode_ns_id_, cpu, RefType::kCPU_ID);
+ context_->event_tracker->PushCounter(
+ ts, value, cpu_times_system_mode_ns_id_, cpu, RefType::kCpuId);
break;
}
case protos::SysStats::CpuTimes::kIdleNsFieldNumber: {
value = fld.as_uint32();
- context_->sched_tracker->PushCounter(ts, value, cpu_times_idle_ns_id_,
- cpu, RefType::kCPU_ID);
+ context_->event_tracker->PushCounter(ts, value, cpu_times_idle_ns_id_,
+ cpu, RefType::kCpuId);
break;
}
case protos::SysStats::CpuTimes::kIoWaitNsFieldNumber: {
value = fld.as_uint32();
- context_->sched_tracker->PushCounter(
- ts, value, cpu_times_io_wait_ns_id_, cpu, RefType::kCPU_ID);
+ context_->event_tracker->PushCounter(
+ ts, value, cpu_times_io_wait_ns_id_, cpu, RefType::kCpuId);
break;
}
case protos::SysStats::CpuTimes::kIrqNsFieldNumber: {
value = fld.as_uint32();
- context_->sched_tracker->PushCounter(ts, value, cpu_times_irq_ns_id_,
- cpu, RefType::kCPU_ID);
+ context_->event_tracker->PushCounter(ts, value, cpu_times_irq_ns_id_,
+ cpu, RefType::kCpuId);
break;
}
case protos::SysStats::CpuTimes::kSoftirqNsFieldNumber: {
value = fld.as_uint32();
- context_->sched_tracker->PushCounter(
- ts, value, cpu_times_softirq_ns_id_, cpu, RefType::kCPU_ID);
+ context_->event_tracker->PushCounter(
+ ts, value, cpu_times_softirq_ns_id_, cpu, RefType::kCpuId);
break;
}
default:
@@ -410,8 +420,13 @@
uint64_t timestamp,
TraceBlobView ftrace) {
ProtoDecoder decoder(ftrace.data(), ftrace.length());
+ uint32_t pid = 0;
for (auto fld = decoder.ReadField(); fld.id != 0; fld = decoder.ReadField()) {
switch (fld.id) {
+ case protos::FtraceEvent::kPidFieldNumber: {
+ pid = fld.as_uint32();
+ break;
+ }
case protos::FtraceEvent::kSchedSwitchFieldNumber: {
PERFETTO_DCHECK(timestamp > 0);
const size_t fld_off = ftrace.offset_of(fld.data());
@@ -430,6 +445,25 @@
ParsePrint(cpu, timestamp, ftrace.slice(fld_off, fld.size()));
break;
}
+ case protos::FtraceEvent::kRssStatFieldNumber: {
+ PERFETTO_DCHECK(timestamp > 0);
+ const size_t fld_off = ftrace.offset_of(fld.data());
+ ParseRssStat(timestamp, pid, ftrace.slice(fld_off, fld.size()));
+ break;
+ }
+ case protos::FtraceEvent::kIonHeapGrow: {
+ PERFETTO_DCHECK(timestamp > 0);
+ const size_t fld_off = ftrace.offset_of(fld.data());
+ ParseIonHeapGrow(timestamp, pid, ftrace.slice(fld_off, fld.size()));
+ break;
+ }
+ case protos::FtraceEvent::kIonHeapShrink: {
+ PERFETTO_DCHECK(timestamp > 0);
+ const size_t fld_off = ftrace.offset_of(fld.data());
+ ParseIonHeapShrink(timestamp, pid, ftrace.slice(fld_off, fld.size()));
+ break;
+ }
+
default:
break;
}
@@ -437,6 +471,68 @@
PERFETTO_DCHECK(decoder.IsEndOfBuffer());
}
+void ProtoTraceParser::ParseRssStat(uint64_t timestamp,
+ uint32_t pid,
+ TraceBlobView view) {
+ ProtoDecoder decoder(view.data(), view.length());
+ uint32_t member = 0;
+ uint32_t size = 0;
+ for (auto fld = decoder.ReadField(); fld.id != 0; fld = decoder.ReadField()) {
+ switch (fld.id) {
+ case protos::RssStatFtraceEvent::kMemberFieldNumber:
+ member = fld.as_uint32();
+ break;
+ case protos::RssStatFtraceEvent::kSizeFieldNumber:
+ size = fld.as_uint32();
+ break;
+ }
+ }
+ UniqueTid utid = context_->process_tracker->UpdateThread(timestamp, pid, 0);
+ context_->event_tracker->PushCounter(timestamp, size, rss_members_[member],
+ utid, RefType::kUtid);
+ PERFETTO_DCHECK(decoder.IsEndOfBuffer());
+}
+
+void ProtoTraceParser::ParseIonHeapGrow(uint64_t timestamp,
+ uint32_t pid,
+ TraceBlobView view) {
+ ProtoDecoder decoder(view.data(), view.length());
+ uint32_t value = 0;
+ // TODO(b/118300811): The heap name pointer cannot be read. Read once it
+ // has been fixed.
+ for (auto fld = decoder.ReadField(); fld.id != 0; fld = decoder.ReadField()) {
+ switch (fld.id) {
+ case protos::IonHeapGrowFtraceEvent::kTotalAllocatedFieldNumber:
+ value = fld.as_uint32();
+ break;
+ }
+ }
+ UniqueTid utid = context_->process_tracker->UpdateThread(timestamp, pid, 0);
+ context_->event_tracker->PushCounter(timestamp, value, ion_heap_grow_id_,
+ utid, RefType::kUtid);
+ PERFETTO_DCHECK(decoder.IsEndOfBuffer());
+}
+
+void ProtoTraceParser::ParseIonHeapShrink(uint64_t timestamp,
+ uint32_t pid,
+ TraceBlobView view) {
+ ProtoDecoder decoder(view.data(), view.length());
+ uint32_t value = 0;
+ // TODO(b/118300811): The heap name pointer cannot be read. Read once it
+ // has been fixed.
+ for (auto fld = decoder.ReadField(); fld.id != 0; fld = decoder.ReadField()) {
+ switch (fld.id) {
+ case protos::IonHeapShrinkFtraceEvent::kTotalAllocatedFieldNumber:
+ value = fld.as_uint32();
+ break;
+ }
+ }
+ UniqueTid utid = context_->process_tracker->UpdateThread(timestamp, pid, 0);
+ context_->event_tracker->PushCounter(timestamp, value, ion_heap_shrink_id_,
+ utid, RefType::kUtid);
+ PERFETTO_DCHECK(decoder.IsEndOfBuffer());
+}
+
void ProtoTraceParser::ParseCpuFreq(uint64_t timestamp, TraceBlobView view) {
ProtoDecoder decoder(view.data(), view.length());
@@ -452,9 +548,8 @@
break;
}
}
- context_->sched_tracker->PushCounter(timestamp, new_freq, cpu_freq_name_id_,
- cpu_affected, RefType::kCPU_ID);
-
+ context_->event_tracker->PushCounter(timestamp, new_freq, cpu_freq_name_id_,
+ cpu_affected, RefType::kCpuId);
PERFETTO_DCHECK(decoder.IsEndOfBuffer());
}
@@ -485,7 +580,7 @@
break;
}
}
- context_->sched_tracker->PushSchedSwitch(cpu, timestamp, prev_pid, prev_state,
+ context_->event_tracker->PushSchedSwitch(cpu, timestamp, prev_pid, prev_state,
next_pid, next_comm);
PERFETTO_DCHECK(decoder.IsEndOfBuffer());
}
@@ -524,8 +619,8 @@
case 'C': {
StringId name_id = context_->storage->InternString(point.name);
- context_->sched_tracker->PushCounter(timestamp, point.value, name_id,
- utid, RefType::kUTID);
+ context_->event_tracker->PushCounter(timestamp, point.value, name_id,
+ utid, RefType::kUtid);
}
}
PERFETTO_DCHECK(decoder.IsEndOfBuffer());
diff --git a/src/trace_processor/proto_trace_parser.h b/src/trace_processor/proto_trace_parser.h
index 73b3682..cc4ffa5 100644
--- a/src/trace_processor/proto_trace_parser.h
+++ b/src/trace_processor/proto_trace_parser.h
@@ -69,6 +69,9 @@
void ParseVmStat(uint64_t ts, TraceBlobView);
void ParseCpuTimes(uint64_t ts, TraceBlobView);
void ParseIrqCount(uint64_t ts, TraceBlobView, bool is_soft);
+ void ParseRssStat(uint64_t ts, uint32_t pid, TraceBlobView);
+ void ParseIonHeapGrow(uint64_t ts, uint32_t pid, TraceBlobView);
+ void ParseIonHeapShrink(uint64_t ts, uint32_t pid, TraceBlobView);
private:
TraceProcessorContext* context_;
@@ -85,8 +88,11 @@
const StringId cpu_times_io_wait_ns_id_;
const StringId cpu_times_irq_ns_id_;
const StringId cpu_times_softirq_ns_id_;
+ const StringId ion_heap_grow_id_;
+ const StringId ion_heap_shrink_id_;
std::vector<StringId> meminfo_strs_id_;
std::vector<StringId> vmstat_strs_id_;
+ std::vector<StringId> rss_members_;
};
} // namespace trace_processor
diff --git a/src/trace_processor/proto_trace_parser_unittest.cc b/src/trace_processor/proto_trace_parser_unittest.cc
index 1e6c9b6..d24fa01 100644
--- a/src/trace_processor/proto_trace_parser_unittest.cc
+++ b/src/trace_processor/proto_trace_parser_unittest.cc
@@ -19,9 +19,9 @@
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "perfetto/base/string_view.h"
+#include "src/trace_processor/event_tracker.h"
#include "src/trace_processor/process_tracker.h"
#include "src/trace_processor/proto_trace_parser.h"
-#include "src/trace_processor/sched_tracker.h"
#include "src/trace_processor/trace_sorter.h"
#include "perfetto/trace/trace.pb.h"
@@ -38,10 +38,10 @@
using ::testing::Pointwise;
using ::testing::NiceMock;
-class MockSchedTracker : public SchedTracker {
+class MockEventTracker : public EventTracker {
public:
- MockSchedTracker(TraceProcessorContext* context) : SchedTracker(context) {}
- virtual ~MockSchedTracker() = default;
+ MockEventTracker(TraceProcessorContext* context) : EventTracker(context) {}
+ virtual ~MockEventTracker() = default;
MOCK_METHOD6(PushSchedSwitch,
void(uint32_t cpu,
@@ -82,8 +82,8 @@
ProtoTraceParserTest() {
storage_ = new NiceMock<MockTraceStorage>();
context_.storage.reset(storage_);
- sched_ = new MockSchedTracker(&context_);
- context_.sched_tracker.reset(sched_);
+ event_ = new MockEventTracker(&context_);
+ context_.event_tracker.reset(event_);
process_ = new MockProcessTracker(&context_);
context_.process_tracker.reset(process_);
const auto optim = OptimizationMode::kMinLatency;
@@ -101,7 +101,7 @@
protected:
TraceProcessorContext context_;
- MockSchedTracker* sched_;
+ MockEventTracker* event_;
MockProcessTracker* process_;
NiceMock<MockTraceStorage>* storage_;
};
@@ -122,7 +122,7 @@
sched_switch->set_next_comm(kProcName);
sched_switch->set_next_pid(100);
- EXPECT_CALL(*sched_, PushSchedSwitch(10, 1000, 10, 32, 100,
+ EXPECT_CALL(*event_, PushSchedSwitch(10, 1000, 10, 32, 100,
base::StringView(kProcName)));
Tokenize(trace);
}
@@ -153,10 +153,10 @@
sched_switch->set_next_comm(kProcName2);
sched_switch->set_next_pid(10);
- EXPECT_CALL(*sched_, PushSchedSwitch(10, 1000, 10, 32, 100,
+ EXPECT_CALL(*event_, PushSchedSwitch(10, 1000, 10, 32, 100,
base::StringView(kProcName1)));
- EXPECT_CALL(*sched_, PushSchedSwitch(10, 1001, 100, 32, 10,
+ EXPECT_CALL(*event_, PushSchedSwitch(10, 1001, 100, 32, 10,
base::StringView(kProcName2)));
Tokenize(trace);
@@ -191,10 +191,10 @@
sched_switch->set_next_comm(kProcName2);
sched_switch->set_next_pid(10);
- EXPECT_CALL(*sched_, PushSchedSwitch(10, 1000, 10, 32, 100,
+ EXPECT_CALL(*event_, PushSchedSwitch(10, 1000, 10, 32, 100,
base::StringView(kProcName1)));
- EXPECT_CALL(*sched_, PushSchedSwitch(10, 1001, 100, 32, 10,
+ EXPECT_CALL(*event_, PushSchedSwitch(10, 1001, 100, 32, 10,
base::StringView(kProcName2)));
Tokenize(trace);
}
@@ -224,11 +224,11 @@
sched_switch->set_next_comm(kProcName2);
sched_switch->set_next_pid(10);
- EXPECT_CALL(*sched_, PushSchedSwitch(10, 1000, 10, 32, 100,
+ EXPECT_CALL(*event_, PushSchedSwitch(10, 1000, 10, 32, 100,
base::StringView(kProcName1)));
Tokenize(trace_1);
- EXPECT_CALL(*sched_, PushSchedSwitch(10, 1001, 100, 32, 10,
+ EXPECT_CALL(*event_, PushSchedSwitch(10, 1001, 100, 32, 10,
base::StringView(kProcName2)));
Tokenize(trace_2);
}
@@ -244,7 +244,7 @@
uint32_t value = 10;
meminfo->set_value(value);
- EXPECT_CALL(*sched_, PushCounter(ts, value, 0, 0, RefType::kNoRef));
+ EXPECT_CALL(*event_, PushCounter(ts, value, 0, 0, RefType::kNoRef));
Tokenize(trace_1);
}
@@ -259,7 +259,7 @@
uint32_t value = 10;
meminfo->set_value(value);
- EXPECT_CALL(*sched_, PushCounter(ts, value, 0, 0, RefType::kNoRef));
+ EXPECT_CALL(*event_, PushCounter(ts, value, 0, 0, RefType::kNoRef));
Tokenize(trace_1);
}
@@ -273,7 +273,7 @@
cpu_freq->set_cpu_id(10);
cpu_freq->set_state(2000);
- EXPECT_CALL(*sched_, PushCounter(1000, 2000, 0, 10, RefType::kCPU_ID));
+ EXPECT_CALL(*event_, PushCounter(1000, 2000, 0, 10, RefType::kCpuId));
Tokenize(trace_1);
}
diff --git a/src/trace_processor/proto_trace_tokenizer.cc b/src/trace_processor/proto_trace_tokenizer.cc
index f3284c9..732a088 100644
--- a/src/trace_processor/proto_trace_tokenizer.cc
+++ b/src/trace_processor/proto_trace_tokenizer.cc
@@ -22,8 +22,8 @@
#include "perfetto/base/utils.h"
#include "perfetto/protozero/proto_decoder.h"
#include "perfetto/protozero/proto_utils.h"
+#include "src/trace_processor/event_tracker.h"
#include "src/trace_processor/process_tracker.h"
-#include "src/trace_processor/sched_tracker.h"
#include "src/trace_processor/trace_blob_view.h"
#include "src/trace_processor/trace_sorter.h"
diff --git a/src/trace_processor/sched_slice_table_unittest.cc b/src/trace_processor/sched_slice_table_unittest.cc
index 57b0a95..7a48eff 100644
--- a/src/trace_processor/sched_slice_table_unittest.cc
+++ b/src/trace_processor/sched_slice_table_unittest.cc
@@ -15,8 +15,8 @@
*/
#include "src/trace_processor/sched_slice_table.h"
+#include "src/trace_processor/event_tracker.h"
#include "src/trace_processor/process_tracker.h"
-#include "src/trace_processor/sched_tracker.h"
#include "src/trace_processor/trace_processor_context.h"
#include "gmock/gmock.h"
@@ -40,7 +40,7 @@
context_.storage.reset(new TraceStorage());
context_.process_tracker.reset(new ProcessTracker(&context_));
- context_.sched_tracker.reset(new SchedTracker(&context_));
+ context_.event_tracker.reset(new EventTracker(&context_));
SchedSliceTable::RegisterTable(db_.get(), context_.storage.get());
}
@@ -69,13 +69,13 @@
static const char kCommProc1[] = "process1";
static const char kCommProc2[] = "process2";
uint32_t pid_2 = 4;
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp, pid_1, prev_state,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp, pid_1, prev_state,
pid_2, kCommProc1);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 3, pid_2, prev_state,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp + 3, pid_2, prev_state,
pid_1, kCommProc2);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 4, pid_1, prev_state,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp + 4, pid_1, prev_state,
pid_2, kCommProc1);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 10, pid_2,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp + 10, pid_2,
prev_state, pid_1, kCommProc2);
PrepareValidStatement(
@@ -109,17 +109,17 @@
static const char kCommProc1[] = "process1";
static const char kCommProc2[] = "process2";
uint32_t pid_2 = 4;
- context_.sched_tracker->PushSchedSwitch(cpu_3, timestamp - 2, pid_1,
+ context_.event_tracker->PushSchedSwitch(cpu_3, timestamp - 2, pid_1,
prev_state, pid_2, kCommProc1);
- context_.sched_tracker->PushSchedSwitch(cpu_3, timestamp - 1, pid_2,
+ context_.event_tracker->PushSchedSwitch(cpu_3, timestamp - 1, pid_2,
prev_state, pid_1, kCommProc2);
- context_.sched_tracker->PushSchedSwitch(cpu_1, timestamp, pid_1, prev_state,
+ context_.event_tracker->PushSchedSwitch(cpu_1, timestamp, pid_1, prev_state,
pid_2, kCommProc1);
- context_.sched_tracker->PushSchedSwitch(cpu_2, timestamp + 3, pid_2,
+ context_.event_tracker->PushSchedSwitch(cpu_2, timestamp + 3, pid_2,
prev_state, pid_1, kCommProc2);
- context_.sched_tracker->PushSchedSwitch(cpu_1, timestamp + 4, pid_1,
+ context_.event_tracker->PushSchedSwitch(cpu_1, timestamp + 4, pid_1,
prev_state, pid_2, kCommProc1);
- context_.sched_tracker->PushSchedSwitch(cpu_2, timestamp + 10, pid_2,
+ context_.event_tracker->PushSchedSwitch(cpu_2, timestamp + 10, pid_2,
prev_state, pid_1, kCommProc2);
PrepareValidStatement(
@@ -152,13 +152,13 @@
static const char kCommProc1[] = "process1";
static const char kCommProc2[] = "process2";
uint32_t pid_2 = 4;
- context_.sched_tracker->PushSchedSwitch(cpu_1, timestamp, pid_1, prev_state,
+ context_.event_tracker->PushSchedSwitch(cpu_1, timestamp, pid_1, prev_state,
pid_2, kCommProc1);
- context_.sched_tracker->PushSchedSwitch(cpu_2, timestamp + 3, pid_2,
+ context_.event_tracker->PushSchedSwitch(cpu_2, timestamp + 3, pid_2,
prev_state, pid_1, kCommProc2);
- context_.sched_tracker->PushSchedSwitch(cpu_1, timestamp + 4, pid_1,
+ context_.event_tracker->PushSchedSwitch(cpu_1, timestamp + 4, pid_1,
prev_state, pid_2, kCommProc1);
- context_.sched_tracker->PushSchedSwitch(cpu_2, timestamp + 10, pid_2,
+ context_.event_tracker->PushSchedSwitch(cpu_2, timestamp + 10, pid_2,
prev_state, pid_1, kCommProc2);
PrepareValidStatement(
@@ -180,13 +180,13 @@
static const char kCommProc1[] = "process1";
static const char kCommProc2[] = "process2";
uint32_t pid_2 = 4;
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp, pid_1, prev_state,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp, pid_1, prev_state,
pid_2, kCommProc1);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 3, pid_2, prev_state,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp + 3, pid_2, prev_state,
pid_1, kCommProc2);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 4, pid_1, prev_state,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp + 4, pid_1, prev_state,
pid_2, kCommProc1);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 10, pid_2,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp + 10, pid_2,
prev_state, pid_1, kCommProc2);
PrepareValidStatement("SELECT utid FROM sched where dur != 0 ORDER BY utid");
@@ -213,11 +213,11 @@
// Fill |cpu_5| and |cpu_7) with one sched switch per time unit starting,
// respectively, @ T=50 and T=70.
for (uint64_t i = 0; i <= 11; i++) {
- context_.sched_tracker->PushSchedSwitch(cpu_5, 50 + i, pid_1, prev_state,
+ context_.event_tracker->PushSchedSwitch(cpu_5, 50 + i, pid_1, prev_state,
pid_1, "pid_1");
}
for (uint64_t i = 0; i <= 11; i++) {
- context_.sched_tracker->PushSchedSwitch(cpu_7, 70 + i, pid_2, prev_state,
+ context_.event_tracker->PushSchedSwitch(cpu_7, 70 + i, pid_2, prev_state,
pid_2, "pid_2");
}
diff --git a/src/trace_processor/thread_table_unittest.cc b/src/trace_processor/thread_table_unittest.cc
index 10e1622..fbb4775 100644
--- a/src/trace_processor/thread_table_unittest.cc
+++ b/src/trace_processor/thread_table_unittest.cc
@@ -15,9 +15,9 @@
*/
#include "src/trace_processor/thread_table.h"
+#include "src/trace_processor/event_tracker.h"
#include "src/trace_processor/process_table.h"
#include "src/trace_processor/process_tracker.h"
-#include "src/trace_processor/sched_tracker.h"
#include "src/trace_processor/scoped_db.h"
#include "src/trace_processor/trace_processor_context.h"
@@ -37,7 +37,7 @@
context_.storage.reset(new TraceStorage());
context_.process_tracker.reset(new ProcessTracker(&context_));
- context_.sched_tracker.reset(new SchedTracker(&context_));
+ context_.event_tracker.reset(new EventTracker(&context_));
ThreadTable::RegisterTable(db_.get(), context_.storage.get());
ProcessTable::RegisterTable(db_.get(), context_.storage.get());
@@ -70,9 +70,9 @@
static const char kThreadName1[] = "thread1";
static const char kThreadName2[] = "thread2";
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1, prev_state,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1, prev_state,
/*tid=*/4, kThreadName1);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4,
prev_state, /*tid=*/1, kThreadName2);
context_.process_tracker->UpdateProcess(2, "test");
@@ -95,12 +95,12 @@
static const char kThreadName1[] = "thread1";
static const char kThreadName2[] = "thread2";
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1, prev_state,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1, prev_state,
/*tid=*/4, kThreadName1);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4,
prev_state,
/*tid=*/1, kThreadName2);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 2, /*tid=*/1,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp + 2, /*tid=*/1,
prev_state, /*tid=*/4, kThreadName1);
context_.process_tracker->UpdateProcess(2, "test");
@@ -125,9 +125,9 @@
static const char kThreadName1[] = "thread1";
static const char kThreadName2[] = "thread2";
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1, prev_state,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1, prev_state,
/*tid=*/4, kThreadName1);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4,
+ context_.event_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4,
prev_state,
/*tid=*/1, kThreadName2);
diff --git a/src/trace_processor/trace_processor.cc b/src/trace_processor/trace_processor.cc
index 5e07842..21b8be3 100644
--- a/src/trace_processor/trace_processor.cc
+++ b/src/trace_processor/trace_processor.cc
@@ -21,13 +21,13 @@
#include "perfetto/base/time.h"
#include "src/trace_processor/counters_table.h"
+#include "src/trace_processor/event_tracker.h"
#include "src/trace_processor/json_trace_parser.h"
#include "src/trace_processor/process_table.h"
#include "src/trace_processor/process_tracker.h"
#include "src/trace_processor/proto_trace_parser.h"
#include "src/trace_processor/proto_trace_tokenizer.h"
#include "src/trace_processor/sched_slice_table.h"
-#include "src/trace_processor/sched_tracker.h"
#include "src/trace_processor/slice_table.h"
#include "src/trace_processor/slice_tracker.h"
#include "src/trace_processor/span_operator_table.h"
@@ -49,7 +49,7 @@
context_.storage.reset(new TraceStorage());
context_.slice_tracker.reset(new SliceTracker(&context_));
- context_.sched_tracker.reset(new SchedTracker(&context_));
+ context_.event_tracker.reset(new EventTracker(&context_));
context_.proto_parser.reset(new ProtoTraceParser(&context_));
context_.process_tracker.reset(new ProcessTracker(&context_));
context_.sorter.reset(
diff --git a/src/trace_processor/trace_processor_context.cc b/src/trace_processor/trace_processor_context.cc
index 477ec09..7fbc07c 100644
--- a/src/trace_processor/trace_processor_context.cc
+++ b/src/trace_processor/trace_processor_context.cc
@@ -16,10 +16,10 @@
#include "src/trace_processor/trace_processor_context.h"
#include "src/trace_processor/chunked_trace_reader.h"
+#include "src/trace_processor/event_tracker.h"
#include "src/trace_processor/json_trace_parser.h"
#include "src/trace_processor/process_tracker.h"
#include "src/trace_processor/proto_trace_parser.h"
-#include "src/trace_processor/sched_tracker.h"
#include "src/trace_processor/slice_tracker.h"
#include "src/trace_processor/trace_sorter.h"
diff --git a/src/trace_processor/trace_processor_context.h b/src/trace_processor/trace_processor_context.h
index f8432c6..ee9f2ba 100644
--- a/src/trace_processor/trace_processor_context.h
+++ b/src/trace_processor/trace_processor_context.h
@@ -25,7 +25,7 @@
class SliceTracker;
class ProcessTracker;
class TraceStorage;
-class SchedTracker;
+class EventTracker;
class TraceParser;
class TraceSorter;
class ProtoTraceParser;
@@ -38,7 +38,7 @@
std::unique_ptr<SliceTracker> slice_tracker;
std::unique_ptr<ProcessTracker> process_tracker;
- std::unique_ptr<SchedTracker> sched_tracker;
+ std::unique_ptr<EventTracker> event_tracker;
std::unique_ptr<TraceStorage> storage;
std::unique_ptr<ProtoTraceParser> proto_parser;
std::unique_ptr<TraceSorter> sorter;
diff --git a/src/trace_processor/trace_storage.h b/src/trace_processor/trace_storage.h
index eef8094..62d8ce4 100644
--- a/src/trace_processor/trace_storage.h
+++ b/src/trace_processor/trace_storage.h
@@ -43,7 +43,13 @@
// StringId is an offset into |string_pool_|.
using StringId = size_t;
-enum RefType { kNoRef = 0, kUTID = 1, kCPU_ID = 2, kIrq = 3, kSoftIrq = 4 };
+enum RefType {
+ kNoRef = 0,
+ kUtid = 1,
+ kCpuId = 2,
+ kIrq = 3,
+ kSoftIrq = 4,
+};
// Stores a data inside a trace file in a columnar form. This makes it efficient
// to read or search across a single field of the trace (e.g. all the thread
@@ -163,14 +169,12 @@
uint64_t duration,
StringId name_id,
double value,
- double value_delta,
int64_t ref,
RefType type) {
timestamps_.emplace_back(timestamp);
durations_.emplace_back(duration);
name_ids_.emplace_back(name_id);
values_.emplace_back(value);
- value_deltas_.emplace_back(value_delta);
refs_.emplace_back(ref);
types_.emplace_back(type);
return counter_count() - 1;
@@ -180,10 +184,6 @@
durations_[index] = duration;
}
- void set_value_delta(size_t index, double value_delta) {
- value_deltas_[index] = value_delta;
- }
-
size_t counter_count() const { return timestamps_.size(); }
const std::deque<uint64_t>& timestamps() const { return timestamps_; }
@@ -194,8 +194,6 @@
const std::deque<double>& values() const { return values_; }
- const std::deque<double>& value_deltas() const { return value_deltas_; }
-
const std::deque<int64_t>& refs() const { return refs_; }
const std::deque<RefType>& types() const { return types_; }
@@ -205,7 +203,6 @@
std::deque<uint64_t> durations_;
std::deque<StringId> name_ids_;
std::deque<double> values_;
- std::deque<double> value_deltas_;
std::deque<int64_t> refs_;
std::deque<RefType> types_;
};
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/kmem/rss_stat/format b/src/traced/probes/ftrace/test/data/synthetic/events/kmem/rss_stat/format
index 69d1c9c..c4713fe 100644
--- a/src/traced/probes/ftrace/test/data/synthetic/events/kmem/rss_stat/format
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/kmem/rss_stat/format
@@ -9,4 +9,4 @@
field:int member; offset:8; size:4; signed:1;
field:long size; offset:16; size:8; signed:1;
-print fmt: "member=%d size=%ldKB", REC->member, REC->size
+print fmt: "member=%d size=%ldB", REC->member, REC->size