# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//testing/test.gni")

component("tracing") {
  sources = [
    "child/background_tracing_agent_impl.cc",
    "child/background_tracing_agent_impl.h",
    "child/background_tracing_agent_provider_impl.cc",
    "child/background_tracing_agent_provider_impl.h",
    "common/graphics_memory_dump_provider_android.cc",
    "common/graphics_memory_dump_provider_android.h",
    "tracing_export.h",
  ]

  defines = [ "TRACING_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//components/tracing/common:interfaces",
    "//ipc",
  ]
}

component("startup_tracing") {
  sources = [
    "common/trace_startup_config.cc",
    "common/trace_startup_config.h",
    "common/trace_to_console.cc",
    "common/trace_to_console.h",
    "common/tracing_switches.cc",
    "common/tracing_switches.h",
    "tracing_export.h",
  ]

  defines = [ "TRACING_IMPLEMENTATION" ]

  deps = [
    "//base",
  ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "child/background_tracing_agent_impl_unittest.cc",
    "common/graphics_memory_dump_provider_android_unittest.cc",
  ]

  deps = [
    ":startup_tracing",
    ":tracing",
    "//base/test:test_support",
    "//components/tracing/common:interfaces",
    "//ipc",
    "//testing/gmock:gmock",
    "//testing/gtest",
  ]

  if (!is_android) {
    sources += [ "common/trace_startup_config_unittest.cc" ]
    deps += [ ":startup_tracing" ]
  }
}

test("tracing_perftests") {
  sources = [
    "test/perf_test_helpers.cc",
    "test/perf_test_helpers.h",
    "test/trace_event_perftest.cc",
  ]
  deps = [
    "//base:base",
    "//base/test:test_support",
    "//base/test:test_support_perf",
    "//testing/gtest",
    "//testing/perf",
  ]

  data_deps = [
    # Needed for isolate script to execute.
    "//testing:run_perf_test",
  ]

  if (is_android) {
    deps += [ "//testing/android/native_test:native_test_native_code" ]
  }
}
