#!/usr/bin/env python3
# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


class TargetInfo:
  """Information of a target backend.

  Attributes:
    name: The target name used in iree-translate, e.g., vulkan-spirv.
    mako_tag: The value_key in Mako config. This will be used in Mako metric
      info, which should match to the config.
    compilation_flags: Addition compilation flags. This is useful to target
      different hardware.
    runtime_flags: Addition runtime flags. This is useful when benchmarking.
      E.g., CPU can run with single thread or multi thread.
  """

  def __init__(self,
               name,
               mako_tag,
               compilation_flags=None,
               runtime_flags=None):
    if "_" in name:
      raise ValueError("The target name contains invalid char '_'")
    if compilation_flags is None:
      compilation_flags = []
    if runtime_flags is None:
      runtime_flags = []
    self.name = name
    self.mako_tag = mako_tag
    self.compilation_flags = compilation_flags
    self.runtime_flags = runtime_flags

  def get_driver(self) -> str:
    """ Returns a string indicates the driver of the target."""
    return self.name.split("-")[0]

  def add_batch_flag(self, size):
    self.compilation_flags.append(
        f"--iree-hal-benchmark-dispatch-repeat-count={size}")
    self.runtime_flags.append(f"--batch_size={size}")


class PhoneBenchmarkInfo:
  """Information of a phone.

  Attributes:
    name: The name of the phone.
    targets: A list of TargetInfo which indicates the target config to benchmark
      on the phone.
    benchmark_key: Mako benchmark key, which can be found in config/
  """

  def __init__(self, name, targets, benchmark_key):
    if "_" in name:
      raise ValueError("The target name contains invalid char '_'")
    self.name = name
    self.targets = targets
    self.benchmark_key = benchmark_key


class ModelBenchmarkInfo:
  """Information of a model.

  Attributes:
    name: The name of the model.
    model_artifacts_name: The filename of model artifacts which locates in
      Google bucket iree-model-artifacts.
    model_path: A path to MLIR input file. This can be a relative path.
    flagfile_path: A path to flagfile. This can be a relative path.
    phones: A list of PhoneBenchmarkInfo that the benchmarking targets on.
  """

  def __init__(self, name, model_artifacts_name, model_path, flagfile_path,
               phones):
    if "_" in name:
      raise ValueError("The target name contains invalid char '_'")
    self.name = name
    self.model_artifacts_name = model_artifacts_name
    self.model_path = model_path
    self.flagfile_path = flagfile_path
    self.phones = phones


def get_pixel4_default_target_list(skipped_target=None, batch_config=None):
  if skipped_target is None:
    skipped_target = []
  if batch_config is None:
    batch_config = []
  targets = [
      TargetInfo(name="vmla", mako_tag="vmla"),
      TargetInfo(name="dylib-llvm-aot",
                 mako_tag="cpu",
                 compilation_flags=[
                     "--iree-llvm-target-triple=aarch64-none-linux-android29",
                     "-iree-flow-inline-constants-max-byte-length=2048",
                     "-iree-flow-dispatch-formation-enable-operand-fusion"
                 ],
                 runtime_flags=["--dylib_worker_count=1"]),
      TargetInfo(
          name="vulkan-spirv",
          mako_tag="vlk",
          compilation_flags=[
              "--iree-vulkan-target-triple=qualcomm-adreno640-unknown-android10",
              "-iree-flow-inline-constants-max-byte-length=2048",
              "-iree-flow-dispatch-formation-enable-operand-fusion"
          ])
  ]
  targets = [elem for elem in targets if elem.mako_tag not in skipped_target]
  for target in targets:
    if target.mako_tag in batch_config:
      target.add_batch_flag(batch_config[target.mako_tag])
  return targets


