Merge "probes: Make the type id less error prone"
diff --git a/src/traced/probes/android_log/android_log_data_source.cc b/src/traced/probes/android_log/android_log_data_source.cc
index c49bec6..801658e 100644
--- a/src/traced/probes/android_log/android_log_data_source.cc
+++ b/src/traced/probes/android_log/android_log_data_source.cc
@@ -89,7 +89,7 @@
                                            base::TaskRunner* task_runner,
                                            TracingSessionID session_id,
                                            std::unique_ptr<TraceWriter> writer)
-    : ProbesDataSource(session_id, kTypeId),
+    : ProbesDataSource(session_id, Type::kAndroidLog),
       task_runner_(task_runner),
       writer_(std::move(writer)),
       weak_factory_(this) {
diff --git a/src/traced/probes/android_log/android_log_data_source.h b/src/traced/probes/android_log/android_log_data_source.h
index 12f1ae8..7e73cf2 100644
--- a/src/traced/probes/android_log/android_log_data_source.h
+++ b/src/traced/probes/android_log/android_log_data_source.h
@@ -56,7 +56,6 @@
     std::string name;
     std::vector<std::string> fields;
   };
-  static constexpr int kTypeId = 6;
 
   AndroidLogDataSource(DataSourceConfig,
                        base::TaskRunner*,
diff --git a/src/traced/probes/filesystem/inode_file_data_source.cc b/src/traced/probes/filesystem/inode_file_data_source.cc
index 1f0a22f..da7ab15 100644
--- a/src/traced/probes/filesystem/inode_file_data_source.cc
+++ b/src/traced/probes/filesystem/inode_file_data_source.cc
@@ -79,9 +79,6 @@
 
 }  // namespace
 
-// static
-constexpr int InodeFileDataSource::kTypeId;
-
 void CreateStaticDeviceToInodeMap(
     const std::string& root_directory,
     std::map<BlockDeviceID, std::unordered_map<Inode, InodeMapValue>>*
@@ -110,7 +107,7 @@
         static_file_map,
     LRUInodeCache* cache,
     std::unique_ptr<TraceWriter> writer)
-    : ProbesDataSource(session_id, kTypeId),
+    : ProbesDataSource(session_id, Type::kInodeFile),
       task_runner_(task_runner),
       static_file_map_(static_file_map),
       cache_(cache),
