# 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 = [
    "java_heap_dump_provider_android.cc",
    "java_heap_dump_provider_android.h",
    "memory_allocator_dump.cc",
    "memory_allocator_dump.h",
    "memory_allocator_dump_guid.cc",
    "memory_allocator_dump_guid.h",
    "memory_dump_manager.cc",
    "memory_dump_manager.h",
    "memory_dump_provider.h",
    "memory_dump_request_args.h",
    "memory_dump_session_state.cc",
    "memory_dump_session_state.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_config.cc",
    "trace_config.h",
    "trace_event.h",
    "trace_event_android.cc",
    "trace_event_argument.cc",
    "trace_event_argument.h",
    "trace_event_etw_export_win.cc",
    "trace_event_etw_export_win.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",
    "winheap_dump_provider_win.cc",
    "winheap_dump_provider_win.h",
  ]

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

  if ((is_linux || is_android) && !is_fnl) {
    sources += [
      "malloc_dump_provider.cc",
      "malloc_dump_provider.h",
    ]
  }

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

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

  if (is_win) {
    deps += [ "//base/trace_event/etw_manifest:chrome_events_win" ]
  }

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

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

source_set("trace_event_unittests") {
  testonly = true
  sources = [
    "java_heap_dump_provider_android_unittest.cc",
    "memory_allocator_dump_unittest.cc",
    "memory_dump_manager_unittest.cc",
    "process_memory_dump_unittest.cc",
    "process_memory_maps_dump_provider_unittest.cc",
    "process_memory_totals_dump_provider_unittest.cc",
    "trace_config_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",
    "winheap_dump_provider_win_unittest.cc",
  ]

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