# Copyright (C) 2022 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.

import("../../../../gn/perfetto_cc_proto_descriptor.gni")

source_set("minimal") {
  sources = [
    "active_chrome_processes_tracker.cc",
    "active_chrome_processes_tracker.h",
    "app_wakelock_module.cc",
    "app_wakelock_module.h",
    "args_parser.cc",
    "args_parser.h",
    "chrome_string_lookup.cc",
    "chrome_string_lookup.h",
    "chrome_system_probes_module.cc",
    "chrome_system_probes_module.h",
    "chrome_system_probes_parser.cc",
    "chrome_system_probes_parser.h",
    "default_modules.cc",
    "default_modules.h",
    "memory_tracker_snapshot_module.cc",
    "memory_tracker_snapshot_module.h",
    "memory_tracker_snapshot_parser.cc",
    "memory_tracker_snapshot_parser.h",
    "metadata_minimal_module.cc",
    "metadata_minimal_module.h",
    "network_trace_module.cc",
    "network_trace_module.h",
    "packet_analyzer.cc",
    "packet_analyzer.h",
    "packet_sequence_state_builder.h",
    "packet_sequence_state_generation.cc",
    "perf_sample_tracker.cc",
    "perf_sample_tracker.h",
    "profile_packet_sequence_state.cc",
    "profile_packet_sequence_state.h",
    "profile_packet_utils.cc",
    "profile_packet_utils.h",
    "proto_trace_parser_impl.cc",
    "proto_trace_parser_impl.h",
    "proto_trace_reader.cc",
    "proto_trace_reader.h",
    "proto_trace_tokenizer.cc",
    "proto_trace_tokenizer.h",
    "stack_profile_sequence_state.cc",
    "stack_profile_sequence_state.h",
    "track_event_event_importer.h",
    "track_event_module.cc",
    "track_event_module.h",
    "track_event_parser.cc",
    "track_event_parser.h",
    "track_event_sequence_state.cc",
    "track_event_tokenizer.cc",
    "track_event_tokenizer.h",
    "track_event_tracker.cc",
    "track_event_tracker.h",
  ]
  public_deps = [ ":proto_importer_module" ]
  deps = [
    ":gen_cc_android_track_event_descriptor",
    ":gen_cc_chrome_track_event_descriptor",
    ":gen_cc_track_event_descriptor",
    "../../../../gn:default_deps",
    "../../../../include/perfetto/trace_processor:trace_processor",
    "../../../../protos/perfetto/common:zero",
    "../../../../protos/perfetto/config:zero",
    "../../../../protos/perfetto/trace:zero",
    "../../../../protos/perfetto/trace/android:zero",
    "../../../../protos/perfetto/trace/chrome:zero",
    "../../../../protos/perfetto/trace/etw:zero",
    "../../../../protos/perfetto/trace/ftrace:zero",
    "../../../../protos/perfetto/trace/interned_data:zero",
    "../../../../protos/perfetto/trace/perfetto:zero",
    "../../../../protos/perfetto/trace/power:zero",
    "../../../../protos/perfetto/trace/profiling:zero",
    "../../../../protos/perfetto/trace/ps:zero",
    "../../../../protos/perfetto/trace/sys_stats:zero",
    "../../../../protos/perfetto/trace/system_info:zero",
    "../../../../protos/perfetto/trace/track_event:zero",
    "../../../../protos/perfetto/trace/translation:zero",
    "../../../../protos/third_party/chromium:zero",
    "../../../base",
    "../../../protozero",
    "../../containers",
    "../../sorter",
    "../../storage",
    "../../tables",
    "../../types",
    "../../util:build_id",
    "../../util:gzip",
    "../../util:json_parser",
    "../../util:profiler_util",
    "../../util:trace_blob_view_reader",
    "../common",
    "../common:parser_types",
    "../etw:minimal",
    "../ftrace:minimal",
    "../memory_tracker:graph_processor",
  ]
}

