# 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.gni")

assert(enable_perfetto_trace_processor_sqlite)

source_set("table_functions") {
  sources = [
    "ancestor.cc",
    "ancestor.h",
    "connected_flow.cc",
    "connected_flow.h",
    "descendant.cc",
    "descendant.h",
    "experimental_annotated_stack.cc",
    "experimental_annotated_stack.h",
    "experimental_counter_dur.cc",
    "experimental_counter_dur.h",
    "experimental_flamegraph.cc",
    "experimental_flamegraph.h",
    "experimental_flat_slice.cc",
    "experimental_flat_slice.h",
    "experimental_sched_upid.cc",
    "experimental_sched_upid.h",
    "experimental_slice_layout.cc",
    "experimental_slice_layout.h",
    "flamegraph_construction_algorithms.cc",
    "flamegraph_construction_algorithms.h",
    "table_function.cc",
    "table_function.h",
    "view.cc",
    "view.h",
  ]
  deps = [
    "../../../../gn:default_deps",
    "../../../../gn:sqlite",
    "../../../base",
    "../../containers",
    "../../db",
    "../../importers/proto:full",
    "../../importers/proto:minimal",
    "../../sqlite:sqlite_minimal",
    "../../storage",
    "../../tables",
    "../../types",
    "../../util",
  ]
}

source_set("unittests") {
  testonly = true
  sources = [
    "ancestor_unittest.cc",
    "connected_flow_unittest.cc",
    "descendant_unittest.cc",
    "experimental_counter_dur_unittest.cc",
    "experimental_flat_slice_unittest.cc",
    "experimental_slice_layout_unittest.cc",
  ]
  deps = [
    ":table_functions",
    "../../../../gn:default_deps",
    "../../../../gn:gtest_and_gmock",
    "../../containers",
    "../../importers/common",
    "../../types",
  ]
}
