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