# Copyright (C) 2021 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.gni")

source_set("common") {
  sources = [
    "args_tracker.cc",
    "args_tracker.h",
    "args_translation_table.cc",
    "args_translation_table.h",
    "async_track_set_tracker.cc",
    "async_track_set_tracker.h",
    "chunked_trace_reader.h",
    "clock_tracker.cc",
    "clock_tracker.h",
    "deobfuscation_mapping_table.cc",
    "deobfuscation_mapping_table.h",
    "event_tracker.cc",
    "event_tracker.h",
    "flow_tracker.cc",
    "flow_tracker.h",
    "global_args_tracker.cc",
    "global_args_tracker.h",
    "process_tracker.cc",
    "process_tracker.h",
    "slice_tracker.cc",
    "slice_tracker.h",
    "slice_translation_table.cc",
    "slice_translation_table.h",
    "system_info_tracker.cc",
    "system_info_tracker.h",
    "trace_parser.cc",
    "track_tracker.cc",
    "track_tracker.h",
  ]
  public_deps = [
    ":trace_parser_hdr",
    "../../util:proto_to_args_parser",
    "../../util:protozero_to_text",
  ]
  deps = [
    ":parser_types",
    "../../../../gn:default_deps",
    "../../../../include/perfetto/trace_processor",
    "../../../../include/perfetto/trace_processor:basic_types",
    "../../../../protos/perfetto/common:zero",
    "../../../../protos/perfetto/trace:zero",
    "../../../../protos/perfetto/trace/profiling:zero",
    "../../../base",
    "../../storage",
    "../../types",
    "../fuchsia:fuchsia_record",
    "../systrace:systrace_line",
  ]
}

source_set("trace_parser_hdr") {
  sources = [ "trace_parser.h" ]
  deps = [ "../../../../gn:default_deps" ]
}

source_set("parser_types") {
  sources = [ "parser_types.h" ]
  deps = [
    "../../../../gn:default_deps",
    "../../../../include/perfetto/trace_processor:storage",
    "../../containers",
    "../proto:packet_sequence_state_generation_hdr",
  ]
}

source_set("unittests") {
  sources = [
    "args_translation_table_unittest.cc",
    "async_track_set_tracker_unittest.cc",
    "clock_tracker_unittest.cc",
    "deobfuscation_mapping_table_unittest.cc",
    "event_tracker_unittest.cc",
    "flow_tracker_unittest.cc",
    "process_tracker_unittest.cc",
    "slice_tracker_unittest.cc",
    "slice_translation_table_unittest.cc",
  ]
  testonly = true
  deps = [
    ":common",
    "../../../../gn:default_deps",
    "../../../../gn:gtest_and_gmock",
    "../../../../protos/perfetto/common:zero",
    "../../../../protos/perfetto/trace:zero",
    "../../../base",
    "../../storage",
    "../../types",
  ]
}
