# Copyright (C) 2017 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")

assert(enable_perfetto_traced_probes)

# The unprivileged daemon that is allowed to access tracefs (for ftrace).
# Registers as a Producer on the traced daemon.
executable("traced_probes") {
  deps = [
    "../../../:libperfetto",
    "../../../gn:default_deps",
    "../../../include/perfetto/ext/traced",
  ]
  sources = [ "main.cc" ]
  assert_no_deps = [ "//gn:protobuf_lite" ]
}

# Contains all the implementation but not the main() entry point. This target
# is shared both by the executable and tests.
source_set("probes") {
  public_deps = [ "../../../include/perfetto/ext/traced" ]
  deps = [
    ":probes_src",
    "../../../gn:default_deps",
    "../../tracing/ipc/producer",
  ]
  sources = [ "probes.cc" ]
}

source_set("probes_src") {
  public_deps = [
    "ftrace",
    "ftrace:ftrace_procfs",
  ]
  deps = [
    ":data_source",
    "../../../gn:default_deps",
    "../../../include/perfetto/ext/traced",
    "../../../protos/perfetto/config/ftrace:cpp",
    "../../../protos/perfetto/trace:zero",
    "../../../protos/perfetto/trace/ps:zero",
    "../../android_stats",
    "../../base",
    "../../tracing/core",
    "../../tracing/ipc/producer",
    "android_log",
    "common",
    "filesystem",
    "initial_display_state",
    "metatrace",
    "packages_list",
    "power",
    "ps",
    "sys_stats",
    "system_info",
  ]
  sources = [
    "kmem_activity_trigger.cc",
    "kmem_activity_trigger.h",
    "probes_producer.cc",
    "probes_producer.h",
  ]
}

# Base class for data sources in traced_probes.
# Needs to be a separate target to avoid cyclical deps.
source_set("data_source") {
  deps = [
    "../../../gn:default_deps",
    "../../tracing/core",
  ]
  sources = [
    "probes_data_source.cc",
    "probes_data_source.h",
  ]
}

perfetto_unittest_source_set("unittests") {
  testonly = true
  deps = [
    ":probes_src",
    "../../../gn:default_deps",
    "../../../gn:gtest_and_gmock",
    "../../tracing/test:test_support",
    "android_log:unittests",
    "common:unittests",
    "filesystem:unittests",
    "initial_display_state:unittests",
    "packages_list:unittests",
    "ps:unittests",
    "sys_stats:unittests",
    "system_info:unittests",
  ]
}
