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

# There should be only one resource coordinator. It is currently
# in the browser process. So, only //content/browser should link to this target.
# Others modules should only need the public targets.
source_set("lib") {
  sources = [
    "memory_instrumentation/aggregate_metrics_processor.cc",
    "memory_instrumentation/aggregate_metrics_processor.h",
    "memory_instrumentation/coordinator_impl.cc",
    "memory_instrumentation/coordinator_impl.h",
    "memory_instrumentation/graph.cc",
    "memory_instrumentation/graph.h",
    "memory_instrumentation/graph_processor.cc",
    "memory_instrumentation/graph_processor.h",
    "memory_instrumentation/queued_request.cc",
    "memory_instrumentation/queued_request.h",
    "memory_instrumentation/queued_request_dispatcher.cc",
    "memory_instrumentation/queued_request_dispatcher.h",
    "memory_instrumentation/switches.cc",
    "memory_instrumentation/switches.h",
    "resource_coordinator_service.cc",
    "resource_coordinator_service.h",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  public_deps = [
    "//base",
    "//mojo/public/cpp/bindings",
    "//services/metrics/public/cpp:metrics_cpp",
    "//services/metrics/public/cpp:ukm_builders",
    "//services/metrics/public/mojom",
    "//services/resource_coordinator/public/cpp:resource_coordinator_cpp",
  ]
}

source_set("tests") {
  testonly = true

  sources = [
    "memory_instrumentation/coordinator_impl_unittest.cc",
    "memory_instrumentation/graph_processor_unittest.cc",
    "memory_instrumentation/graph_unittest.cc",
    "public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits_unittest.cc",
    "public/cpp/memory_instrumentation/os_metrics_unittest.cc",
    "public/cpp/memory_instrumentation/tracing_integration_unittest.cc",
  ]

  deps = [
    ":lib",
    "//base",
    "//base/test:test_support",
    "//components/ukm:test_support",
    "//mojo/public/cpp/bindings",
    "//services/resource_coordinator/public/cpp:resource_coordinator_cpp",
    "//services/resource_coordinator/public/cpp/memory_instrumentation:memory_instrumentation",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