def get_s20_default_target_list(skipped_target=None, batch_config=None):
  if skipped_target is None:
    skipped_target = []
  if batch_config is None:
    batch_config = []
  targets = [
      TargetInfo(name="vmla", mako_tag="vmla"),
      TargetInfo(name="dylib-llvm-aot",
                 mako_tag="cpu",
                 compilation_flags=[
                     "--iree-llvm-target-triple=aarch64-none-linux-android29",
                     "-iree-flow-inline-constants-max-byte-length=2048",
                     "-iree-flow-dispatch-formation-enable-operand-fusion"
                 ],
                 runtime_flags=["--dylib_worker_count=1"]),
      TargetInfo(
          name="vulkan-spirv",
          mako_tag="vlk",
          compilation_flags=[
              "--iree-vulkan-target-triple=valhall-g77-unknown-android10",
              # TODO(GH-5330): Revisit the number or delete the flag.
              "-iree-flow-inline-constants-max-byte-length=16",
              "-iree-flow-dispatch-formation-enable-operand-fusion"
          ])
  ]
  targets = [elem for elem in targets if elem.mako_tag not in skipped_target]
  for target in targets:
    if target.mako_tag in batch_config:
      target.add_batch_flag(batch_config[target.mako_tag])
  return targets


# The batch numbers are roughly computed to let it benchmark more than 3
# seconds.
# Do not set batch size on Pixel 4 for GPU targets, because it will get killed
# after 2 seconds. See https://github.com/google/iree/issues/5052
MODEL_BENCHMARKS = [
    ModelBenchmarkInfo(
        name="mobile-bert",
        model_artifacts_name=
        "iree-mobile-bert-artifacts-6fe4616e0ab9958eb18f368960a31276f1362029.tar.gz",
        model_path="tmp/iree/modules/MobileBertSquad/iree_input.mlir",
        flagfile_path=
        "tmp/iree/modules/MobileBertSquad/iree_vmla/traces/serving_default/flagfile",
        phones=[
            PhoneBenchmarkInfo(name="Pixel4",
                               benchmark_key="5538704950034432",
                               targets=get_pixel4_default_target_list(
                                   skipped_target=["cpu2", "vlk2"],
                                   batch_config={"cpu": 8})),
            PhoneBenchmarkInfo(name="S20",
                               benchmark_key="4699630718681088",
                               targets=get_s20_default_target_list(
                                   skipped_target=["cpu2", "vlk2"],
                                   batch_config={
                                       "cpu": 8,
                                       "vlk": 16
                                   })),
        ]),
    ModelBenchmarkInfo(
        name="mobilenet-v2",
        model_artifacts_name="mobilenet-v2.tar.gz",
        model_path="mobilenet-v2/iree_input.mlir",
        flagfile_path="mobilenet-v2/flagfile",
        phones=[
            PhoneBenchmarkInfo(name="Pixel4",
                               benchmark_key="6338759231537152",
                               targets=get_pixel4_default_target_list(
                                   skipped_target=["vlk2"],
                                   batch_config={
                                       "cpu": 16,
                                   })),
            PhoneBenchmarkInfo(
                name="S20",
                benchmark_key="5618403088793600",
                targets=get_s20_default_target_list(batch_config={
                    "cpu": 16,
                    "vlk": 64,
                })),
        ]),
    ModelBenchmarkInfo(
        name="mobilebert-f16",
        model_artifacts_name="mobilebert-f16.tar.gz",
        model_path="mobilebert-f16/mobilebert-f16.mlir",
        flagfile_path="mobilebert-f16/flagfile",
        phones=[
            PhoneBenchmarkInfo(
                name="S20",
                benchmark_key="4636549841944576",
                targets=get_s20_default_target_list(
                    skipped_target=['cpu', 'vmla', 'cpu2', 'vlk2'])),
        ])
]


def get_flagfile_name(model_name):
  return f"{model_name}_flagfile"


def get_module_name(model_name, phone_name, mako_tag):
  return f"{model_name}_{phone_name}_{mako_tag}.vmfb"
