1 // Copyright 2018 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <threads.h>
6 
7 #include <perftest/perftest.h>
8 
9 namespace {
10 
11 // Measure the times taken to lock and unlock a C11 mutex in the
12 // uncontended case.
MutexLockUnlockTest(perftest::RepeatState * state)13 bool MutexLockUnlockTest(perftest::RepeatState* state) {
14     state->DeclareStep("lock");
15     state->DeclareStep("unlock");
16     mtx_t mutex;
17     ZX_ASSERT(mtx_init(&mutex, mtx_plain) == thrd_success);
18     while (state->KeepRunning()) {
19         ZX_ASSERT(mtx_lock(&mutex) == thrd_success);
20         state->NextStep();
21         ZX_ASSERT(mtx_unlock(&mutex) == thrd_success);
22     }
23     mtx_destroy(&mutex);
24     return true;
25 }
26 
RegisterTests()27 void RegisterTests() {
28     perftest::RegisterTest("MutexLockUnlock", MutexLockUnlockTest);
29 }
30 PERFTEST_CTOR(RegisterTests);
31 
32 }  // namespace
33