source_set("full") {
  sources = [
    "additional_modules.cc",
    "additional_modules.h",
    "android_camera_event_module.cc",
    "android_camera_event_module.h",
    "android_cpu_per_uid_module.cc",
    "android_cpu_per_uid_module.h",
    "android_cpu_per_uid_state.cc",
    "android_cpu_per_uid_state.h",
    "android_kernel_wakelocks_module.cc",
    "android_kernel_wakelocks_module.h",
    "android_kernel_wakelocks_state.cc",
    "android_kernel_wakelocks_state.h",
    "android_probes_module.cc",
    "android_probes_module.h",
    "android_probes_parser.cc",
    "android_probes_parser.h",
    "android_probes_tracker.cc",
    "android_probes_tracker.h",
    "content_analyzer.cc",
    "content_analyzer.h",
    "deobfuscation_module.cc",
    "deobfuscation_module.h",
    "frame_timeline_event_parser.cc",
    "frame_timeline_event_parser.h",
    "gpu_event_parser.cc",
    "gpu_event_parser.h",
    "graphics_event_module.cc",
    "graphics_event_module.h",
    "graphics_frame_event_parser.cc",
    "graphics_frame_event_parser.h",
    "heap_graph_module.cc",
    "heap_graph_module.h",
    "heap_graph_tracker.cc",
    "heap_graph_tracker.h",
    "jit_tracker.cc",
    "jit_tracker.h",
    "metadata_module.cc",
    "metadata_module.h",
    "pigweed_detokenizer.cc",
    "pigweed_detokenizer.h",
    "pixel_modem_module.cc",
    "pixel_modem_module.h",
    "pixel_modem_parser.cc",
    "pixel_modem_parser.h",
    "profile_module.cc",
    "profile_module.h",
    "statsd_module.cc",
    "statsd_module.h",
    "string_encoding_utils.cc",
    "string_encoding_utils.h",
    "system_probes_module.cc",
    "system_probes_module.h",
    "system_probes_parser.cc",
    "system_probes_parser.h",
    "translation_table_module.cc",
    "translation_table_module.h",
    "v8_module.cc",
    "v8_module.h",
    "v8_sequence_state.cc",
    "v8_sequence_state.h",
    "v8_tracker.cc",
    "v8_tracker.h",
    "vulkan_memory_tracker.cc",
    "vulkan_memory_tracker.h",
  ]
  deps = [
    ":gen_cc_statsd_atoms_descriptor",
    ":gen_cc_trace_descriptor",
    ":minimal",
    ":packet_sequence_state_generation_hdr",
    "../../../../gn:default_deps",
    "../../../../include/perfetto/ext/traced:sys_stats_counters",
    "../../../../protos/perfetto/common:zero",
    "../../../../protos/perfetto/config:zero",
    "../../../../protos/perfetto/trace:zero",
    "../../../../protos/perfetto/trace/android:zero",
    "../../../../protos/perfetto/trace/chrome:zero",
    "../../../../protos/perfetto/trace/gpu:zero",
    "../../../../protos/perfetto/trace/interned_data:zero",
    "../../../../protos/perfetto/trace/power:zero",
    "../../../../protos/perfetto/trace/profiling:zero",
    "../../../../protos/perfetto/trace/ps:zero",
    "../../../../protos/perfetto/trace/statsd:zero",
    "../../../../protos/perfetto/trace/sys_stats:zero",
    "../../../../protos/perfetto/trace/system_info:zero",
    "../../../../protos/perfetto/trace/translation:zero",
    "../../../base",
    "../../../kernel_utils:kernel_wakelock_errors",
    "../../../kernel_utils:syscall_table",
    "../../../protozero",
    "../../containers",
    "../../dataframe",
    "../../sorter",
    "../../storage",
    "../../tables",
    "../../types",
    "../../util:build_id",
    "../../util:descriptors",
    "../../util:profiler_util",
    "../../util:proto_profiler",
    "../../util:proto_to_args_parser",
    "../common",
    "../common:parser_types",
    "../etw:full",
    "../etw:minimal",
    "../ftrace:full",
    "../ftrace:minimal",
    "../generic_kernel:full",
    "../syscalls:full",
  ]

  if (enable_perfetto_winscope) {
    deps += [ "winscope:full" ]
  }
}

