# Copyright 2019 The Fuchsia 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/go/go_binary.gni")
import("//build/go/go_library.gni")
import("//build/go/toolchain.gni")
import("//build/package.gni")

go_library("process_input_latency_trace_lib") {
  name = "process_input_latency_trace"
  deps = [
    "//garnet/go/src/benchmarking",
  ]
}

go_binary("process_input_latency_trace") {
  output_name = "process_input_latency_trace"

  gopackage = "process_input_latency_trace"

  deps = [
    ":process_input_latency_trace_lib",
  ]
}

package("garnet_input_latency_benchmarks") {
  deprecated_shell = "//build"

  testonly = true

  deps = [
    ":process_input_latency_trace",
  ]

  meta = [
    {
      dest = "run_simplest_app_benchmark.cmx"
      path = rebase_path(dest)
    },
    {
      dest = "run_yuv_to_image_pipe_benchmark.cmx"
      path = rebase_path(dest)
    },
  ]

  binaries = [
    {
      name = "process_input_latency_trace"
      shell = true
    },
    {
      shell = true
      name = "run_simplest_app_benchmark.sh"
      source = rebase_path("run_simplest_app_benchmark.sh")
    },
    {
      shell = true
      name = "run_yuv_to_image_pipe_benchmark.sh"
      source = rebase_path("run_yuv_to_image_pipe_benchmark.sh")
    },
  ]
}
