trace_processor: Remove PERFETTO_TP_FTRACE build flag

Bug: 141459049
Change-Id: Iabfa2b2058511a6661bc4b41f91d2ea1727d8aeb
diff --git a/Android.bp b/Android.bp
index 40d42c4..7cd8b64 100644
--- a/Android.bp
+++ b/Android.bp
@@ -5772,6 +5772,12 @@
 filegroup {
   name: "perfetto_src_trace_processor_storage_full",
   srcs: [
+    "src/trace_processor/importers/ftrace/binder_tracker.cc",
+    "src/trace_processor/importers/ftrace/ftrace_descriptors.cc",
+    "src/trace_processor/importers/ftrace/ftrace_module_impl.cc",
+    "src/trace_processor/importers/ftrace/ftrace_parser.cc",
+    "src/trace_processor/importers/ftrace/ftrace_tokenizer.cc",
+    "src/trace_processor/importers/ftrace/sched_event_tracker.cc",
     "src/trace_processor/importers/proto/android_probes_module.cc",
     "src/trace_processor/importers/proto/android_probes_parser.cc",
     "src/trace_processor/importers/proto/graphics_event_module.cc",
@@ -5782,7 +5788,10 @@
     "src/trace_processor/importers/proto/system_probes_module.cc",
     "src/trace_processor/importers/proto/system_probes_parser.cc",
     "src/trace_processor/importers/proto/vulkan_memory_tracker.cc",
+    "src/trace_processor/importers/systrace/systrace_parser.cc",
+    "src/trace_processor/importers/systrace/systrace_trace_parser.cc",
     "src/trace_processor/register_additional_modules.cc",
+    "src/trace_processor/syscall_tracker.cc",
   ],
 }
 
@@ -5798,13 +5807,7 @@
     "src/trace_processor/ftrace_utils.cc",
     "src/trace_processor/gzip_trace_parser.cc",
     "src/trace_processor/heap_profile_tracker.cc",
-    "src/trace_processor/importers/ftrace/binder_tracker.cc",
-    "src/trace_processor/importers/ftrace/ftrace_descriptors.cc",
     "src/trace_processor/importers/ftrace/ftrace_module.cc",
-    "src/trace_processor/importers/ftrace/ftrace_module_impl.cc",
-    "src/trace_processor/importers/ftrace/ftrace_parser.cc",
-    "src/trace_processor/importers/ftrace/ftrace_tokenizer.cc",
-    "src/trace_processor/importers/ftrace/sched_event_tracker.cc",
     "src/trace_processor/importers/fuchsia/fuchsia_provider_view.cc",
     "src/trace_processor/importers/fuchsia/fuchsia_trace_parser.cc",
     "src/trace_processor/importers/fuchsia/fuchsia_trace_tokenizer.cc",
@@ -5816,12 +5819,9 @@
     "src/trace_processor/importers/proto/track_event_module.cc",
     "src/trace_processor/importers/proto/track_event_parser.cc",
     "src/trace_processor/importers/proto/track_event_tokenizer.cc",
-    "src/trace_processor/importers/systrace/systrace_parser.cc",
-    "src/trace_processor/importers/systrace/systrace_trace_parser.cc",
     "src/trace_processor/process_tracker.cc",
     "src/trace_processor/slice_tracker.cc",
     "src/trace_processor/stack_profile_tracker.cc",
-    "src/trace_processor/syscall_tracker.cc",
     "src/trace_processor/trace_processor_context.cc",
     "src/trace_processor/trace_processor_storage.cc",
     "src/trace_processor/trace_processor_storage_impl.cc",
diff --git a/BUILD b/BUILD
index 70f43b5..140bbaa 100644
--- a/BUILD
+++ b/BUILD
@@ -790,6 +790,18 @@
 filegroup(
     name = "src_trace_processor_storage_full",
     srcs = [
+        "src/trace_processor/importers/ftrace/binder_tracker.cc",
+        "src/trace_processor/importers/ftrace/binder_tracker.h",
+        "src/trace_processor/importers/ftrace/ftrace_descriptors.cc",
+        "src/trace_processor/importers/ftrace/ftrace_descriptors.h",
+        "src/trace_processor/importers/ftrace/ftrace_module_impl.cc",
+        "src/trace_processor/importers/ftrace/ftrace_module_impl.h",
+        "src/trace_processor/importers/ftrace/ftrace_parser.cc",
+        "src/trace_processor/importers/ftrace/ftrace_parser.h",
+        "src/trace_processor/importers/ftrace/ftrace_tokenizer.cc",
+        "src/trace_processor/importers/ftrace/ftrace_tokenizer.h",
+        "src/trace_processor/importers/ftrace/sched_event_tracker.cc",
+        "src/trace_processor/importers/ftrace/sched_event_tracker.h",
         "src/trace_processor/importers/proto/android_probes_module.cc",
         "src/trace_processor/importers/proto/android_probes_module.h",
         "src/trace_processor/importers/proto/android_probes_parser.cc",
@@ -810,8 +822,17 @@
         "src/trace_processor/importers/proto/system_probes_parser.h",
         "src/trace_processor/importers/proto/vulkan_memory_tracker.cc",
         "src/trace_processor/importers/proto/vulkan_memory_tracker.h",
+        "src/trace_processor/importers/systrace/systrace_parser.cc",
+        "src/trace_processor/importers/systrace/systrace_parser.h",
+        "src/trace_processor/importers/systrace/systrace_trace_parser.cc",
+        "src/trace_processor/importers/systrace/systrace_trace_parser.h",
         "src/trace_processor/register_additional_modules.cc",
         "src/trace_processor/register_additional_modules.h",
+        "src/trace_processor/syscall_tracker.cc",
+        "src/trace_processor/syscalls_aarch32.h",
+        "src/trace_processor/syscalls_aarch64.h",
+        "src/trace_processor/syscalls_armeabi.h",
+        "src/trace_processor/syscalls_x86_64.h",
     ],
 )
 
