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

import("//build/config/jumbo.gni")
import("//testing/test.gni")

jumbo_source_set("latency") {
  sources = [
    "average_lag_tracker.cc",
    "average_lag_tracker.h",
    "latency_histogram_macros.h",
    "latency_info.cc",
    "latency_info.h",
    "latency_tracker.cc",
    "latency_tracker.h",
  ]

  deps = [
    "//base",
    "//services/tracing/public/cpp:cpp",
    "//ui/gfx",
  ]

  public_deps = [ "//services/metrics/public/cpp:metrics_cpp" ]
}

jumbo_source_set("test_support") {
  testonly = true
  sources = [ "latency_info_test_support.cc" ]

  public_deps = [ ":latency" ]
}

test("latency_unittests") {
  sources = [
    "average_lag_tracker_unittest.cc",
    "latency_info_unittest.cc",
  ]

  deps = [
    ":latency",
    "//base",
    "//base/test:test_support",
    "//mojo/core/test:run_all_unittests",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (!is_ios) {
    sources += [
      "ipc/latency_info_param_traits_unittest.cc",
      "mojom/mojom_traits_unittest.cc",
    ]
    deps += [
      "//ipc:test_support",
      "//mojo/public/cpp/bindings",
      "//ui/gfx/ipc/geometry",
      "//ui/latency/ipc",
      "//ui/latency/mojom:test_interfaces",
    ]
  }
}
