tracing: ctf: add timer support

Add k_timer tracing to CTF and other formats.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This commit is contained in:
Anas Nashif 2022-04-12 15:29:37 -04:00
commit 6a9540a773
11 changed files with 150 additions and 22 deletions

View file

@ -1823,8 +1823,10 @@
/**
* @brief Trace Timer start
* @param timer Timer object
* @param duration Timer duration
* @param period Timer period
*/
#define sys_port_trace_k_timer_start(timer)
#define sys_port_trace_k_timer_start(timer, duration, period)
/**
* @brief Trace Timer stop

View file

@ -63,7 +63,7 @@ extern struct k_queue *_track_list_k_queue;
#define sys_port_track_k_mutex_init(mutex, ret) \
sys_track_k_mutex_init(mutex)
#define sys_port_track_k_timer_stop(timer)
#define sys_port_track_k_timer_start(timer)
#define sys_port_track_k_timer_start(timer, duration, period)
#define sys_port_track_k_timer_init(timer) \
sys_track_k_timer_init(timer)
#define sys_port_track_k_queue_peek_tail(queue, ret)
@ -117,7 +117,7 @@ void sys_track_k_queue_init(struct k_queue *queue);
#define sys_port_track_k_work_init(work)
#define sys_port_track_k_mutex_init(mutex, ret)
#define sys_port_track_k_timer_stop(timer)
#define sys_port_track_k_timer_start(timer)
#define sys_port_track_k_timer_start(timer, duration, period)
#define sys_port_track_k_timer_init(timer)
#define sys_port_track_k_queue_peek_tail(queue, ret)
#define sys_port_track_k_queue_peek_head(queue, ret)

View file

@ -111,7 +111,7 @@ void k_timer_init(struct k_timer *timer,
void z_impl_k_timer_start(struct k_timer *timer, k_timeout_t duration,
k_timeout_t period)
{
SYS_PORT_TRACING_OBJ_FUNC(k_timer, start, timer);
SYS_PORT_TRACING_OBJ_FUNC(k_timer, start, timer, duration, period);
if (K_TIMEOUT_EQ(duration, K_FOREVER)) {
return;

View file

@ -274,24 +274,48 @@ void sys_trace_k_mutex_unlock_exit(struct k_mutex *mutex, int ret)
}
/* Timer */
void sys_trace_k_timer_init(struct k_timer *timer, k_timer_expiry_t expiry_fn,
k_timer_expiry_t stop_fn)
void sys_trace_k_timer_init(struct k_timer *timer)
{
ctf_top_timer_init(
(uint32_t)(uintptr_t)timer);
}
void sys_trace_k_timer_start(struct k_timer *timer, k_timeout_t duration,
k_timeout_t period)
{
ctf_top_timer_start(
(uint32_t)(uintptr_t)timer,
k_ticks_to_us_floor32((uint32_t)duration.ticks),
k_ticks_to_us_floor32((uint32_t)period.ticks)
);
}
void sys_trace_k_timer_stop(struct k_timer *timer)
{
ctf_top_timer_stop(
(uint32_t)(uintptr_t)timer
);
}
void sys_trace_k_timer_status_sync_blocking(struct k_timer *timer)
void sys_trace_k_timer_status_sync_enter(struct k_timer *timer)
{
ctf_top_timer_status_sync_enter(
(uint32_t)(uintptr_t)timer
);
}
void sys_trace_k_timer_status_sync_blocking(struct k_timer *timer, k_timeout_t timeout)
{
ctf_top_timer_status_sync_blocking(
(uint32_t)(uintptr_t)timer,
k_ticks_to_us_floor32((uint32_t)timeout.ticks)
);
}
void sys_trace_k_timer_status_sync_exit(struct k_timer *timer, uint32_t result)
{
ctf_top_timer_status_sync_exit(
(uint32_t)(uintptr_t)timer,
result
);
}

View file

