// 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 #include #include #include 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(time_ns)); perftest::RegisterTest(name.c_str(), SleepTest, time_ns); } } PERFTEST_CTOR(RegisterTests); } // namespace