@@ -836,19 +857,8 @@
         "src/trace_processor/gzip_trace_parser.h",
         "src/trace_processor/heap_profile_tracker.cc",
         "src/trace_processor/heap_profile_tracker.h",
-        "src/trace_processor/importers/ftrace/binder_tracker.cc",
-        "src/trace_processor/importers/ftrace/binder_tracker.h",
-        "src/trace_processor/importers/ftrace/ftrace_descriptors.cc",
-        "src/trace_processor/importers/ftrace/ftrace_descriptors.h",
         "src/trace_processor/importers/ftrace/ftrace_module.cc",
         "src/trace_processor/importers/ftrace/ftrace_module.h",
-        "src/trace_processor/importers/ftrace/ftrace_module_impl.cc",
-        "src/trace_processor/importers/ftrace/ftrace_parser.cc",
-        "src/trace_processor/importers/ftrace/ftrace_parser.h",
-        "src/trace_processor/importers/ftrace/ftrace_tokenizer.cc",
-        "src/trace_processor/importers/ftrace/ftrace_tokenizer.h",
-        "src/trace_processor/importers/ftrace/sched_event_tracker.cc",
-        "src/trace_processor/importers/ftrace/sched_event_tracker.h",
         "src/trace_processor/importers/fuchsia/fuchsia_provider_view.cc",
         "src/trace_processor/importers/fuchsia/fuchsia_provider_view.h",
         "src/trace_processor/importers/fuchsia/fuchsia_trace_parser.cc",
@@ -880,10 +890,6 @@
         "src/trace_processor/importers/proto/track_event_parser.h",
         "src/trace_processor/importers/proto/track_event_tokenizer.cc",
         "src/trace_processor/importers/proto/track_event_tokenizer.h",
-        "src/trace_processor/importers/systrace/systrace_parser.cc",
-        "src/trace_processor/importers/systrace/systrace_parser.h",
-        "src/trace_processor/importers/systrace/systrace_trace_parser.cc",
-        "src/trace_processor/importers/systrace/systrace_trace_parser.h",
         "src/trace_processor/metadata.h",
         "src/trace_processor/process_tracker.cc",
         "src/trace_processor/process_tracker.h",
@@ -892,12 +898,7 @@
         "src/trace_processor/stack_profile_tracker.cc",
         "src/trace_processor/stack_profile_tracker.h",
         "src/trace_processor/stats.h",
-        "src/trace_processor/syscall_tracker.cc",
         "src/trace_processor/syscall_tracker.h",
-        "src/trace_processor/syscalls_aarch32.h",
-        "src/trace_processor/syscalls_aarch64.h",
-        "src/trace_processor/syscalls_armeabi.h",
-        "src/trace_processor/syscalls_x86_64.h",
         "src/trace_processor/timestamped_trace_piece.h",
         "src/trace_processor/trace_blob_view.h",
         "src/trace_processor/trace_parser.h",
diff --git a/gn/BUILD.gn b/gn/BUILD.gn
index 4e86d3b..dd520fa 100644
--- a/gn/BUILD.gn
+++ b/gn/BUILD.gn
@@ -82,12 +82,10 @@
     "PERFETTO_TP_PERCENTILE=$enable_perfetto_trace_processor_percentile",
     "PERFETTO_TP_LINENOISE=$enable_perfetto_trace_processor_linenoise",
     "PERFETTO_TP_METRICS=$enable_perfetto_trace_processor_metrics",
-    "PERFETTO_TP_FTRACE=$enable_perfetto_trace_processor_ftrace",
     "PERFETTO_TP_HTTPD=$perfetto_tp_httpd",
     "PERFETTO_TP_JSON=$enable_perfetto_trace_processor_json",
     "PERFETTO_TP_JSON_IMPORT=$enable_perfetto_trace_processor_json_import",
     "PERFETTO_TP_FUCHSIA=$enable_perfetto_trace_processor_fuchsia",
-    "PERFETTO_TP_SYSCALLS=$enable_perfetto_trace_processor_syscalls",
     "PERFETTO_LOCAL_SYMBOLIZER=$perfetto_local_symbolizer",
   ]
 
diff --git a/gn/perfetto.gni b/gn/perfetto.gni
index cc1232f..f90d093 100644
--- a/gn/perfetto.gni
+++ b/gn/perfetto.gni
@@ -213,10 +213,6 @@
       perfetto_build_standalone && enable_perfetto_trace_processor &&
       (is_linux || is_android || is_mac)
 
-  # Enables ftrace support in the trace processor.
-  enable_perfetto_trace_processor_ftrace =
-      enable_perfetto_trace_processor && !(build_with_chromium && is_android)
-
   # Enables JSON support in the trace processor. Required for JSON trace import
   # and export. Importer support can also be disabled using
   # |enable_perfetto_trace_processor_json_import|.
@@ -239,11 +235,6 @@
       enable_perfetto_trace_processor_json &&
       !(build_with_chromium && is_android)
 
-  # Enables syscall support in trace processor. Required for ftrace, system
-  # probes, and android probes support.
-  enable_perfetto_trace_processor_syscalls =
-      enable_perfetto_trace_processor_ftrace
-
   # Enables metrics support in the trace processor, which require SQL support.
   enable_perfetto_trace_processor_metrics =
       enable_perfetto_trace_processor_sqlite