source_set("proto_importer_module") {
  sources = [
    "proto_importer_module.cc",
    "proto_importer_module.h",
  ]
  public_deps = [ ":packet_sequence_state_generation_hdr" ]
  deps = [
    ":packet_sequence_state_generation_hdr",
    "../../../../gn:default_deps",
    "../../../../include/perfetto/trace_processor:trace_processor",
    "../../../base",
    "../../sorter",
    "../../types",
    "../common:parser_types",
  ]
}

source_set("packet_sequence_state_generation_hdr") {
  sources = [
    "packet_sequence_state_generation.h",
    "track_event_sequence_state.h",
  ]
  deps = [
    "../../../../gn:default_deps",
    "../../../../include/perfetto/ext/base",
    "../../../../protos/perfetto/trace:non_minimal_zero",
    "../../../../protos/perfetto/trace/track_event:zero",
    "../../types:types",
    "../../util:interned_message_view",
    "../common:synthetic_tid_hdr",
  ]
}

perfetto_cc_proto_descriptor("gen_cc_statsd_atoms_descriptor") {
  descriptor_name = "atoms.descriptor"
  descriptor_path = "atoms.descriptor"
}

perfetto_cc_proto_descriptor("gen_cc_trace_descriptor") {
  descriptor_name = "trace.descriptor"
  descriptor_target = "../../../../protos/perfetto/trace:descriptor"
}

perfetto_cc_proto_descriptor("gen_cc_track_event_descriptor") {
  descriptor_name = "track_event.descriptor"
  descriptor_target = "../../../../protos/perfetto/trace/track_event:descriptor"
}

perfetto_cc_proto_descriptor("gen_cc_chrome_track_event_descriptor") {
  descriptor_name = "chrome_track_event.descriptor"
  descriptor_target = "../../../../protos/third_party/chromium:descriptor"
}

perfetto_cc_proto_descriptor("gen_cc_android_track_event_descriptor") {
  descriptor_name = "android_track_event.descriptor"
  descriptor_target =
      "../../../../protos/perfetto/trace/android:android_track_event_descriptor"
}

source_set("unittests") {
  testonly = true
  sources = [
    "active_chrome_processes_tracker_unittest.cc",
    "chrome_string_lookup_unittest.cc",
    "heap_graph_tracker_unittest.cc",
    "jit_tracker_unittest.cc",
    "network_trace_module_unittest.cc",
    "perf_sample_tracker_unittest.cc",
    "profile_packet_sequence_state_unittest.cc",
    "proto_trace_parser_impl_unittest.cc",
    "proto_trace_reader_unittest.cc",
    "proto_trace_tokenizer_unittest.cc",
    "string_encoding_utils_unittests.cc",
  ]
  deps = [
    ":full",
    ":gen_cc_trace_descriptor",
    ":minimal",
    ":packet_sequence_state_generation_hdr",
    "../../../../gn:default_deps",
    "../../../../gn:gtest_and_gmock",
    "../../../../protos/perfetto/common:cpp",
    "../../../../protos/perfetto/common:zero",
    "../../../../protos/perfetto/config:zero",
    "../../../../protos/perfetto/trace:non_minimal_cpp",
    "../../../../protos/perfetto/trace:zero",
    "../../../../protos/perfetto/trace/android:zero",
    "../../../../protos/perfetto/trace/chrome:zero",
    "../../../../protos/perfetto/trace/ftrace:zero",
    "../../../../protos/perfetto/trace/interned_data:zero",
    "../../../../protos/perfetto/trace/profiling:cpp",
    "../../../../protos/perfetto/trace/profiling:zero",
    "../../../../protos/perfetto/trace/ps:zero",
    "../../../../protos/perfetto/trace/sys_stats:zero",
    "../../../../protos/perfetto/trace/track_event:zero",
    "../../../../protos/third_party/chromium:zero",
    "../../../base:test_support",
    "../../../protozero",
    "../../containers",
    "../../dataframe",
    "../../sorter",
    "../../storage",
    "../../tables",
    "../../types",
    "../../util:build_id",
    "../../util:descriptors",
    "../../util:profiler_util",
    "../common",
    "../ftrace:full",
  ]
  if (enable_perfetto_winscope) {
    deps += [ "winscope:unittests" ]
  }
}
