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

import("../mojo_edk.gni")

mojo_edk_source_set("util") {
  sources = [
    "command_line.cc",
    "command_line.h",
    "cond_var.cc",
    "cond_var.h",
    "logging_internal.cc",
    "logging_internal.h",
    "make_unique.h",
    "mutex.cc",
    "mutex.h",
    "ref_counted.h",
    "ref_counted_internal.h",
    "ref_ptr.h",
    "ref_ptr_internal.h",
    "scoped_file.h",
    "thread_annotations.h",
    "waitable_event.cc",
    "waitable_event.h",
  ]

  mojo_sdk_public_deps = [ "mojo/public/cpp/system" ]
}

mojo_edk_unittests("mojo_edk_util_unittests") {
  sources = [
    "command_line_unittest.cc",
    "cond_var_unittest.cc",
    "mutex_unittest.cc",
    "ref_counted_unittest.cc",
    "thread_annotations_unittest.cc",
    "waitable_event_unittest.cc",
  ]

  deps = [
    ":util",
    "//testing/gtest",
  ]

  mojo_sdk_deps = [ "mojo/public/cpp/system" ]

  mojo_edk_deps = [ "mojo/edk/system/test" ]
}

mojo_edk_source_set("perftests") {
  testonly = true
  mojo_edk_visibility = [ "mojo/edk/system:mojo_edk_system_perftests" ]

  sources = [
    "ref_counted_perftest.cc",
  ]

  deps = [
    ":util",
    "//testing/gtest",
  ]

  mojo_edk_deps = [
    "mojo/edk/system/test",
    "mojo/edk/system/test:perf",
  ]
}