@ -97,6 +97,13 @@ typedef enum {
CTF_EVENT_MUTEX_LOCK_EXIT = 0x2B,
CTF_EVENT_MUTEX_UNLOCK_ENTER = 0x2C,
CTF_EVENT_MUTEX_UNLOCK_EXIT = 0x2D,
CTF_EVENT_TIMER_INIT = 0x2E,
CTF_EVENT_TIMER_START = 0x2F,
CTF_EVENT_TIMER_STOP = 0x30,
CTF_EVENT_TIMER_STATUS_SYNC_ENTER = 0x31,
CTF_EVENT_TIMER_STATUS_SYNC_BLOCKING = 0x32,
CTF_EVENT_TIMER_STATUS_SYNC_EXIT = 0x33
} ctf_event_t;
typedef struct {
@ -290,4 +297,36 @@ static inline void ctf_top_mutex_unlock_exit(uint32_t mutex_id, int32_t ret)
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MUTEX_UNLOCK_EXIT), mutex_id);
}
/* Timer */
static inline void ctf_top_timer_init(uint32_t timer)
{
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_TIMER_INIT), timer);
}
static inline void ctf_top_timer_start(uint32_t timer, uint32_t duration, uint32_t period)
{
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_TIMER_START), timer, duration, period);
}
static inline void ctf_top_timer_stop(uint32_t timer)
{
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_TIMER_STOP), timer);
}
static inline void ctf_top_timer_status_sync_enter(uint32_t timer)
{
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_TIMER_STATUS_SYNC_ENTER), timer);
}
static inline void ctf_top_timer_status_sync_blocking(uint32_t timer, uint32_t timeout)
{
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_TIMER_STATUS_SYNC_BLOCKING), timer, timeout);
}
static inline void ctf_top_timer_status_sync_exit(uint32_t timer, uint32_t result)
{
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_TIMER_STATUS_SYNC_EXIT), timer, result);
}
#endif /* SUBSYS_DEBUG_TRACING_CTF_TOP_H */

View file

