blob: d236f75a37f8395f5c58d2dec137bc8d01c082c0 [file] [log] [blame]
/*
* Copyright (c) 2012-2015 Wind River Systems, Inc.
* Copyright (c) 2020 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/timing/timing.h>
#include "utils.h"
/* the number of mutex lock/unlock cycles */
#define N_TEST_MUTEX 1000
K_MUTEX_DEFINE(test_mutex);
/**
*
* @brief Test for the multiple mutex lock/unlock time
*
* The routine performs multiple mutex locks and then multiple mutex
* unlocks to measure the necessary time.
*
* @return 0 on success
*/
int mutex_lock_unlock(void)
{
int i;
uint32_t diff;
timing_t timestamp_start;
timing_t timestamp_end;
timing_start();
timestamp_start = timing_counter_get();
for (i = 0; i < N_TEST_MUTEX; i++) {
k_mutex_lock(&test_mutex, K_FOREVER);
}
timestamp_end = timing_counter_get();
diff = timing_cycles_get(&timestamp_start, &timestamp_end);
PRINT_STATS_AVG("Average time to lock a mutex", diff, N_TEST_MUTEX);
timestamp_start = timing_counter_get();
for (i = 0; i < N_TEST_MUTEX; i++) {
k_mutex_unlock(&test_mutex);
}
timestamp_end = timing_counter_get();
diff = timing_cycles_get(&timestamp_start, &timestamp_end);
PRINT_STATS_AVG("Average time to unlock a mutex", diff, N_TEST_MUTEX);
timing_stop();
return 0;
}