@@ -299,7 +290,3 @@
 assert(!enable_perfetto_tools_trace_to_text ||
        enable_perfetto_trace_processor_sqlite)
 assert(!enable_perfetto_ui || enable_perfetto_trace_processor_sqlite)
-
-# Syscall support is required for ftrace, system probes, and android probes.
-assert(enable_perfetto_trace_processor_syscalls ||
-       !enable_perfetto_trace_processor_ftrace)
diff --git a/include/perfetto/base/build_configs/android_tree/perfetto_build_flags.h b/include/perfetto/base/build_configs/android_tree/perfetto_build_flags.h
index e9cae4f..fc325f0 100644
--- a/include/perfetto/base/build_configs/android_tree/perfetto_build_flags.h
+++ b/include/perfetto/base/build_configs/android_tree/perfetto_build_flags.h
@@ -36,12 +36,10 @@
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_PERCENTILE() (0)
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_LINENOISE() (0)
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_METRICS() (1)
-#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_FTRACE() (1)
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_HTTPD() (0)
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_JSON() (0)
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_JSON_IMPORT() (0)
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_FUCHSIA() (1)
-#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_SYSCALLS() (1)
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_LOCAL_SYMBOLIZER() (PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX())
 
 // clang-format on
diff --git a/include/perfetto/base/build_configs/bazel/perfetto_build_flags.h b/include/perfetto/base/build_configs/bazel/perfetto_build_flags.h
index baa1056..8728e99 100644
--- a/include/perfetto/base/build_configs/bazel/perfetto_build_flags.h
+++ b/include/perfetto/base/build_configs/bazel/perfetto_build_flags.h
@@ -36,12 +36,10 @@
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_PERCENTILE() (1)
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_LINENOISE() (1)
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_METRICS() (1)
-#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_FTRACE() (1)
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_HTTPD() (PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() || PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() || PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX())
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_JSON() (1)
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_JSON_IMPORT() (1)
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_FUCHSIA() (1)
-#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_TP_SYSCALLS() (1)
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_LOCAL_SYMBOLIZER() (PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX())
 
 // clang-format on
diff --git a/src/trace_processor/BUILD.gn b/src/trace_processor/BUILD.gn
index cd48854..f369856 100644
--- a/src/trace_processor/BUILD.gn
+++ b/src/trace_processor/BUILD.gn
@@ -92,12 +92,8 @@
     "gzip_trace_parser.h",
     "heap_profile_tracker.cc",
     "heap_profile_tracker.h",
-    "importers/ftrace/ftrace_descriptors.h",
     "importers/ftrace/ftrace_module.cc",
     "importers/ftrace/ftrace_module.h",
-    "importers/ftrace/ftrace_parser.h",
-    "importers/ftrace/ftrace_tokenizer.h",
-    "importers/ftrace/sched_event_tracker.h",
     "importers/fuchsia/fuchsia_provider_view.h",
     "importers/proto/args_table_utils.cc",
     "importers/proto/args_table_utils.h",
@@ -116,8 +112,6 @@
     "importers/proto/track_event_parser.h",
     "importers/proto/track_event_tokenizer.cc",
     "importers/proto/track_event_tokenizer.h",
-    "importers/systrace/systrace_parser.h",
-    "importers/systrace/systrace_trace_parser.h",
     "metadata.h",
     "process_tracker.cc",
     "process_tracker.h",
@@ -181,25 +175,9 @@
     ]
     deps += [ "../../gn:jsoncpp" ]
   }
-  if (enable_perfetto_trace_processor_ftrace) {
-    sources += [
-      "importers/ftrace/binder_tracker.cc",
-      "importers/ftrace/binder_tracker.h",
-      "importers/ftrace/ftrace_descriptors.cc",
-      "importers/ftrace/ftrace_module_impl.cc",
-      "importers/ftrace/ftrace_parser.cc",
-      "importers/ftrace/ftrace_tokenizer.cc",
-      "importers/ftrace/sched_event_tracker.cc",
-      "importers/systrace/systrace_parser.cc",
-      "importers/systrace/systrace_trace_parser.cc",
-    ]
-  }
-  if (enable_perfetto_trace_processor_ftrace ||
-      enable_perfetto_trace_processor_fuchsia) {
-    sources += [ "ftrace_utils.cc" ]
-  }
   if (enable_perfetto_trace_processor_fuchsia) {
     sources += [
+      "ftrace_utils.cc",
       "importers/fuchsia/fuchsia_provider_view.cc",
       "importers/fuchsia/fuchsia_trace_parser.cc",
       "importers/fuchsia/fuchsia_trace_parser.h",
@@ -209,19 +187,22 @@
       "importers/fuchsia/fuchsia_trace_utils.h",
     ]
   }
