blob: c9c4e1ab2e59100b8af28ece782bbff92e741250 [file] [log] [blame]
/*
* 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(int32_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*/