# 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.

source_set("dynamic") {
  sources = [
    "ancestor_generator.cc",
    "ancestor_generator.h",
    "connected_flow_generator.cc",
    "connected_flow_generator.h",
    "descendant_generator.cc",
    "descendant_generator.h",
    "describe_slice_generator.cc",
    "describe_slice_generator.h",
    "dynamic_table_generator.cc",
    "dynamic_table_generator.h",
    "experimental_annotated_stack_generator.cc",
    "experimental_annotated_stack_generator.h",
    "experimental_counter_dur_generator.cc",
    "experimental_counter_dur_generator.h",
    "experimental_flamegraph_generator.cc",
    "experimental_flamegraph_generator.h",
    "experimental_flat_slice_generator.cc",
    "experimental_flat_slice_generator.h",
    "experimental_sched_upid_generator.cc",
    "experimental_sched_upid_generator.h",
    "experimental_slice_layout_generator.cc",
    "experimental_slice_layout_generator.h",
    "flamegraph_construction_algorithms.cc",
    "flamegraph_construction_algorithms.h",
    "view_generator.cc",
    "view_generator.h",
  ]
  deps = [
    "../../../gn:default_deps",
    "../../../gn:sqlite",
    "../../base",
    "../analysis",
    "../containers",
    "../db",
    "../importers/proto:storage_full",
    "../importers/proto:storage_minimal",
    "../sqlite:sqlite_minimal",
    "../storage",
    "../tables",
    "../types",
    "../util",
  ]
}

source_set("unittests") {
  testonly = true
  sources = [
    "experimental_counter_dur_generator_unittest.cc",
    "experimental_flat_slice_generator_unittest.cc",
    "experimental_slice_layout_generator_unittest.cc",
  ]
  deps = [
    ":dynamic",
    "../../../gn:default_deps",
    "../../../gn:gtest_and_gmock",
    "../containers",
    "../importers/common",
    "../types",
  ]
}