-  if (enable_perfetto_trace_processor_syscalls) {
-    sources += [
-      "syscall_tracker.cc",
-      "syscalls_aarch32.h",
-      "syscalls_aarch64.h",
-      "syscalls_armeabi.h",
-      "syscalls_x86_64.h",
-    ]
-  }
 }
 
 source_set("storage_full") {
   sources = [
+    "importers/ftrace/binder_tracker.cc",
+    "importers/ftrace/binder_tracker.h",
+    "importers/ftrace/ftrace_descriptors.cc",
+    "importers/ftrace/ftrace_descriptors.h",
+    "importers/ftrace/ftrace_module_impl.cc",
+    "importers/ftrace/ftrace_module_impl.h",
+    "importers/ftrace/ftrace_parser.cc",
+    "importers/ftrace/ftrace_parser.h",
+    "importers/ftrace/ftrace_tokenizer.cc",
+    "importers/ftrace/ftrace_tokenizer.h",
+    "importers/ftrace/sched_event_tracker.cc",
+    "importers/ftrace/sched_event_tracker.h",
     "importers/proto/android_probes_module.cc",
     "importers/proto/android_probes_module.h",
     "importers/proto/android_probes_parser.cc",
@@ -242,8 +223,17 @@
     "importers/proto/system_probes_parser.h",
     "importers/proto/vulkan_memory_tracker.cc",
     "importers/proto/vulkan_memory_tracker.h",
+    "importers/systrace/systrace_parser.cc",
+    "importers/systrace/systrace_parser.h",
+    "importers/systrace/systrace_trace_parser.cc",
+    "importers/systrace/systrace_trace_parser.h",
     "register_additional_modules.cc",
     "register_additional_modules.h",
+    "syscall_tracker.cc",
+    "syscalls_aarch32.h",
+    "syscalls_aarch64.h",
+    "syscalls_armeabi.h",
+    "syscalls_x86_64.h",
   ]
   public_deps = [
     ":storage_minimal",
@@ -263,16 +253,8 @@
 
   # Include these sources only if they are not already included in
   # storage_minimal.
-  # TODO(khokhlov): Remove this 'if' when modules that use this tracker are
-  # migrated to storage_full.
-  if (!enable_perfetto_trace_processor_syscalls) {
-    sources += [
-      "syscall_tracker.cc",
-      "syscalls_aarch32.h",
-      "syscalls_aarch64.h",
-      "syscalls_armeabi.h",
-      "syscalls_x86_64.h",
-    ]
+  if (!enable_perfetto_trace_processor_fuchsia) {
+    sources += [ "ftrace_utils.cc" ]
   }
 }
 
@@ -316,6 +298,7 @@
       "read_trace.cc",
       "row_iterators.cc",
       "row_iterators.h",
+      "sched_slice_table.cc",
       "sched_slice_table.h",
       "span_join_operator_table.cc",
       "span_join_operator_table.h",
@@ -355,9 +338,6 @@
     public_deps = [
       "../../include/perfetto/trace_processor",
     ]
-    if (enable_perfetto_trace_processor_ftrace) {
-      sources += [ "sched_slice_table.cc" ]
-    }
     if (enable_perfetto_trace_processor_metrics) {
       deps += [
         "../../protos/perfetto/metrics:zero",
@@ -405,6 +385,7 @@
     "clock_tracker_unittest.cc",
     "event_tracker_unittest.cc",
     "forwarding_trace_parser_unittest.cc",
+    "ftrace_utils_unittest.cc",
     "heap_profile_tracker_unittest.cc",
     "importers/proto/args_table_utils_unittest.cc",
     "importers/proto/heap_graph_walker_unittest.cc",
@@ -412,7 +393,10 @@
     "importers/systrace/systrace_parser_unittest.cc",
     "process_tracker_unittest.cc",
     "protozero_to_text_unittests.cc",
+    "sched_slice_table_unittest.cc",
     "slice_tracker_unittest.cc",
+    "syscall_tracker_unittest.cc",
+    "thread_table_unittest.cc",
     "trace_sorter_unittest.cc",
   ]
   deps = [
@@ -474,19 +458,9 @@
       ]
     }
   }
-  if (enable_perfetto_trace_processor_ftrace) {
-    sources += [
-      "ftrace_utils_unittest.cc",
-      "sched_slice_table_unittest.cc",
-      "thread_table_unittest.cc",
-    ]
-  }
   if (enable_perfetto_trace_processor_fuchsia) {
     sources += [ "importers/fuchsia/fuchsia_trace_utils_unittest.cc" ]
   }
-  if (enable_perfetto_trace_processor_syscalls) {
-    sources += [ "syscall_tracker_unittest.cc" ]
-  }
 }
 
 source_set("integrationtests") {
diff --git a/src/trace_processor/event_tracker_unittest.cc b/src/trace_processor/event_tracker_unittest.cc
index 61968ab..4fadf41 100644
--- a/src/trace_processor/event_tracker_unittest.cc
+++ b/src/trace_processor/event_tracker_unittest.cc
@@ -39,9 +39,7 @@
     context.process_tracker.reset(new ProcessTracker(&context));
     context.event_tracker.reset(new EventTracker(&context));
     context.track_tracker.reset(new TrackTracker(&context));
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
     sched_tracker = SchedEventTracker::GetOrCreate(&context);
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
   }
 
  protected:
