ftrace_reader: Fix InferFtraceType for int8_t
Bug: 69362224
Change-Id: I310c2cbbc7a35a81dc8a29df94f8336ff0af890d
diff --git a/src/ftrace_reader/cpu_reader.cc b/src/ftrace_reader/cpu_reader.cc
index ee56cb7..6eadb3e 100644
--- a/src/ftrace_reader/cpu_reader.cc
+++ b/src/ftrace_reader/cpu_reader.cc
@@ -457,6 +457,7 @@
case kUint64ToUint64:
ReadIntoVarInt<uint64_t>(field_start, field_id, message);
return true;
+ case kInt8ToInt32:
case kInt16ToInt32:
case kInt32ToInt32:
case kInt32ToInt64:
diff --git a/src/ftrace_reader/event_info_constants.cc b/src/ftrace_reader/event_info_constants.cc
index 7be91e2..9de52e8 100644
--- a/src/ftrace_reader/event_info_constants.cc
+++ b/src/ftrace_reader/event_info_constants.cc
@@ -55,6 +55,8 @@
*out = kUint32ToUint64;
} else if (ftrace == kFtraceUint64 && proto == kProtoUint64) {
*out = kUint64ToUint64;
+ } else if (ftrace == kFtraceInt8 && proto == kProtoInt32) {
+ *out = kInt8ToInt32;
} else if (ftrace == kFtraceInt16 && proto == kProtoInt32) {
*out = kInt16ToInt32;
} else if (ftrace == kFtraceInt32 && proto == kProtoInt32) {
diff --git a/src/ftrace_reader/event_info_constants.h b/src/ftrace_reader/event_info_constants.h
index 0a72f82..0d6ac64 100644
--- a/src/ftrace_reader/event_info_constants.h
+++ b/src/ftrace_reader/event_info_constants.h
@@ -49,6 +49,7 @@
kFtraceUint16,
kFtraceUint32,
kFtraceUint64,
+ kFtraceInt8,
kFtraceInt16,
kFtraceInt32,
kFtraceInt64,
@@ -71,6 +72,7 @@
kUint32ToUint32,
kUint32ToUint64,
kUint64ToUint64,
+ kInt8ToInt32,
kInt16ToInt32,
kInt32ToInt32,
kInt32ToInt64,
@@ -133,6 +135,8 @@
return "uint32";
case kFtraceUint64:
return "uint64";
+ case kFtraceInt8:
+ return "int8";
case kFtraceInt16:
return "int16";
case kFtraceInt32:
diff --git a/src/ftrace_reader/proto_translation_table.cc b/src/ftrace_reader/proto_translation_table.cc
index 56c9e2f..389f251 100644
--- a/src/ftrace_reader/proto_translation_table.cc
+++ b/src/ftrace_reader/proto_translation_table.cc
@@ -66,8 +66,7 @@
event_name_for_debug, field->ftrace_name,
ftrace_field.type_and_name.c_str(), ftrace_field.size,
ftrace_field.is_signed);
- // TODO(hjd): Uncomment DCHECK when proto generation is fixed.
- // PERFETTO_DCHECK(false);
+ PERFETTO_DCHECK(false);
return false;
}
@@ -208,7 +207,10 @@
}
// Ints of various sizes:
- if (size == 1 && !is_signed) {
+ if (size == 1 && is_signed) {
+ *out = kFtraceInt8;
+ return true;
+ } else if (size == 1 && !is_signed) {
*out = kFtraceUint8;
return true;
} else if (size == 2 && is_signed) {
diff --git a/src/ftrace_reader/proto_translation_table_unittest.cc b/src/ftrace_reader/proto_translation_table_unittest.cc
index 982ad59..856f113 100644
--- a/src/ftrace_reader/proto_translation_table_unittest.cc
+++ b/src/ftrace_reader/proto_translation_table_unittest.cc
@@ -47,6 +47,7 @@
FtraceProcfs ftrace_procfs(path);
table_ = ProtoTranslationTable::Create(&ftrace_procfs, GetStaticEventInfo(),
GetStaticCommonFieldsInfo());
+ PERFETTO_CHECK(table_);
}
std::unique_ptr<ProtoTranslationTable> table_;
@@ -80,12 +81,13 @@
EXPECT_EQ(pid_field.proto_field_id, 2u);
{
- auto event = table_->GetEventByName("cpufreq_interactive_boost");
- EXPECT_EQ(std::string(event->name), "cpufreq_interactive_boost");
- EXPECT_EQ(std::string(event->group), "cpufreq_interactive");
- EXPECT_EQ(event->fields.at(0).proto_field_type, kProtoString);
- EXPECT_EQ(event->fields.at(0).ftrace_type, kFtraceStringPtr);
- EXPECT_EQ(event->fields.at(0).strategy, kStringPtrToString);
+ auto event = table_->GetEventByName("print");
+ EXPECT_TRUE(event);
+ EXPECT_EQ(std::string(event->name), "print");
+ EXPECT_EQ(std::string(event->group), "ftrace");
+ EXPECT_EQ(event->fields.at(1).proto_field_type, kProtoString);
+ EXPECT_EQ(event->fields.at(1).ftrace_type, kFtraceCString);
+ EXPECT_EQ(event->fields.at(1).strategy, kCStringToString);
}
}
@@ -275,6 +277,9 @@
ASSERT_TRUE(InferFtraceType("pid_t foo", 4, false, &type));
ASSERT_EQ(type, kFtracePid32);
+ ASSERT_TRUE(InferFtraceType("char foo", 1, true, &type));
+ ASSERT_EQ(type, kFtraceInt8);
+
EXPECT_FALSE(InferFtraceType("foo", 64, false, &type));
}