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));
 }