// Copyright 2018 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 <fbl/string_printf.h>
#include <perftest/perftest.h>
#include <zircon/assert.h>
#include <zircon/syscalls.h>

namespace {

// Test sleeping for different lengths of time.
//
// This serves an example of a parameterized perf test.
//
// This can be useful for measuring the overhead of sleeping.  It can also
// be used to measure the variation in actual sleep times.  Checking for
// under-sleeps and over-sleeps can serve as a sanity check for the
// perftest framework.
//
// Ideally we would be able to test a continuous range of sleep times,
// which might reveal discontinuities in the actual sleep times.  The
// perftest framework does not support this yet.
bool SleepTest(perftest::RepeatState* state, zx_duration_t delay_ns) {
  while (state->KeepRunning()) {
    ZX_ASSERT(zx_nanosleep(zx_deadline_after(delay_ns)) == ZX_OK);
  }
  return true;
}

void RegisterTests() {
  static const zx_duration_t kTimesNs[] = {
      0, 1, 10, 100, 1000, 10000,
  };
  for (auto time_ns : kTimesNs) {
    auto name = fbl::StringPrintf("Sleep/%lluns", static_cast<unsigned long long>(time_ns));
    perftest::RegisterTest(name.c_str(), SleepTest, time_ns);
  }
}
PERFTEST_CTOR(RegisterTests)

}  // namespace
