# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("../build/webrtc.gni")
import("//testing/test.gni")

group("stats") {
  deps = [
    ":rtc_stats",
  ]
}

# GYP version: webrtc/stats/stats.gyp:rtc_stats
source_set("rtc_stats") {
  cflags = []
  sources = [
    "rtcstats.cc",
    "rtcstats_objects.cc",
    "rtcstatscollector.cc",
    "rtcstatscollector.h",
    "rtcstatsreport.cc",
  ]

  configs += [ "..:common_config" ]
  public_configs = [ "..:common_inherited_config" ]

  if (is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    configs -= [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    "../api:libjingle_peerconnection",
  ]
}

if (rtc_include_tests) {
  # GYP version: webrtc/stats/stats.gyp:rtc_stats_unittests
  test("rtc_stats_unittests") {
    testonly = true
    sources = [
      "rtcstats_unittest.cc",
      "rtcstatscollector_unittest.cc",
      "rtcstatsreport_unittest.cc",
    ]

    configs += [ "..:common_config" ]
    public_configs = [ "..:common_inherited_config" ]

    if (is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      configs -= [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      ":rtc_stats",
      "../base:rtc_base_tests_utils",
      "../system_wrappers:metrics_default",
      "//testing/gmock",
    ]

    if (is_android) {
      deps += [ "//testing/android/native_test:native_test_native_code" ]
    }
  }
}
