# 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("//testing/test.gni")
import("//third_party/protobuf/proto_library.gni")

proto_library("video_decode_stats_proto") {
  sources = [ "video_decode_stats.proto" ]
}

source_set("capabilities") {
  # Do not expand the visibility here without double-checking with OWNERS, this
  # is a roll-up target which is part of the //media component. Most other DEPs
  # should be using //media and not directly DEP this roll-up target.
  visibility = [ "//media" ]

  sources = [
    "bucket_utility.cc",
    "bucket_utility.h",
    "in_memory_video_decode_stats_db_impl.cc",
    "in_memory_video_decode_stats_db_impl.h",
    "learning_helper.cc",
    "learning_helper.h",
    "video_decode_stats_db.cc",
    "video_decode_stats_db.h",
    "video_decode_stats_db_impl.cc",
    "video_decode_stats_db_impl.h",
    "video_decode_stats_db_provider.cc",
    "video_decode_stats_db_provider.h",
  ]

  public_deps = [
    ":video_decode_stats_proto",
    "//base",
    "//components/leveldb_proto",
    "//media/base",
    "//ui/gfx/geometry",
  ]

  deps = [
    "//media/learning/common",
    "//media/learning/impl",
  ]

  configs += [ "//media:subcomponent_config" ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "in_memory_video_decode_stats_db_unittest.cc",
    "video_decode_stats_db_impl_unittest.cc",
    "video_decode_stats_db_unittest.cc",
  ]

  deps = [
    # Explicitly adding the proto lib here (in addition to "capabilities"
    # public_deps), because the generated files seem not to be available through
    # the transitive "capabilities" target (via media:test_support -> media).
    ":video_decode_stats_proto",
    "//base/test:test_support",
    "//components/leveldb_proto:test_support",
    "//media:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