@@ -49,7 +47,6 @@
   SchedEventTracker* sched_tracker;
 };
 
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 TEST_F(EventTrackerTest, InsertSecondSched) {
   uint32_t cpu = 3;
   int64_t timestamp = 100;
@@ -111,7 +108,6 @@
   ASSERT_EQ(context.storage->slices().utids().at(0),
             context.storage->slices().utids().at(2));
 }
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 
 TEST_F(EventTrackerTest, CounterDuration) {
   uint32_t cpu = 3;
diff --git a/src/trace_processor/forwarding_trace_parser.cc b/src/trace_processor/forwarding_trace_parser.cc
index 81de5d1..b28b89b 100644
--- a/src/trace_processor/forwarding_trace_parser.cc
+++ b/src/trace_processor/forwarding_trace_parser.cc
@@ -21,7 +21,6 @@
 #include "src/trace_processor/gzip_trace_parser.h"
 #include "src/trace_processor/importers/proto/proto_trace_parser.h"
 #include "src/trace_processor/importers/proto/proto_trace_tokenizer.h"
-#include "src/trace_processor/importers/systrace/systrace_trace_parser.h"
 #include "src/trace_processor/trace_sorter.h"
 
 #if PERFETTO_BUILDFLAG(PERFETTO_TP_FUCHSIA)
@@ -108,12 +107,12 @@
       }
       case kSystraceTraceType:
         PERFETTO_DLOG("Systrace trace detected");
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
-        reader_.reset(new SystraceTraceParser(context_));
-        break;
-#else   // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
-        return util::ErrStatus("Systrace support is disabled");
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
+        if (context_->systrace_trace_parser) {
+          reader_ = std::move(context_->systrace_trace_parser);
+          break;
+        } else {
+          return util::ErrStatus("Systrace support is disabled");
+        }
       case kGzipTraceType:
         PERFETTO_DLOG("gzip trace detected");
         reader_.reset(new GzipTraceParser(context_));
diff --git a/src/trace_processor/importers/ftrace/ftrace_module.h b/src/trace_processor/importers/ftrace/ftrace_module.h
index 5f43490..8d2382c 100644
--- a/src/trace_processor/importers/ftrace/ftrace_module.h
+++ b/src/trace_processor/importers/ftrace/ftrace_module.h
@@ -17,14 +17,8 @@
 #ifndef SRC_TRACE_PROCESSOR_IMPORTERS_FTRACE_FTRACE_MODULE_H_
 #define SRC_TRACE_PROCESSOR_IMPORTERS_FTRACE_FTRACE_MODULE_H_
 
-#include "perfetto/base/build_config.h"
-#include "src/trace_processor/importers/ftrace/ftrace_parser.h"
-#include "src/trace_processor/importers/ftrace/ftrace_tokenizer.h"
 #include "src/trace_processor/importers/proto/proto_importer_module.h"
 #include "src/trace_processor/timestamped_trace_piece.h"
-#include "src/trace_processor/trace_blob_view.h"
-
-#include "protos/perfetto/trace/trace_packet.pbzero.h"
 
 namespace perfetto {
 namespace trace_processor {
@@ -35,29 +29,6 @@
                                  const TimestampedTracePiece& ttp);
 };
 
-class FtraceModuleImpl : public FtraceModule {
- public:
-  FtraceModuleImpl(TraceProcessorContext* context);
-
-  ModuleResult TokenizePacket(
-      const protos::pbzero::TracePacket::Decoder& decoder,
-      TraceBlobView* packet,
-      int64_t packet_timestamp,
-      PacketSequenceState* state,
-      uint32_t field_id) override;
-
-  void ParsePacket(const protos::pbzero::TracePacket::Decoder& decoder,
-                   const TimestampedTracePiece&,
-                   uint32_t field_id) override;
-
-  void ParseFtracePacket(uint32_t cpu,
-                         const TimestampedTracePiece& ttp) override;
-
- private:
-  FtraceTokenizer tokenizer_;
-  FtraceParser parser_;
-};
-
 }  // namespace trace_processor
 }  // namespace perfetto
 
diff --git a/src/trace_processor/importers/ftrace/ftrace_module_impl.cc b/src/trace_processor/importers/ftrace/ftrace_module_impl.cc
index 2347196..63f926b 100644
--- a/src/trace_processor/importers/ftrace/ftrace_module_impl.cc
+++ b/src/trace_processor/importers/ftrace/ftrace_module_impl.cc
@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
+#include "src/trace_processor/importers/ftrace/ftrace_module_impl.h"
 #include "perfetto/base/build_config.h"
-#include "src/trace_processor/importers/ftrace/ftrace_module.h"
 #include "src/trace_processor/importers/ftrace/ftrace_parser.h"
 #include "src/trace_processor/importers/ftrace/ftrace_tokenizer.h"
 #include "src/trace_processor/timestamped_trace_piece.h"
