diff --git a/libweston/timeline.c b/libweston/timeline.c index cf82428e..8234c27c 100644 --- a/libweston/timeline.c +++ b/libweston/timeline.c @@ -232,12 +232,24 @@ emit_vblank_timestamp(struct timeline_emit_context *ctx, void *obj) return 1; } +static int +emit_gpu_timestamp(struct timeline_emit_context *ctx, void *obj) +{ + struct timespec *ts = obj; + + fprintf(ctx->cur, "\"gpu\":[%" PRId64 ", %ld]", + (int64_t)ts->tv_sec, ts->tv_nsec); + + return 1; +} + typedef int (*type_func)(struct timeline_emit_context *ctx, void *obj); static const type_func type_dispatch[] = { [TLT_OUTPUT] = emit_weston_output, [TLT_SURFACE] = emit_weston_surface, [TLT_VBLANK] = emit_vblank_timestamp, + [TLT_GPU] = emit_gpu_timestamp, }; WL_EXPORT void diff --git a/libweston/timeline.h b/libweston/timeline.h index b10a8157..9599d813 100644 --- a/libweston/timeline.h +++ b/libweston/timeline.h @@ -42,6 +42,7 @@ enum timeline_type { TLT_OUTPUT, TLT_SURFACE, TLT_VBLANK, + TLT_GPU, }; #define TYPEVERIFY(type, arg) ({ \ @@ -53,6 +54,7 @@ enum timeline_type { #define TLP_OUTPUT(o) TLT_OUTPUT, TYPEVERIFY(struct weston_output *, (o)) #define TLP_SURFACE(s) TLT_SURFACE, TYPEVERIFY(struct weston_surface *, (s)) #define TLP_VBLANK(t) TLT_VBLANK, TYPEVERIFY(const struct timespec *, (t)) +#define TLP_GPU(t) TLT_GPU, TYPEVERIFY(const struct timespec *, (t)) #define TL_POINT(...) do { \ if (weston_timeline_enabled_) \