File syn_task_profile.c¶
File List > debug > syn_task_profile.c
Go to the documentation of this file
#include "syn_task_profile.h"
#include <string.h>
SYN_Status syn_task_profile_init(SYN_TaskProfileManager *mgr)
{
if (!mgr)
return SYN_INVALID_PARAM;
memset(mgr, 0, sizeof(*mgr));
mgr->enabled = true;
mgr->window_start_us = 0;
return SYN_OK;
}
void syn_task_profile_enable(SYN_TaskProfileManager *mgr, bool enable)
{
if (!mgr)
return;
mgr->enabled = enable;
}
void syn_task_profile_step_start(SYN_TaskProfileManager *mgr, size_t task_idx,
const char *task_name, uint32_t now_us)
{
if (!mgr || !mgr->enabled || task_idx >= SYN_TASK_PROFILE_MAX_TASKS)
return;
SYN_TaskProfile *p = &mgr->profiles[task_idx];
if (!p->task_name) {
p->task_name = task_name ? task_name : "unnamed";
if (task_idx >= mgr->count) {
mgr->count = task_idx + 1;
}
}
p->last_start_us = now_us;
}
void syn_task_profile_step_end(SYN_TaskProfileManager *mgr, size_t task_idx, uint32_t now_us)
{
if (!mgr || !mgr->enabled || task_idx >= SYN_TASK_PROFILE_MAX_TASKS)
return;
SYN_TaskProfile *p = &mgr->profiles[task_idx];
uint32_t duration = now_us - p->last_start_us;
p->step_count++;
p->total_time_us += duration;
if (duration > p->max_yield_us) {
p->max_yield_us = duration;
}
}
void syn_task_profile_update(SYN_TaskProfileManager *mgr, uint32_t now_us)
{
if (!mgr)
return;
uint32_t window_duration = now_us - mgr->window_start_us;
if (window_duration == 0)
return;
for (size_t i = 0; i < mgr->count; i++) {
SYN_TaskProfile *p = &mgr->profiles[i];
p->cpu_pct = ((float)p->total_time_us / (float)window_duration) * 100.0f;
}
}
SYN_Status syn_task_profile_get(const SYN_TaskProfileManager *mgr, size_t task_idx,
SYN_TaskProfile *profile)
{
if (!mgr || !profile || task_idx >= mgr->count)
return SYN_INVALID_PARAM;
*profile = mgr->profiles[task_idx];
return SYN_OK;
}