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

component("tracing") {
  sources = [
    "child/child_memory_dump_manager_delegate_impl.cc",
    "child/child_memory_dump_manager_delegate_impl.h",
    "child/child_trace_message_filter.cc",
    "child/child_trace_message_filter.h",
    "common/graphics_memory_dump_provider_android.cc",
    "common/graphics_memory_dump_provider_android.h",
    "common/process_metrics_memory_dump_provider.cc",
    "common/process_metrics_memory_dump_provider.h",
    "common/tracing_messages.cc",
    "common/tracing_messages.h",
    "tracing_export.h",
  ]

  defines = [ "TRACING_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//ipc",
  ]

  if (is_nacl) {
    sources -= [ "common/process_metrics_memory_dump_provider.cc" ]
  }
}

component("startup_tracing") {
  sources = [
    "browser/trace_config_file.cc",
    "browser/trace_config_file.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/child_trace_message_filter_unittest.cc",
    "common/graphics_memory_dump_provider_android_unittest.cc",
    "common/process_metrics_memory_dump_provider_unittest.cc",
  ]

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

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