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

source_set("trace_event") {
  sources = [
    "memory_allocator_attributes.h",
    "memory_allocator_dump.cc",
    "memory_allocator_dump.h",
    "memory_dump_manager.cc",
    "memory_dump_manager.h",
    "memory_dump_provider.cc",
    "memory_dump_provider.h",
    "process_memory_dump.cc",
    "process_memory_dump.h",
    "process_memory_maps.cc",
    "process_memory_maps.h",
    "process_memory_maps_dump_provider.cc",
    "process_memory_maps_dump_provider.h",
    "process_memory_totals.cc",
    "process_memory_totals.h",
    "process_memory_totals_dump_provider.cc",
    "process_memory_totals_dump_provider.h",
    "trace_event.h",
    "trace_event_android.cc",
    "trace_event_argument.cc",
    "trace_event_argument.h",
    "trace_event_impl.cc",
    "trace_event_impl.h",
    "trace_event_impl_constants.cc",
    "trace_event_memory.cc",
    "trace_event_memory.h",
    "trace_event_synthetic_delay.cc",
    "trace_event_synthetic_delay.h",
    "trace_event_system_stats_monitor.cc",
    "trace_event_system_stats_monitor.h",
    "trace_event_win.cc",
    "trace_event_win.h",
  ]

  if (is_nacl) {
    sources -= [
      "process_memory_totals_dump_provider.cc",
      "trace_event_system_stats_monitor.cc",
    ]
  }

  configs += [ "//base:base_implementation" ]

  deps = [
    "//base/debug",
    "//base/json",
    "//base/memory",
    "//base/process",
    "//base/third_party/dynamic_annotations",
  ]

  allow_circular_includes_from = [
    "//base/debug",
    "//base/memory",
    "//base/process",
  ]

  visibility = [ "//base/*" ]
}

source_set("trace_event_unittests") {
  testonly = true
  sources = [
    "memory_allocator_dump_unittest.cc",
    "memory_dump_manager_unittest.cc",
    "process_memory_maps_dump_provider_unittest.cc",
    "process_memory_totals_dump_provider_unittest.cc",
    "trace_event_argument_unittest.cc",
    "trace_event_memory_unittest.cc",
    "trace_event_synthetic_delay_unittest.cc",
    "trace_event_system_stats_monitor_unittest.cc",
    "trace_event_unittest.cc",
    "trace_event_win_unittest.cc",
  ]

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