mirror of
https://gitlab.freedesktop.org/monado/monado.git
synced 2025-01-01 04:36:07 +00:00
u/pacing: Refactor out tracing writing to own function
This commit is contained in:
parent
4ec3512641
commit
7eacf6bd7a
|
@ -234,6 +234,58 @@ predict_display_time(const struct pacing_app *pa, uint64_t now_ns, uint64_t peri
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Metrics and tracing.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
do_tracing(struct pacing_app *pa, struct u_pa_frame *f)
|
||||||
|
{
|
||||||
|
// Trace the data.
|
||||||
|
#ifdef XRT_FEATURE_TRACING
|
||||||
|
if (!U_TRACE_CATEGORY_IS_ENABLED(timing)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define TE_BEG(TRACK, TIME, NAME) U_TRACE_EVENT_BEGIN_ON_TRACK_DATA(timing, TRACK, TIME, NAME, PERCETTO_I(f->frame_id))
|
||||||
|
#define TE_END(TRACK, TIME) U_TRACE_EVENT_END_ON_TRACK(timing, TRACK, TIME)
|
||||||
|
|
||||||
|
TE_BEG(pa_cpu, f->when.predicted_ns, "sleep");
|
||||||
|
TE_END(pa_cpu, f->when.wait_woke_ns);
|
||||||
|
|
||||||
|
uint64_t cpu_start_ns = f->when.wait_woke_ns + 1;
|
||||||
|
TE_BEG(pa_cpu, cpu_start_ns, "cpu");
|
||||||
|
TE_END(pa_cpu, f->when.begin_ns);
|
||||||
|
|
||||||
|
TE_BEG(pa_draw, f->when.begin_ns, "draw");
|
||||||
|
if (f->when.begin_ns > f->predicted_gpu_done_time_ns) {
|
||||||
|
TE_BEG(pa_draw, f->when.begin_ns, "late");
|
||||||
|
TE_END(pa_draw, f->when.delivered_ns);
|
||||||
|
} else if (f->when.delivered_ns > f->predicted_gpu_done_time_ns) {
|
||||||
|
TE_BEG(pa_draw, f->predicted_gpu_done_time_ns, "late");
|
||||||
|
TE_END(pa_draw, f->when.delivered_ns);
|
||||||
|
}
|
||||||
|
TE_END(pa_draw, f->when.delivered_ns);
|
||||||
|
|
||||||
|
TE_BEG(pa_wait, f->when.delivered_ns, "wait");
|
||||||
|
if (f->when.delivered_ns > f->predicted_gpu_done_time_ns) {
|
||||||
|
TE_BEG(pa_wait, f->when.delivered_ns, "late");
|
||||||
|
TE_END(pa_wait, f->when.gpu_done_ns);
|
||||||
|
} else if (f->when.delivered_ns > f->predicted_gpu_done_time_ns) {
|
||||||
|
TE_BEG(pa_wait, f->predicted_gpu_done_time_ns, "late");
|
||||||
|
TE_END(pa_wait, f->when.gpu_done_ns);
|
||||||
|
}
|
||||||
|
TE_END(pa_wait, f->when.gpu_done_ns);
|
||||||
|
|
||||||
|
#undef TE_BEG
|
||||||
|
#undef TE_END
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Member functions.
|
* Member functions.
|
||||||
|
@ -395,43 +447,8 @@ pa_mark_gpu_done(struct u_pacing_app *upa, int64_t frame_id, uint64_t when_ns)
|
||||||
do_iir_filter(&pa->app.draw_time_ns, IIR_ALPHA_LT, IIR_ALPHA_GT, diff_draw_ns);
|
do_iir_filter(&pa->app.draw_time_ns, IIR_ALPHA_LT, IIR_ALPHA_GT, diff_draw_ns);
|
||||||
do_iir_filter(&pa->app.wait_time_ns, IIR_ALPHA_LT, IIR_ALPHA_GT, diff_wait_ns);
|
do_iir_filter(&pa->app.wait_time_ns, IIR_ALPHA_LT, IIR_ALPHA_GT, diff_wait_ns);
|
||||||
|
|
||||||
// Trace the data.
|
// Write out tracing data.
|
||||||
#ifdef XRT_FEATURE_TRACING
|
do_tracing(pa, f);
|
||||||
#define TE_BEG(TRACK, TIME, NAME) U_TRACE_EVENT_BEGIN_ON_TRACK_DATA(timing, TRACK, TIME, NAME, PERCETTO_I(f->frame_id))
|
|
||||||
#define TE_END(TRACK, TIME) U_TRACE_EVENT_END_ON_TRACK(timing, TRACK, TIME)
|
|
||||||
|
|
||||||
if (U_TRACE_CATEGORY_IS_ENABLED(timing)) {
|
|
||||||
TE_BEG(pa_cpu, f->when.predicted_ns, "sleep");
|
|
||||||
TE_END(pa_cpu, f->when.wait_woke_ns);
|
|
||||||
|
|
||||||
uint64_t cpu_start_ns = f->when.wait_woke_ns + 1;
|
|
||||||
TE_BEG(pa_cpu, cpu_start_ns, "cpu");
|
|
||||||
TE_END(pa_cpu, f->when.begin_ns);
|
|
||||||
|
|
||||||
TE_BEG(pa_draw, f->when.begin_ns, "draw");
|
|
||||||
if (f->when.begin_ns > f->predicted_gpu_done_time_ns) {
|
|
||||||
TE_BEG(pa_draw, f->when.begin_ns, "late");
|
|
||||||
TE_END(pa_draw, f->when.delivered_ns);
|
|
||||||
} else if (f->when.delivered_ns > f->predicted_gpu_done_time_ns) {
|
|
||||||
TE_BEG(pa_draw, f->predicted_gpu_done_time_ns, "late");
|
|
||||||
TE_END(pa_draw, f->when.delivered_ns);
|
|
||||||
}
|
|
||||||
TE_END(pa_draw, f->when.delivered_ns);
|
|
||||||
|
|
||||||
TE_BEG(pa_wait, f->when.delivered_ns, "wait");
|
|
||||||
if (f->when.delivered_ns > f->predicted_gpu_done_time_ns) {
|
|
||||||
TE_BEG(pa_wait, f->when.delivered_ns, "late");
|
|
||||||
TE_END(pa_wait, f->when.gpu_done_ns);
|
|
||||||
} else if (f->when.delivered_ns > f->predicted_gpu_done_time_ns) {
|
|
||||||
TE_BEG(pa_wait, f->predicted_gpu_done_time_ns, "late");
|
|
||||||
TE_END(pa_wait, f->when.gpu_done_ns);
|
|
||||||
}
|
|
||||||
TE_END(pa_wait, f->when.gpu_done_ns);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef TE_BEG
|
|
||||||
#undef TE_END
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Reset the frame.
|
// Reset the frame.
|
||||||
f->state = U_PA_READY;
|
f->state = U_PA_READY;
|
||||||
|
|
Loading…
Reference in a new issue