# Copyright (C) 2020 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")
import("../../../gn/test.gni")

source_set("unwind_support") {
  public_deps = [ "../../../gn:libunwindstack" ]
  deps = [
    "../../../gn:default_deps",
    "../../../src/base",
  ]
  sources = [
    "unwind_support.cc",
    "unwind_support.h",
  ]
}

source_set("callstack_trie") {
  public_deps = [ ":unwind_support" ]
  deps = [
    ":interner",
    "../../../gn:default_deps",
    "../../../src/base",
  ]
  sources = [
    "callstack_trie.cc",
    "callstack_trie.h",
  ]
}

source_set("interner") {
  deps = [
    "../../../gn:default_deps",
    "../../../src/base",
  ]
  sources = [ "interner.h" ]
}

source_set("interning_output") {
  deps = [
    ":callstack_trie",
    ":interner",
    "../../../gn:default_deps",
    "../../../include/perfetto/ext/tracing/core",
    "../../../protos/perfetto/trace:zero",
    "../../../protos/perfetto/trace/interned_data:zero",
    "../../../protos/perfetto/trace/profiling:zero",
  ]
  sources = [
    "interning_output.cc",
    "interning_output.h",
  ]
}

source_set("proc_utils") {
  deps = [
    ":proc_cmdline",
    "../../../gn:default_deps",
    "../../base",
  ]
  sources = [
    "proc_utils.cc",
    "proc_utils.h",
  ]
}

source_set("proc_cmdline") {
  deps = [
    "../../../gn:default_deps",
    "../../base",
  ]
  sources = [
    "proc_cmdline.cc",
    "proc_cmdline.h",
  ]
}

source_set("producer_support") {
  deps = [
    "../../../gn:default_deps",
    "../../base",
    "../../traced/probes/packages_list:packages_list_parser",
    "../../tracing/core",
  ]
  sources = [
    "producer_support.cc",
    "producer_support.h",
  ]
}

source_set("profiler_guardrails") {
  deps = [
    ":proc_utils",
    "../../../gn:default_deps",
    "../../../include/perfetto/ext/tracing/core",
    "../../base",
  ]
  sources = [
    "profiler_guardrails.cc",
    "profiler_guardrails.h",
  ]
}

perfetto_unittest_source_set("unittests") {
  testonly = true
  deps = [
    ":interner",
    ":proc_cmdline",
    ":proc_utils",
    ":producer_support",
    ":profiler_guardrails",
    "../../../gn:default_deps",
    "../../../gn:gtest_and_gmock",
    "../../base",
    "../../base:test_support",
    "../../tracing/core",
  ]
  sources = [
    "interner_unittest.cc",
    "proc_cmdline_unittest.cc",
    "proc_utils_unittest.cc",
    "producer_support_unittest.cc",
    "profiler_guardrails_unittest.cc",
  ]
}
