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:
parent
f402e807dd
commit
6a9540a773
11 changed files with 150 additions and 22 deletions
|
@ -1823,8 +1823,10 @@
|
||||||
/**
|
/**
|
||||||
* @brief Trace Timer start
|
* @brief Trace Timer start
|
||||||
* @param timer Timer object
|
* @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
|
* @brief Trace Timer stop
|
||||||
|
|
|
@ -63,7 +63,7 @@ extern struct k_queue *_track_list_k_queue;
|
||||||
#define sys_port_track_k_mutex_init(mutex, ret) \
|
#define sys_port_track_k_mutex_init(mutex, ret) \
|
||||||
sys_track_k_mutex_init(mutex)
|
sys_track_k_mutex_init(mutex)
|
||||||
#define sys_port_track_k_timer_stop(timer)
|
#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_timer_init(timer) \
|
||||||
sys_track_k_timer_init(timer)
|
sys_track_k_timer_init(timer)
|
||||||
#define sys_port_track_k_queue_peek_tail(queue, ret)
|
#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_work_init(work)
|
||||||
#define sys_port_track_k_mutex_init(mutex, ret)
|
#define sys_port_track_k_mutex_init(mutex, ret)
|
||||||
#define sys_port_track_k_timer_stop(timer)
|
#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_timer_init(timer)
|
||||||
#define sys_port_track_k_queue_peek_tail(queue, ret)
|
#define sys_port_track_k_queue_peek_tail(queue, ret)
|
||||||
#define sys_port_track_k_queue_peek_head(queue, ret)
|
#define sys_port_track_k_queue_peek_head(queue, ret)
|
||||||
|
|
|
@ -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,
|
void z_impl_k_timer_start(struct k_timer *timer, k_timeout_t duration,
|
||||||
k_timeout_t period)
|
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)) {
|
if (K_TIMEOUT_EQ(duration, K_FOREVER)) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -274,24 +274,48 @@ void sys_trace_k_mutex_unlock_exit(struct k_mutex *mutex, int ret)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Timer */
|
/* Timer */
|
||||||
void sys_trace_k_timer_init(struct k_timer *timer, k_timer_expiry_t expiry_fn,
|
void sys_trace_k_timer_init(struct k_timer *timer)
|
||||||
k_timer_expiry_t stop_fn)
|
|
||||||
{
|
{
|
||||||
|
ctf_top_timer_init(
|
||||||
|
(uint32_t)(uintptr_t)timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sys_trace_k_timer_start(struct k_timer *timer, k_timeout_t duration,
|
void sys_trace_k_timer_start(struct k_timer *timer, k_timeout_t duration,
|
||||||
k_timeout_t period)
|
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)
|
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)
|
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
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,6 +97,13 @@ typedef enum {
|
||||||
CTF_EVENT_MUTEX_LOCK_EXIT = 0x2B,
|
CTF_EVENT_MUTEX_LOCK_EXIT = 0x2B,
|
||||||
CTF_EVENT_MUTEX_UNLOCK_ENTER = 0x2C,
|
CTF_EVENT_MUTEX_UNLOCK_ENTER = 0x2C,
|
||||||
CTF_EVENT_MUTEX_UNLOCK_EXIT = 0x2D,
|
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;
|
} ctf_event_t;
|
||||||
|
|
||||||
typedef struct {
|
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);
|
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 */
|
#endif /* SUBSYS_DEBUG_TRACING_CTF_TOP_H */
|
||||||
|
|
|
@ -160,6 +160,21 @@ extern "C" {
|
||||||
#define sys_port_trace_k_mutex_unlock_exit(mutex, ret) \
|
#define sys_port_trace_k_mutex_unlock_exit(mutex, ret) \
|
||||||
sys_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_init(condvar, ret)
|
||||||
#define sys_port_trace_k_condvar_signal_enter(condvar)
|
#define sys_port_trace_k_condvar_signal_enter(condvar)
|
||||||
#define sys_port_trace_k_condvar_signal_blocking(condvar, timeout)
|
#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_enter(slab)
|
||||||
#define sys_port_trace_k_mem_slab_free_exit(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_init(event)
|
||||||
#define sys_port_trace_k_event_post_enter(event, events, events_mask)
|
#define sys_port_trace_k_event_post_enter(event, events, events_mask)
|
||||||
#define sys_port_trace_k_event_post_exit(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_enter(struct k_mutex *mutex);
|
||||||
void sys_trace_k_mutex_unlock_exit(struct k_mutex *mutex, int ret);
|
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,
|
/* Timer */
|
||||||
k_timer_expiry_t stop_fn);
|
void sys_trace_k_timer_init(struct k_timer *timer);
|
||||||
|
|
||||||
void sys_trace_k_timer_start(struct k_timer *timer, k_timeout_t duration,
|
void sys_trace_k_timer_start(struct k_timer *timer, k_timeout_t duration,
|
||||||
k_timeout_t period);
|
k_timeout_t period);
|
||||||
void sys_trace_k_timer_stop(struct k_timer *timer);
|
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_timer_status_sync_exit(struct k_timer *timer, uint32_t result);
|
||||||
|
|
||||||
void sys_trace_k_event_init(struct k_event *event);
|
void sys_trace_k_event_init(struct k_event *event);
|
||||||
|
|
|
@ -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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
|
@ -583,8 +583,9 @@ void sys_trace_thread_info(struct k_thread *thread);
|
||||||
#define sys_port_trace_k_timer_init(timer) \
|
#define sys_port_trace_k_timer_init(timer) \
|
||||||
SEGGER_SYSVIEW_RecordU32(TID_TIMER_INIT, (uint32_t)(uintptr_t)timer)
|
SEGGER_SYSVIEW_RecordU32(TID_TIMER_INIT, (uint32_t)(uintptr_t)timer)
|
||||||
|
|
||||||
#define sys_port_trace_k_timer_start(timer) \
|
#define sys_port_trace_k_timer_start(timer, duration, period) \
|
||||||
SEGGER_SYSVIEW_RecordU32(TID_TIMER_START, (uint32_t)(uintptr_t)timer)
|
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) \
|
#define sys_port_trace_k_timer_stop(timer) \
|
||||||
SEGGER_SYSVIEW_RecordU32(TID_TIMER_STOP, (uint32_t)(uintptr_t)timer)
|
SEGGER_SYSVIEW_RecordU32(TID_TIMER_STOP, (uint32_t)(uintptr_t)timer)
|
||||||
|
|
|
@ -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,
|
void sys_trace_k_timer_start(struct k_timer *timer, k_timeout_t duration,
|
||||||
k_timeout_t period)
|
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,
|
void sys_trace_k_timer_init(struct k_timer *timer, k_timer_expiry_t expiry_fn,
|
||||||
|
|
|
@ -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_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_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_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_enter(timer)
|
||||||
#define sys_port_trace_k_timer_status_sync_blocking(timer, timeout) \
|
#define sys_port_trace_k_timer_status_sync_blocking(timer, timeout) \
|
||||||
|
|
|
@ -309,7 +309,7 @@ void sys_trace_idle(void);
|
||||||
#define sys_port_trace_k_mem_slab_free_exit(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_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_stop(timer)
|
||||||
#define sys_port_trace_k_timer_status_sync_enter(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_blocking(timer, timeout)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue