Loading...
/* * Copyright (c) 2017 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ /** * @addtogroup t_profiling * @{ * @defgroup t_profiling_api test_profiling_api * @brief TestPurpose: verify profiling APIs. * @details All TESTPOINTs extracted from kernel-doc comments in <kernel.h> * - API coverage * - k_call_stacks_analyze * @} */ #include <ztest.h> #include <irq_offload.h> #define SLEEP_MS 100 #define NUM_OF_WORK 2 static struct k_work work[NUM_OF_WORK]; static struct k_sem sync_sema; static void tprofiling_stack(void *p) { /**TESTPOINT: stack analyze*/ for (int i = 0; i < 2; i++) { k_call_stacks_analyze(); } } /*power hook functions*/ int _sys_soc_suspend(s32_t ticks) { tprofiling_stack(NULL); return 0; } void _sys_soc_resume(void) { } /*work handler*/ static void work_handler(struct k_work *w) { tprofiling_stack(NULL); k_sem_give(&sync_sema); } /*test cases*/ void test_call_stacks_analyze_main(void) { TC_PRINT("from main thread:\n"); tprofiling_stack(NULL); } void test_call_stacks_analyze_idle(void) { TC_PRINT("from idle thread:\n"); k_sleep(SLEEP_MS); } void test_call_stacks_analyze_workq(void) { TC_PRINT("from workq:\n"); k_sem_init(&sync_sema, 0, NUM_OF_WORK); for (int i = 0; i < NUM_OF_WORK; i++) { k_work_init(&work[i], work_handler); k_work_submit(&work[i]); k_sem_take(&sync_sema, K_FOREVER); } } /*TODO: add test case to capture the usage of interrupt call stack*/ |