// Copyright 2020 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.

#include <perftest/perftest.h>

namespace {

// Execute an empty loop for the given number of iterations.
bool NoOpLoop(perftest::RepeatState* state, int iteration_count) {
  while (state->KeepRunning()) {
    for (int i = 0; i < iteration_count; ++i) {
      // No-op that the compiler should not optimize away.
      __asm__ volatile("");
    }
  }
  return true;
}

void RegisterTests() {
  // This is intended as a simple way to test whether regression detection
  // is working: We can land a change that increases the iteration count
  // here and then manually check whether a regression gets reported, or
  // check whether the increase appears on the performance dashboard's
  // graph.
  perftest::RegisterTest("ExampleNoOpLoop", NoOpLoop, 100);

  // Run these so we have reference values to compare against.
  perftest::RegisterTest("NoOpLoop/100", NoOpLoop, 100);
  perftest::RegisterTest("NoOpLoop/1000", NoOpLoop, 1000);
  perftest::RegisterTest("NoOpLoop/10000", NoOpLoop, 10000);
}
PERFTEST_CTOR(RegisterTests)

}  // namespace
