The purpose of this argument is to hold timestamp information about
events that occurred on the GPU.
---
 libweston/timeline.c | 12 ++++++++++++
 libweston/timeline.h |  2 ++
 2 files changed, 14 insertions(+)

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_) \
-- 
2.14.1

_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to