# 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("//chrome/browser/vr/features.gni")
import("//device/vr/buildflags/buildflags.gni")

group("vr_perf_tests") {
  testonly = true
  data = [
    "./data/",
    "./desktop_runtimes/",
    "./__init__.py",
    "./shared_vr_page_state.py",
    "./vr_benchmarks.py",
    "./vr_browsing_mode_pages.py",
    "./vr_sample_page.py",
    "./vr_story_set.py",
    "./webvr_sample_pages.py",
    "./webvr_wpr_pages.py",
    "./webxr_sample_pages.py",

    # For the ACL setup code.
    "//chrome/browser/vr/test/run_xr_browser_tests.py",
    "//chrome/test/data/xr/webvr_info/samples/",
    "//third_party/webxr_test_pages/webxr-samples/",
  ]
  data_deps = [
    "//testing:run_perf_test",
  ]

  deps = [
    "//tools/perf:perf",
  ]

  if (is_android) {
    data += [
      "//chrome/android/shared_preference_files/test/",
      "//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk",
      "//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk",
    ]

    data_deps += [
      "//chrome/android:chrome_modern_public_bundle",
      "//chrome/android:vr_nfc_simulator_apk",
    ]

    # We'll only ever use the assets if it's a Chrome-branded build. We don't have
    # a way of checking whether the files are actually present to copy, but the
    # script will deal with that.
    if (use_vr_assets_component) {
      data_deps += [ ":generate_vr_assets_profile" ]
    }
  }

  if (is_win) {
    if (enable_openvr) {
      deps += [ "//device/vr:openvr_mock" ]
    }
  }
}

# Copies files to the gen/ directory and creates a manifest so that the VR
# assets component can be used during Telemetry tests.
action("generate_vr_assets_profile") {
  script = "generate_vr_assets_profile.py"

  # We should re-run anytime the version or any related files change.
  inputs = [
    "//chrome/browser/resources/vr/assets/google_chrome",
    "//chrome/browser/resources/vr/assets/VERSION",
    "//chrome/browser/resources/vr/assets/vr_assets_component_files.json",
  ]
  outputs = [
    "$target_gen_dir/vr_assets_profile",
  ]
  args = [
    "--output",
    rebase_path(target_gen_dir, root_build_dir),
    "--asset-dir",
    rebase_path("//chrome/browser/resources/vr/assets", root_build_dir),
  ]
}