diff --git a/src/trace_processor/importers/ftrace/ftrace_module_impl.h b/src/trace_processor/importers/ftrace/ftrace_module_impl.h
new file mode 100644
index 0000000..66f5fe4
--- /dev/null
+++ b/src/trace_processor/importers/ftrace/ftrace_module_impl.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SRC_TRACE_PROCESSOR_IMPORTERS_FTRACE_FTRACE_MODULE_IMPL_H_
+#define SRC_TRACE_PROCESSOR_IMPORTERS_FTRACE_FTRACE_MODULE_IMPL_H_
+
+#include "perfetto/base/build_config.h"
+#include "src/trace_processor/importers/ftrace/ftrace_module.h"
+#include "src/trace_processor/importers/ftrace/ftrace_parser.h"
+#include "src/trace_processor/importers/ftrace/ftrace_tokenizer.h"
+#include "src/trace_processor/importers/proto/proto_importer_module.h"
+#include "src/trace_processor/timestamped_trace_piece.h"
+#include "src/trace_processor/trace_blob_view.h"
+
+#include "protos/perfetto/trace/trace_packet.pbzero.h"
+
+namespace perfetto {
+namespace trace_processor {
+
+class FtraceModuleImpl : public FtraceModule {
+ public:
+  FtraceModuleImpl(TraceProcessorContext* context);
+
+  ModuleResult TokenizePacket(
+      const protos::pbzero::TracePacket::Decoder& decoder,
+      TraceBlobView* packet,
+      int64_t packet_timestamp,
+      PacketSequenceState* state,
+      uint32_t field_id) override;
+
+  void ParsePacket(const protos::pbzero::TracePacket::Decoder& decoder,
+                   const TimestampedTracePiece&,
+                   uint32_t field_id) override;
+
+  void ParseFtracePacket(uint32_t cpu,
+                         const TimestampedTracePiece& ttp) override;
+
+ private:
+  FtraceTokenizer tokenizer_;
+  FtraceParser parser_;
+};
+
+}  // namespace trace_processor
+}  // namespace perfetto
+
+#endif  // SRC_TRACE_PROCESSOR_IMPORTERS_FTRACE_FTRACE_MODULE_IMPL_H_
diff --git a/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc b/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc
index 6939a37..7a3f41b 100644
--- a/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc
+++ b/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc
@@ -92,7 +92,6 @@
 }
 }  // namespace
 
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 class MockSchedEventTracker : public SchedEventTracker {
  public:
   MockSchedEventTracker(TraceProcessorContext* context)
@@ -109,7 +108,6 @@
                     base::StringView next_comm,
                     int32_t next_prio));
 };
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 
 class MockEventTracker : public EventTracker {
  public:
@@ -229,10 +227,8 @@
     context_.args_tracker.reset(new ArgsTracker(&context_));
     event_ = new MockEventTracker(&context_);
     context_.event_tracker.reset(event_);
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
     sched_ = new MockSchedEventTracker(&context_);
     context_.sched_tracker.reset(sched_);
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
     process_ = new MockProcessTracker(&context_);
     context_.process_tracker.reset(process_);
     slice_ = new MockSliceTracker(&context_);
@@ -241,14 +237,6 @@
     context_.clock_tracker.reset(clock_);
     context_.sorter.reset(new TraceSorter(&context_, 0 /*window size*/));
     context_.parser.reset(new ProtoTraceParser(&context_));
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
-    context_.modules.emplace_back(new FtraceModuleImpl(&context_));
-#else
-    context_.modules.emplace_back(new FtraceModule());
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
-    context_.ftrace_module =
-        static_cast<FtraceModule*>(context_.modules.back().get());
-
     context_.modules.emplace_back(new TrackEventModule(&context_));
 
     RegisterAdditionalModules(&context_);
@@ -301,9 +289,7 @@
   protos::pbzero::Trace trace_;
   TraceProcessorContext context_;
   MockEventTracker* event_;
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
   MockSchedEventTracker* sched_;
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
   MockProcessTracker* process_;
   MockSliceTracker* slice_;
   ClockTracker* clock_;
@@ -311,7 +297,6 @@
 };
 
 // TODO(eseckler): Refactor these into a new file for ftrace tests.
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 
 TEST_F(ProtoTraceParserTest, LoadSingleEvent) {
   auto* bundle = trace_.add_packet()->set_ftrace_events();
@@ -587,8 +572,6 @@
   EXPECT_EQ(context_.storage->cpu_counter_track_table().cpu()[0], 10u);
 }
 
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
-
 TEST_F(ProtoTraceParserTest, LoadMemInfo) {
   auto* packet = trace_.add_packet();
   uint64_t ts = 1000;
diff --git a/src/trace_processor/process_tracker_unittest.cc b/src/trace_processor/process_tracker_unittest.cc
index 1122a99..802ba42 100644
--- a/src/trace_processor/process_tracker_unittest.cc
+++ b/src/trace_processor/process_tracker_unittest.cc
@@ -86,7 +86,6 @@
             "test");
 }
 
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 TEST_F(ProcessTrackerTest, UpdateThreadMatch) {
   uint32_t cpu = 3;
   int64_t timestamp = 100;
@@ -114,7 +113,6 @@
   ASSERT_EQ(process.pid, 2u);
   ASSERT_EQ(process.start_ns, 0);
 }
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 
 TEST_F(ProcessTrackerTest, UpdateThreadCreate) {
   context.process_tracker->UpdateThread(12, 2);
diff --git a/src/trace_processor/raw_table.cc b/src/trace_processor/raw_table.cc
index 2b049f8..f7f31e1 100644
--- a/src/trace_processor/raw_table.cc
+++ b/src/trace_processor/raw_table.cc
@@ -52,7 +52,6 @@
 
 RawTable::RawTable(sqlite3* db, const TraceStorage* storage)
     : storage_(storage) {
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
   auto fn = [](sqlite3_context* ctx, int argc, sqlite3_value** argv) {
     auto* thiz = static_cast<RawTable*>(sqlite3_user_data(ctx));
     thiz->ToSystrace(ctx, argc, argv);
@@ -60,9 +59,6 @@
   sqlite3_create_function(db, "to_ftrace", 1,
                           SQLITE_UTF8 | SQLITE_DETERMINISTIC, this, fn, nullptr,
                           nullptr);
-#else   // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
-  base::ignore_result(db);
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 }
 
 void RawTable::RegisterTable(sqlite3* db, const TraceStorage* storage) {
@@ -99,7 +95,6 @@
   return SQLITE_OK;
 }
 
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 bool RawTable::ParseGfpFlags(Variadic value, base::StringWriter* writer) {
   if (!storage_->metadata().MetadataExists(metadata::KeyIDs::system_name) ||
       !storage_->metadata().MetadataExists(metadata::KeyIDs::system_release)) {
@@ -415,7 +410,6 @@
   FormatSystraceArgs(event_name, raw_evts.arg_set_ids()[row], &writer);
   sqlite3_result_text(ctx, writer.CreateStringCopy(), -1, free);
 }
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 
 }  // namespace trace_processor
 }  // namespace perfetto
diff --git a/src/trace_processor/raw_table.h b/src/trace_processor/raw_table.h
index 480188c..e4506b4 100644
--- a/src/trace_processor/raw_table.h
+++ b/src/trace_processor/raw_table.h
@@ -36,13 +36,11 @@
   int BestIndex(const QueryConstraints&, BestIndexInfo*) override;
 
  private:
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
   void FormatSystraceArgs(NullTermStringView event_name,
                           ArgSetId arg_set_id,
                           base::StringWriter* writer);
   void ToSystrace(sqlite3_context* ctx, int argc, sqlite3_value** argv);
   bool ParseGfpFlags(Variadic value, base::StringWriter* writer);
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 
   const TraceStorage* const storage_;
 };
