| // 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 |