// 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 <threads.h>

#include <perftest/perftest.h>

namespace {

// Measure the times taken to lock and unlock a C11 mutex in the
// uncontended case.
bool MutexLockUnlockTest(perftest::RepeatState* state) {
    state->DeclareStep("lock");
    state->DeclareStep("unlock");
    mtx_t mutex;
    ZX_ASSERT(mtx_init(&mutex, mtx_plain) == thrd_success);
    while (state->KeepRunning()) {
        ZX_ASSERT(mtx_lock(&mutex) == thrd_success);
        state->NextStep();
        ZX_ASSERT(mtx_unlock(&mutex) == thrd_success);
    }
    mtx_destroy(&mutex);
    return true;
}

void RegisterTests() {
    perftest::RegisterTest("MutexLockUnlock", MutexLockUnlockTest);
}
PERFTEST_CTOR(RegisterTests)

}  // namespace