diff --git a/src/trace_processor/register_additional_modules.cc b/src/trace_processor/register_additional_modules.cc
index bc9d6ef..ad14f74 100644
--- a/src/trace_processor/register_additional_modules.cc
+++ b/src/trace_processor/register_additional_modules.cc
@@ -15,10 +15,12 @@
  */
 
 #include "src/trace_processor/register_additional_modules.h"
+#include "src/trace_processor/importers/ftrace/ftrace_module_impl.h"
 #include "src/trace_processor/importers/proto/android_probes_module.h"
 #include "src/trace_processor/importers/proto/graphics_event_module.h"
 #include "src/trace_processor/importers/proto/heap_graph_module.h"
 #include "src/trace_processor/importers/proto/system_probes_module.h"
+#include "src/trace_processor/importers/systrace/systrace_trace_parser.h"
 
 namespace perfetto {
 namespace trace_processor {
@@ -28,6 +30,13 @@
   context->modules.emplace_back(new GraphicsEventModule(context));
   context->modules.emplace_back(new HeapGraphModule(context));
   context->modules.emplace_back(new SystemProbesModule(context));
+  context->modules.emplace_back(new FtraceModuleImpl(context));
+  // Ftrace module is special, because it has one extra method for parsing
+  // ftrace packets. So we need to store a pointer to it separately.
+  context->ftrace_module =
+      static_cast<FtraceModule*>(context->modules.back().get());
+
+  context->systrace_trace_parser.reset(new SystraceTraceParser(context));
 }
 
 }  // namespace trace_processor
diff --git a/src/trace_processor/storage_minimal_smoke_test.cc b/src/trace_processor/storage_minimal_smoke_test.cc
index 1aa037d..dcf8aba 100644
--- a/src/trace_processor/storage_minimal_smoke_test.cc
+++ b/src/trace_processor/storage_minimal_smoke_test.cc
@@ -53,11 +53,12 @@
   auto f = fopen(base::GetTestDataPath("test/data/gpu_trace.pb").c_str(), "rb");
   std::unique_ptr<uint8_t[]> buf(new uint8_t[MAX_SIZE]);
   auto rsize = fread(reinterpret_cast<char*>(buf.get()), 1, MAX_SIZE, f);
-  storage_->Parse(std::move(buf), rsize);
+  util::Status status = storage_->Parse(std::move(buf), rsize);
+  ASSERT_TRUE(status.ok());
   storage_->NotifyEndOfFile();
 
   JsonStringOutputWriter output_writer;
-  auto status = json::ExportJson(storage_.get(), &output_writer);
+  json::ExportJson(storage_.get(), &output_writer);
   Json::Reader reader;
   Json::Value result;
   reader.parse(output_writer.buffer, result);
@@ -65,16 +66,28 @@
   ASSERT_EQ(result["traceEvents"].size(), 0u);
 }
 
