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

perfetto_py_library("trace_processor_table_generator") {
  sources = [
    "generators/trace_processor_table/public.py",
    "generators/trace_processor_table/serialize.py",
    "generators/trace_processor_table/util.py",
  ]
}

perfetto_py_library("trace_processor_stdlib_docs") {
  sources = [
    "generators/stdlib_docs/parse.py",
    "generators/stdlib_docs/stdlib.py",
    "generators/stdlib_docs/utils.py",
    "generators/stdlib_docs/validate.py",
  ]
}

perfetto_py_library("trace_processor_diff_tests") {
  sources = [
    "generators/diff_tests/runner.py",
    "generators/diff_tests/testing.py",
    "generators/diff_tests/utils.py",
  ]
}

perfetto_py_binary("trace_processor_py_example") {
  sources = [ "example.py" ]
  deps = [
    ":trace_processor_py",
    "../gn:pandas_py",
  ]
  main = "example.py"
}

perfetto_py_library("trace_processor_py") {
  sources = [
    "perfetto/trace_processor/__init__.py",
    "perfetto/trace_processor/api.py",
    "perfetto/trace_processor/http.py",
    "perfetto/trace_processor/platform.py",
    "perfetto/trace_processor/protos.py",
    "perfetto/trace_processor/shell.py",
  ]
  data = [
    "perfetto/trace_processor/trace_processor.descriptor",
    "perfetto/trace_processor/metrics.descriptor",
    "..:trace_processor_shell",
  ]
  deps = [
    ":trace_uri_resolver",
    "../gn:pandas_py",
    "../gn:protobuf_py",
    "../gn:tp_vendor_py",
  ]
}

perfetto_py_library("trace_uri_resolver") {
  sources = [
    "perfetto/trace_uri_resolver/__init__.py",
    "perfetto/trace_uri_resolver/path.py",
    "perfetto/trace_uri_resolver/registry.py",
    "perfetto/trace_uri_resolver/resolver.py",
    "perfetto/trace_uri_resolver/util.py",
  ]
}

perfetto_py_library("experimental_slice_breakdown_lib") {
  sources = [
    "perfetto/experimental/slice_breakdown/__init__.py",
    "perfetto/experimental/slice_breakdown/breakdown.py",
  ]
  deps = [ ":trace_processor_py" ]
}

perfetto_py_binary("experimental_slice_breakdown_bin") {
  sources = [ "tools/slice_breakdown.py" ]
  main = "tools/slice_breakdown.py"
  deps = [
    ":experimental_slice_breakdown_lib",
    ":trace_processor_py",
    "../gn:pandas_py",
  ]
}

perfetto_py_library("batch_trace_processor") {
  sources = [
    "perfetto/batch_trace_processor/__init__.py",
    "perfetto/batch_trace_processor/api.py",
    "perfetto/batch_trace_processor/platform.py",
  ]
  deps = [
    ":trace_processor_py",
    "../gn:pandas_py",
    "../gn:tp_vendor_py",
  ]
}