@ -160,6 +160,21 @@ extern "C" {
#define sys_port_trace_k_mutex_unlock_exit(mutex, ret) \
sys_trace_k_mutex_unlock_exit(mutex, ret)
/* Timer */
#define sys_port_trace_k_timer_init(timer) \
sys_trace_k_timer_init(timer)
#define sys_port_trace_k_timer_start(timer, duration, period) \
sys_trace_k_timer_start(timer, duration, period)
#define sys_port_trace_k_timer_stop(timer) \
sys_trace_k_timer_stop(timer)
#define sys_port_trace_k_timer_status_sync_enter(timer) \
sys_trace_k_timer_status_sync_enter(timer)
#define sys_port_trace_k_timer_status_sync_blocking(timer, timeout) \
sys_trace_k_timer_status_sync_blocking(timer, timeout)
#define sys_port_trace_k_timer_status_sync_exit(timer, result) \
sys_trace_k_timer_status_sync_exit(timer, result)
#define sys_port_trace_k_condvar_init(condvar, ret)
#define sys_port_trace_k_condvar_signal_enter(condvar)
#define sys_port_trace_k_condvar_signal_blocking(condvar, timeout)
@ -306,13 +321,6 @@ extern "C" {
#define sys_port_trace_k_mem_slab_free_enter(slab)
#define sys_port_trace_k_mem_slab_free_exit(slab)
#define sys_port_trace_k_timer_init(timer)
#define sys_port_trace_k_timer_start(timer)
#define sys_port_trace_k_timer_stop(timer)
#define sys_port_trace_k_timer_status_sync_enter(timer)
#define sys_port_trace_k_timer_status_sync_blocking(timer, timeout)
#define sys_port_trace_k_timer_status_sync_exit(timer, result)
#define sys_port_trace_k_event_init(event)
#define sys_port_trace_k_event_post_enter(event, events, events_mask)
#define sys_port_trace_k_event_post_exit(event, events, events_mask)
@ -416,12 +424,14 @@ void sys_trace_k_mutex_lock_exit(struct k_mutex *mutex, k_timeout_t timeout,
void sys_trace_k_mutex_unlock_enter(struct k_mutex *mutex);
void sys_trace_k_mutex_unlock_exit(struct k_mutex *mutex, int ret);
void sys_trace_k_timer_init(struct k_timer *timer, k_timer_expiry_t expiry_fn,
k_timer_expiry_t stop_fn);
/* Timer */
void sys_trace_k_timer_init(struct k_timer *timer);
void sys_trace_k_timer_start(struct k_timer *timer, k_timeout_t duration,
k_timeout_t period);
void sys_trace_k_timer_stop(struct k_timer *timer);
void sys_trace_k_timer_status_sync_blocking(struct k_timer *timer);
void sys_trace_k_timer_status_sync_blocking(struct k_timer *timer, k_timeout_t timeout);
void sys_trace_k_timer_status_sync_enter(struct k_timer *timer);
void sys_trace_k_timer_status_sync_exit(struct k_timer *timer, uint32_t result);
void sys_trace_k_event_init(struct k_event *event);

View file

@ -260,3 +260,53 @@ event {
};
};
event {
name = timer_init;
id = 0x2E;
fields := struct {
uint32_t id;
};
};
event {
name = timer_start;
id = 0x2F;
fields := struct {
uint32_t id;
uint32_t duration;
uint32_t period;
};
};
event {
name = timer_stop;
id = 0x30;
fields := struct {
uint32_t id;
};
};
event {
name = timer_status_sync_enter;
id = 0x31;
fields := struct {
uint32_t id;
};
};
event {
name = timer_status_sync_blocking;
id = 0x32;
fields := struct {
uint32_t id;
};
};
event {
name = timer_status_sync_exit;
id = 0x33;
fields := struct {
uint32_t id;
uint32_t result;
};
};

View file

@ -583,8 +583,9 @@ void sys_trace_thread_info(struct k_thread *thread);
#define sys_port_trace_k_timer_init(timer) \
SEGGER_SYSVIEW_RecordU32(TID_TIMER_INIT, (uint32_t)(uintptr_t)timer)
#define sys_port_trace_k_timer_start(timer) \
SEGGER_SYSVIEW_RecordU32(TID_TIMER_START, (uint32_t)(uintptr_t)timer)
#define sys_port_trace_k_timer_start(timer, duration, period) \
SEGGER_SYSVIEW_RecordU32x3(TID_TIMER_START, (uint32_t)(uintptr_t)timer, \
(uint32_t)duration.ticks, (uint32_t)period.ticks)
#define sys_port_trace_k_timer_stop(timer) \
SEGGER_SYSVIEW_RecordU32(TID_TIMER_STOP, (uint32_t)(uintptr_t)timer)

View file

@ -316,7 +316,8 @@ void sys_trace_k_thread_sched_set_priority(struct k_thread *thread, int prio)
void sys_trace_k_timer_start(struct k_timer *timer, k_timeout_t duration,
k_timeout_t period)
{
TRACING_STRING("%s: %p, duration: %d, period: %d\n", __func__, timer, duration, period);
TRACING_STRING("%s: %p, duration: %d, period: %d\n", __func__, timer,
(uint32_t)duration.ticks, (uint32_t)period.ticks);
}
void sys_trace_k_timer_init(struct k_timer *timer, k_timer_expiry_t expiry_fn,

View file

@ -412,7 +412,8 @@
#define sys_port_trace_k_mem_slab_free_exit(slab) sys_trace_k_mem_slab_free_exit(slab, mem)
#define sys_port_trace_k_timer_init(timer) sys_trace_k_timer_init(timer, expiry_fn, stop_fn)
#define sys_port_trace_k_timer_start(timer) sys_trace_k_timer_start(timer, duration, period)
#define sys_port_trace_k_timer_start(timer, duration, period) \
sys_trace_k_timer_start(timer, duration, period)
#define sys_port_trace_k_timer_stop(timer) sys_trace_k_timer_stop(timer)
#define sys_port_trace_k_timer_status_sync_enter(timer)
#define sys_port_trace_k_timer_status_sync_blocking(timer, timeout) \

View file

@ -309,7 +309,7 @@ void sys_trace_idle(void);
#define sys_port_trace_k_mem_slab_free_exit(slab)
#define sys_port_trace_k_timer_init(timer)
#define sys_port_trace_k_timer_start(timer)
#define sys_port_trace_k_timer_start(timer, duration, period)
#define sys_port_trace_k_timer_stop(timer)
#define sys_port_trace_k_timer_status_sync_enter(timer)
#define sys_port_trace_k_timer_status_sync_blocking(timer, timeout)