@@ -297,7 +294,7 @@
 bool InodeFileDataSource::OnInodeFound(BlockDeviceID block_device_id,
                                        Inode inode_number,
                                        const std::string& path,
-                                       InodeFileMap_Entry_Type type) {
+                                       InodeFileMap_Entry_Type inode_type) {
   auto it = missing_inodes_.find(block_device_id);
   if (it == missing_inodes_.end())
     return true;
@@ -318,7 +315,7 @@
     FillInodeEntry(AddToCurrentTracePacket(block_device_id), inode_number,
                    *cur_val);
   } else {
-    InodeMapValue new_val(InodeMapValue(type, {path}));
+    InodeMapValue new_val(InodeMapValue(inode_type, {path}));
     cache_->Insert(key, new_val);
     FillInodeEntry(AddToCurrentTracePacket(block_device_id), inode_number,
                    new_val);
diff --git a/src/traced/probes/filesystem/inode_file_data_source.h b/src/traced/probes/filesystem/inode_file_data_source.h
index 8ccab1a..2d18fb8 100644
--- a/src/traced/probes/filesystem/inode_file_data_source.h
+++ b/src/traced/probes/filesystem/inode_file_data_source.h
@@ -53,8 +53,6 @@
 class InodeFileDataSource : public ProbesDataSource,
                             public FileScanner::Delegate {
  public:
-  static constexpr int kTypeId = 2;
-
   InodeFileDataSource(
       DataSourceConfig,
       base::TaskRunner*,
diff --git a/src/traced/probes/ftrace/ftrace_data_source.cc b/src/traced/probes/ftrace/ftrace_data_source.cc
index f28a491..e4890dc 100644
--- a/src/traced/probes/ftrace/ftrace_data_source.cc
+++ b/src/traced/probes/ftrace/ftrace_data_source.cc
@@ -25,15 +25,12 @@
 
 namespace perfetto {
 
-// static
-constexpr int FtraceDataSource::kTypeId;
-
 FtraceDataSource::FtraceDataSource(
     base::WeakPtr<FtraceController> controller_weak,
     TracingSessionID session_id,
     const FtraceConfig& config,
     std::unique_ptr<TraceWriter> writer)
-    : ProbesDataSource(session_id, kTypeId),
+    : ProbesDataSource(session_id, Type::kFtrace),
       config_(config),
       writer_(std::move(writer)),
       controller_weak_(std::move(controller_weak)) {}
diff --git a/src/traced/probes/ftrace/ftrace_data_source.h b/src/traced/probes/ftrace/ftrace_data_source.h
index 1730616..3c19be3 100644
--- a/src/traced/probes/ftrace/ftrace_data_source.h
+++ b/src/traced/probes/ftrace/ftrace_data_source.h
@@ -54,7 +54,6 @@
 // FtraceController.
 class FtraceDataSource : public ProbesDataSource {
  public:
-  static constexpr int kTypeId = 1;
   FtraceDataSource(base::WeakPtr<FtraceController>,
                    TracingSessionID,
                    const FtraceConfig&,
diff --git a/src/traced/probes/metatrace/metatrace_data_source.cc b/src/traced/probes/metatrace/metatrace_data_source.cc
index f87117e..f59b537 100644
--- a/src/traced/probes/metatrace/metatrace_data_source.cc
+++ b/src/traced/probes/metatrace/metatrace_data_source.cc
@@ -35,7 +35,7 @@
 MetatraceDataSource::MetatraceDataSource(base::TaskRunner* task_runner,
                                          TracingSessionID session_id,
                                          std::unique_ptr<TraceWriter> writer)
-    : ProbesDataSource(session_id, kTypeId),
+    : ProbesDataSource(session_id, Type::kMetaTrace),
       task_runner_(task_runner),
       trace_writer_(std::move(writer)) {}
 
diff --git a/src/traced/probes/metatrace/metatrace_data_source.h b/src/traced/probes/metatrace/metatrace_data_source.h
index 3bd0d04..54d110d 100644
--- a/src/traced/probes/metatrace/metatrace_data_source.h
+++ b/src/traced/probes/metatrace/metatrace_data_source.h
@@ -32,7 +32,6 @@
 
 class MetatraceDataSource : public ProbesDataSource {
  public:
-  static constexpr int kTypeId = 8;
   static const char* kDataSourceName;
 
   MetatraceDataSource(base::TaskRunner*,
diff --git a/src/traced/probes/packages_list/packages_list_data_source.cc b/src/traced/probes/packages_list/packages_list_data_source.cc
index 730d0f6..3ae20d7 100644
--- a/src/traced/probes/packages_list/packages_list_data_source.cc
+++ b/src/traced/probes/packages_list/packages_list_data_source.cc
@@ -109,7 +109,8 @@
     const DataSourceConfig& ds_config,
     TracingSessionID session_id,
     std::unique_ptr<TraceWriter> writer)
-    : ProbesDataSource(session_id, kTypeId), writer_(std::move(writer)) {
+    : ProbesDataSource(session_id, Type::kPackagesList),
+      writer_(std::move(writer)) {
   PackagesListConfig::Decoder cfg(ds_config.packages_list_config_raw());
   for (auto name = cfg.package_name_filter(); name; ++name) {
     package_name_filter_.emplace((*name).ToStdString());
diff --git a/src/traced/probes/packages_list/packages_list_data_source.h b/src/traced/probes/packages_list/packages_list_data_source.h
index 6f0ee9a..d99674c 100644
--- a/src/traced/probes/packages_list/packages_list_data_source.h
+++ b/src/traced/probes/packages_list/packages_list_data_source.h
@@ -50,7 +50,6 @@
 
 class PackagesListDataSource : public ProbesDataSource {
  public:
-  static constexpr int kTypeId = 7;
   PackagesListDataSource(const DataSourceConfig& ds_config,
                          TracingSessionID session_id,
                          std::unique_ptr<TraceWriter> writer);
diff --git a/src/traced/probes/power/android_power_data_source.cc b/src/traced/probes/power/android_power_data_source.cc
index fc8c079..d44e20b 100644
--- a/src/traced/probes/power/android_power_data_source.cc
+++ b/src/traced/probes/power/android_power_data_source.cc
@@ -88,7 +88,7 @@
     base::TaskRunner* task_runner,
     TracingSessionID session_id,
     std::unique_ptr<TraceWriter> writer)
-    : ProbesDataSource(session_id, kTypeId),
+    : ProbesDataSource(session_id, Type::kAndroidPower),
       task_runner_(task_runner),
       rail_descriptors_logged_(false),
       writer_(std::move(writer)),
diff --git a/src/traced/probes/power/android_power_data_source.h b/src/traced/probes/power/android_power_data_source.h
index 8b627b0..70be823 100644
--- a/src/traced/probes/power/android_power_data_source.h
+++ b/src/traced/probes/power/android_power_data_source.h
@@ -34,8 +34,6 @@
 
 class AndroidPowerDataSource : public ProbesDataSource {
  public:
-  static constexpr int kTypeId = 5;
-
   AndroidPowerDataSource(DataSourceConfig,
                          base::TaskRunner*,
                          TracingSessionID,
diff --git a/src/traced/probes/probes_data_source.cc b/src/traced/probes/probes_data_source.cc
index f051f8d..fbbfbab 100644
--- a/src/traced/probes/probes_data_source.cc
+++ b/src/traced/probes/probes_data_source.cc
@@ -18,8 +18,8 @@
 
 namespace perfetto {
 
-ProbesDataSource::ProbesDataSource(TracingSessionID session_id, int id)
-    : tracing_session_id(session_id), type_id(id) {}
+ProbesDataSource::ProbesDataSource(TracingSessionID session_id, Type t)
+    : tracing_session_id(session_id), type(t) {}
 ProbesDataSource::~ProbesDataSource() = default;
 
 }  // namespace perfetto
diff --git a/src/traced/probes/probes_data_source.h b/src/traced/probes/probes_data_source.h
index ef410c7..d8cb3f1 100644
--- a/src/traced/probes/probes_data_source.h
+++ b/src/traced/probes/probes_data_source.h
@@ -27,8 +27,19 @@
 // Base class for all data sources in traced_probes.
 class ProbesDataSource {
  public:
-  // |type_id| is a home-brewed RTTI, e.g. InodeFileDataSource::kTypeId.
-  ProbesDataSource(TracingSessionID, int type_id);
+  enum class Type {
+    kInvalid = 0,
+    kFtrace,
+    kInodeFile,
+    kProcessStats,
+    kSysStats,
+    kAndroidPower,
+    kAndroidLog,
+    kPackagesList,
+    kMetaTrace
+  };
+
+  ProbesDataSource(TracingSessionID, Type);
   virtual ~ProbesDataSource();
 
   virtual void Start() = 0;
@@ -43,7 +54,7 @@
   }
 
   const TracingSessionID tracing_session_id;
-  const int type_id;
+  const Type type;
   bool started = false;  // Set by probes_producer.cc.
 
  private:
diff --git a/src/traced/probes/probes_producer.cc b/src/traced/probes/probes_producer.cc
index 1d79eae..a811a09 100644
--- a/src/traced/probes/probes_producer.cc
+++ b/src/traced/probes/probes_producer.cc
@@ -344,7 +344,7 @@
 
   // MetatraceDataSource special case: re-flush and ack the stop (to record the
   // flushes of other data sources).
-  if (data_source->type_id == MetatraceDataSource::kTypeId) {
+  if (data_source->type == ProbesDataSource::Type::kMetaTrace) {
     data_source->Flush(FlushRequestID{0}, [] {});
     endpoint_->NotifyDataSourceStopped(id);
   }
@@ -486,14 +486,14 @@
     ProbesDataSource* ds = it->second;
     if (!ds->started)
       continue;
-    switch (ds->type_id) {
-      case FtraceDataSource::kTypeId:
+    switch (ds->type) {
+      case ProbesDataSource::Type::kFtrace:
         metadata = static_cast<FtraceDataSource*>(ds)->mutable_metadata();
         break;
-      case InodeFileDataSource::kTypeId:
+      case ProbesDataSource::Type::kInodeFile:
         inode_data_source = static_cast<InodeFileDataSource*>(ds);
         break;
-      case ProcessStatsDataSource::kTypeId: {
+      case ProbesDataSource::Type::kProcessStats: {
         // A trace session might have declared more than one ps data source.
         // In those cases we often use one for a full dump on startup (
         // targeting a dedicated buffer) and another one for on-demand dumps
@@ -504,12 +504,13 @@
           ps_data_source = ps;
         break;
       }
-      case SysStatsDataSource::kTypeId:
-      case AndroidLogDataSource::kTypeId:
-      case PackagesListDataSource::kTypeId:
-      case MetatraceDataSource::kTypeId:
+      case ProbesDataSource::Type::kSysStats:
+      case ProbesDataSource::Type::kAndroidPower:
+      case ProbesDataSource::Type::kAndroidLog:
+      case ProbesDataSource::Type::kPackagesList:
+      case ProbesDataSource::Type::kMetaTrace:
         break;
-      default:
+      case ProbesDataSource::Type::kInvalid:
         PERFETTO_DFATAL("Invalid data source.");
     }  // switch (type_id)
   }    // for (session_data_sources_)
diff --git a/src/traced/probes/ps/process_stats_data_source.cc b/src/traced/probes/ps/process_stats_data_source.cc
index 511aa23..e432bba 100644
--- a/src/traced/probes/ps/process_stats_data_source.cc
+++ b/src/traced/probes/ps/process_stats_data_source.cc
@@ -83,15 +83,12 @@
 
 }  // namespace
 
-// static
-constexpr int ProcessStatsDataSource::kTypeId;
-
 ProcessStatsDataSource::ProcessStatsDataSource(
     base::TaskRunner* task_runner,
     TracingSessionID session_id,
     std::unique_ptr<TraceWriter> writer,
     const DataSourceConfig& ds_config)
-    : ProbesDataSource(session_id, kTypeId),
+    : ProbesDataSource(session_id, Type::kProcessStats),
       task_runner_(task_runner),
       writer_(std::move(writer)),
       weak_factory_(this) {
diff --git a/src/traced/probes/ps/process_stats_data_source.h b/src/traced/probes/ps/process_stats_data_source.h
index 100ef62..5105dee 100644
--- a/src/traced/probes/ps/process_stats_data_source.h
+++ b/src/traced/probes/ps/process_stats_data_source.h
@@ -48,8 +48,6 @@
 
 class ProcessStatsDataSource : public ProbesDataSource {
  public:
-  static constexpr int kTypeId = 3;
-
   ProcessStatsDataSource(base::TaskRunner*,
                          TracingSessionID,
                          std::unique_ptr<TraceWriter> writer,
diff --git a/src/traced/probes/sys_stats/sys_stats_data_source.cc b/src/traced/probes/sys_stats/sys_stats_data_source.cc
index 132e279..65cb22d 100644
--- a/src/traced/probes/sys_stats/sys_stats_data_source.cc
+++ b/src/traced/probes/sys_stats/sys_stats_data_source.cc
@@ -65,15 +65,12 @@
 
 }  // namespace
 
-// static
-constexpr int SysStatsDataSource::kTypeId;
-
 SysStatsDataSource::SysStatsDataSource(base::TaskRunner* task_runner,
                                        TracingSessionID session_id,
                                        std::unique_ptr<TraceWriter> writer,
                                        const DataSourceConfig& ds_config,
                                        OpenFunction open_fn)
-    : ProbesDataSource(session_id, kTypeId),
+    : ProbesDataSource(session_id, Type::kSysStats),
       task_runner_(task_runner),
       writer_(std::move(writer)),
       weak_factory_(this) {
diff --git a/src/traced/probes/sys_stats/sys_stats_data_source.h b/src/traced/probes/sys_stats/sys_stats_data_source.h
index ad33071..7152276 100644
--- a/src/traced/probes/sys_stats/sys_stats_data_source.h
+++ b/src/traced/probes/sys_stats/sys_stats_data_source.h
@@ -45,7 +45,6 @@
 
 class SysStatsDataSource : public ProbesDataSource {
  public:
-  static constexpr int kTypeId = 4;
   using OpenFunction = base::ScopedFile (*)(const char*);
   SysStatsDataSource(base::TaskRunner*,
                      TracingSessionID,