+TEST_F(StorageMinimalSmokeTest, SystraceReturnsError) {
+  const size_t MAX_SIZE = 1 << 20;
+  auto f =
+      fopen(base::GetTestDataPath("test/data/systrace.html").c_str(), "rb");
+  std::unique_ptr<uint8_t[]> buf(new uint8_t[MAX_SIZE]);
+  auto rsize = fread(reinterpret_cast<char*>(buf.get()), 1, MAX_SIZE, f);
+  util::Status status = storage_->Parse(std::move(buf), rsize);
+
+  ASSERT_FALSE(status.ok());
+}
+
 TEST_F(StorageMinimalSmokeTest, TrackEventsImported) {
   const size_t MAX_SIZE = 1 << 20;
   auto f = fopen("test/trace_processor/track_event_typed_args.pb", "rb");
   std::unique_ptr<uint8_t[]> buf(new uint8_t[MAX_SIZE]);
   auto rsize = fread(reinterpret_cast<char*>(buf.get()), 1, MAX_SIZE, f);
-  storage_->Parse(std::move(buf), rsize);
+  util::Status status = storage_->Parse(std::move(buf), rsize);
+  ASSERT_TRUE(status.ok());
   storage_->NotifyEndOfFile();
 
   JsonStringOutputWriter output_writer;
-  auto status = json::ExportJson(storage_.get(), &output_writer);
+  json::ExportJson(storage_.get(), &output_writer);
   Json::Reader reader;
   Json::Value result;
   reader.parse(output_writer.buffer, result);
diff --git a/src/trace_processor/trace_database_integrationtest.cc b/src/trace_processor/trace_database_integrationtest.cc
index 5fc550f..a6ef050 100644
--- a/src/trace_processor/trace_database_integrationtest.cc
+++ b/src/trace_processor/trace_database_integrationtest.cc
@@ -66,7 +66,6 @@
   std::unique_ptr<TraceProcessor> processor_;
 };
 
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 TEST_F(TraceProcessorIntegrationTest, AndroidSchedAndPs) {
   ASSERT_TRUE(LoadTrace("android_sched_and_ps.pb").ok());
   auto it = Query(
@@ -79,9 +78,7 @@
   ASSERT_EQ(it.Get(1).long_value, 19684308497);
   ASSERT_FALSE(it.Next());
 }
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 TEST_F(TraceProcessorIntegrationTest, TraceBounds) {
   ASSERT_TRUE(LoadTrace("android_sched_and_ps.pb").ok());
   auto it = Query("select start_ts, end_ts from trace_bounds");
@@ -92,7 +89,6 @@
   ASSERT_EQ(it.Get(1).long_value, 81492700784311);
   ASSERT_FALSE(it.Next());
 }
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
 
 TEST_F(TraceProcessorIntegrationTest, Hash) {
   auto it = Query("select HASH()");
diff --git a/src/trace_processor/trace_processor_context.h b/src/trace_processor/trace_processor_context.h
index 6d5b75c..2fd3c15 100644
--- a/src/trace_processor/trace_processor_context.h
+++ b/src/trace_processor/trace_processor_context.h
@@ -21,6 +21,7 @@
 #include <vector>
 
 #include "perfetto/trace_processor/basic_types.h"
+#include "src/trace_processor/chunked_trace_reader.h"
 #include "src/trace_processor/destructible.h"
 #include "src/trace_processor/importers/proto/proto_importer_module.h"
 
@@ -69,11 +70,17 @@
   std::unique_ptr<Destructible> sched_tracker;    // SchedEventTracker
   std::unique_ptr<Destructible> systrace_parser;  // SystraceParser
 
+  // This will be nullptr in the minimal build (storage_minimal target), and
+  // a pointer to the instance of SystraceTraceParser class in the full build
+  // (storage_full target). The corresponding initialization happens in
+  // register_additional_modules.cc.
+  std::unique_ptr<ChunkedTraceReader> systrace_trace_parser;
+
   // The module at the index N is registered to handle field id N in
   // TracePacket.
   std::vector<ProtoImporterModule*> modules_by_field;
   std::vector<std::unique_ptr<ProtoImporterModule>> modules;
-  FtraceModule* ftrace_module;
+  FtraceModule* ftrace_module = nullptr;
 };
 
 }  // namespace trace_processor
diff --git a/src/trace_processor/trace_processor_impl.cc b/src/trace_processor/trace_processor_impl.cc
index b220ac2..f538e73 100644
--- a/src/trace_processor/trace_processor_impl.cc
+++ b/src/trace_processor/trace_processor_impl.cc
@@ -25,6 +25,7 @@
 #include "perfetto/ext/base/string_utils.h"
 #include "src/trace_processor/android_logs_table.h"
 #include "src/trace_processor/args_table.h"
+#include "src/trace_processor/importers/ftrace/sched_event_tracker.h"
 #include "src/trace_processor/instants_table.h"
 #include "src/trace_processor/metadata_table.h"
 #include "src/trace_processor/process_table.h"
@@ -369,9 +370,7 @@
 
   ArgsTable::RegisterTable(*db_, context_.storage.get());
   ProcessTable::RegisterTable(*db_, context_.storage.get());
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
   SchedSliceTable::RegisterTable(*db_, context_.storage.get());
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
   SqlStatsTable::RegisterTable(*db_, context_.storage.get());
   ThreadTable::RegisterTable(*db_, context_.storage.get());
   SpanJoinOperatorTable::RegisterTable(*db_, context_.storage.get());
@@ -473,6 +472,7 @@
 
   TraceProcessorStorageImpl::NotifyEndOfFile();
 
+  SchedEventTracker::GetOrCreate(&context_)->FlushPendingEvents();
   BuildBoundsTable(*db_, context_.storage->GetTraceTimestampBoundsNs());
 
   // Create a snapshot of all tables and views created so far. This is so later
diff --git a/src/trace_processor/trace_processor_storage_impl.cc b/src/trace_processor/trace_processor_storage_impl.cc
index 46aefbf..9e0726d 100644
--- a/src/trace_processor/trace_processor_storage_impl.cc
+++ b/src/trace_processor/trace_processor_storage_impl.cc
@@ -26,7 +26,6 @@
 #include "src/trace_processor/importers/proto/proto_importer_module.h"
 #include "src/trace_processor/importers/proto/proto_trace_tokenizer.h"
 #include "src/trace_processor/importers/proto/track_event_module.h"
-#include "src/trace_processor/importers/systrace/systrace_trace_parser.h"
 #include "src/trace_processor/process_tracker.h"
 #include "src/trace_processor/slice_tracker.h"
 #include "src/trace_processor/stack_profile_tracker.h"
@@ -48,11 +47,7 @@
   context_.clock_tracker.reset(new ClockTracker(&context_));
   context_.heap_profile_tracker.reset(new HeapProfileTracker(&context_));
 
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
-  context_.modules.emplace_back(new FtraceModuleImpl(&context_));
-#else
   context_.modules.emplace_back(new FtraceModule());
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
   // Ftrace module is special, because it has one extra method for parsing
   // ftrace packets. So we need to store a pointer to it separately.
   context_.ftrace_module =
@@ -86,9 +81,6 @@
 
   if (context_.sorter)
     context_.sorter->ExtractEventsForced();
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
-  SchedEventTracker::GetOrCreate(&context_)->FlushPendingEvents();
-#endif  // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
   context_.event_tracker->FlushPendingEvents();
   context_.slice_tracker->FlushPendingSlices();
 }