libweston: Convert timeline points to use the timeline scope
authorMarius Vlad <marius.vlad@collabora.com>
Thu, 5 Sep 2019 11:56:12 +0000 (14:56 +0300)
committerMarius Vlad <marius.vlad@collabora.com>
Thu, 17 Oct 2019 18:42:25 +0000 (21:42 +0300)
With the timeline scope being created it is time to convert TL_POINT()
to use the timeline scope through the compositor instance.

This patch removes the global variable allowing to run the new timeline
code.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
libweston/compositor.c
libweston/renderer-gl/gl-renderer.c
libweston/timeline.c
libweston/timeline.h

index e371e07b48674df94e699b11aa7d1901520ebb2f..420bc847a2151da6b9be812faf5dfae8e229e676 100644 (file)
@@ -2369,7 +2369,7 @@ surface_flush_damage(struct weston_surface *surface)
                surface->compositor->renderer->flush_damage(surface);
 
        if (pixman_region32_not_empty(&surface->damage))
-               TL_POINT("core_flush_damage", TLP_SURFACE(surface),
+               TL_POINT(surface->compositor, "core_flush_damage", TLP_SURFACE(surface),
                         TLP_OUTPUT(surface->output), TLP_END);
 
        pixman_region32_clear(&surface->damage);
@@ -2631,7 +2631,7 @@ weston_output_repaint(struct weston_output *output, void *repaint_data)
        if (output->destroying)
                return 0;
 
-       TL_POINT("core_repaint_begin", TLP_OUTPUT(output), TLP_END);
+       TL_POINT(ec, "core_repaint_begin", TLP_OUTPUT(output), TLP_END);
 
        /* Rebuild the surface list and update surface transforms up front. */
        weston_compositor_build_view_list(ec);
@@ -2709,7 +2709,7 @@ weston_output_repaint(struct weston_output *output, void *repaint_data)
                animation->frame(animation, output, &output->frame_time);
        }
 
-       TL_POINT("core_repaint_posted", TLP_OUTPUT(output), TLP_END);
+       TL_POINT(ec, "core_repaint_posted", TLP_OUTPUT(output), TLP_END);
 
        return r;
 }
@@ -2718,7 +2718,8 @@ static void
 weston_output_schedule_repaint_reset(struct weston_output *output)
 {
        output->repaint_status = REPAINT_NOT_SCHEDULED;
-       TL_POINT("core_repaint_exit_loop", TLP_OUTPUT(output), TLP_END);
+       TL_POINT(output->compositor, "core_repaint_exit_loop",
+                TLP_OUTPUT(output), TLP_END);
 }
 
 static int
@@ -2877,7 +2878,7 @@ weston_output_finish_frame(struct weston_output *output,
                goto out;
        }
 
-       TL_POINT("core_repaint_finished", TLP_OUTPUT(output),
+       TL_POINT(compositor, "core_repaint_finished", TLP_OUTPUT(output),
                 TLP_VBLANK(stamp), TLP_END);
 
        refresh_nsec = millihz_to_nsec(output->current_mode->refresh);
@@ -3064,7 +3065,7 @@ weston_output_schedule_repaint(struct weston_output *output)
                return;
 
        if (!output->repaint_needed)
-               TL_POINT("core_repaint_req", TLP_OUTPUT(output), TLP_END);
+               TL_POINT(compositor, "core_repaint_req", TLP_OUTPUT(output), TLP_END);
 
        loop = wl_display_get_event_loop(compositor->wl_display);
        output->repaint_needed = true;
@@ -3080,7 +3081,7 @@ weston_output_schedule_repaint(struct weston_output *output)
        assert(!output->idle_repaint_source);
        output->idle_repaint_source = wl_event_loop_add_idle(loop, idle_repaint,
                                                             output);
-       TL_POINT("core_repaint_enter_loop", TLP_OUTPUT(output), TLP_END);
+       TL_POINT(compositor, "core_repaint_enter_loop", TLP_OUTPUT(output), TLP_END);
 }
 
 /** weston_compositor_schedule_repaint
@@ -3529,7 +3530,7 @@ weston_surface_commit_state(struct weston_surface *surface,
        /* wl_surface.damage and wl_surface.damage_buffer */
        if (pixman_region32_not_empty(&state->damage_surface) ||
             pixman_region32_not_empty(&state->damage_buffer))
-               TL_POINT("core_commit_damage", TLP_SURFACE(surface), TLP_END);
+               TL_POINT(surface->compositor, "core_commit_damage", TLP_SURFACE(surface), TLP_END);
 
        pixman_region32_union(&surface->damage, &surface->damage,
                              &state->damage_surface);
index e65306bfd85d0ad7aac8a27bbddc24bf8dd06c3e..57bd2223129bb3724210e1c9dd65562684b056f2 100644 (file)
@@ -42,7 +42,6 @@
 #include <unistd.h>
 
 #include "linux-sync-file.h"
-
 #include "timeline.h"
 
 #include "gl-renderer.h"
@@ -253,7 +252,7 @@ timeline_render_point_handler(int fd, uint32_t mask, void *data)
 
                if (weston_linux_sync_file_read_timestamp(trp->fd,
                                                          &tspec) == 0) {
-                       TL_POINT(tp_name, TLP_GPU(&tspec),
+                       TL_POINT(trp->output->compositor, tp_name, TLP_GPU(&tspec),
                                 TLP_OUTPUT(trp->output), TLP_END);
                }
        }
@@ -287,7 +286,8 @@ timeline_submit_render_sync(struct gl_renderer *gr,
        int fd;
        struct timeline_render_point *trp;
 
-       if (!gr->has_native_fence_sync ||
+       if (!weston_log_scope_is_enabled(ec->timeline) ||
+           !gr->has_native_fence_sync ||
            sync == EGL_NO_SYNC_KHR)
                return;
 
index 35ccc523a982aa249f9fa3393ba2d3c2e3b8d7f7..33a533c4fe2d86380ed59c3d09c28fb660a19829 100644 (file)
@@ -37,8 +37,6 @@
 #include "timeline.h"
 #include "weston-log-internal.h"
 
-WL_EXPORT int weston_timeline_enabled_;
-
 struct timeline_emit_context {
        FILE *cur;
        struct weston_log_subscription *subscription;
@@ -320,48 +318,59 @@ static const type_func type_dispatch[] = {
 };
 
 WL_EXPORT void
-weston_timeline_point(const char *name, ...)
+weston_timeline_point(struct weston_log_scope *timeline_scope,
+                     const char *name, ...)
 {
-       va_list argp;
        struct timespec ts;
        enum timeline_type otype;
        void *obj;
        char buf[512];
-       struct timeline_emit_context ctx;
+       struct weston_log_subscription *sub = NULL;
+
+       if (!weston_log_scope_is_enabled(timeline_scope))
+               return;
 
        clock_gettime(CLOCK_MONOTONIC, &ts);
 
-       ctx.cur = fmemopen(buf, sizeof(buf), "w");
+       while ((sub = weston_log_subscription_iterate(timeline_scope, sub))) {
+               va_list argp;
+               struct timeline_emit_context ctx = {};
 
-       if (!ctx.cur) {
-               weston_log("Timeline error in fmemopen, closing.\n");
-               return;
-       }
+               memset(buf, 0, sizeof(buf));
+               ctx.cur = fmemopen(buf, sizeof(buf), "w");
+               ctx.subscription = sub;
+
+               if (!ctx.cur) {
+                       weston_log("Timeline error in fmemopen, closing.\n");
+                       return;
+               }
 
-       fprintf(ctx.cur, "{ \"T\":[%" PRId64 ", %ld], \"N\":\"%s\"",
-               (int64_t)ts.tv_sec, ts.tv_nsec, name);
+               fprintf(ctx.cur, "{ \"T\":[%" PRId64 ", %ld], \"N\":\"%s\"",
+                               (int64_t)ts.tv_sec, ts.tv_nsec, name);
 
-       va_start(argp, name);
-       while (1) {
-               otype = va_arg(argp, enum timeline_type);
-               if (otype == TLT_END)
-                       break;
+               va_start(argp, name);
+               while (1) {
+                       otype = va_arg(argp, enum timeline_type);
+                       if (otype == TLT_END)
+                               break;
 
-               obj = va_arg(argp, void *);
-               if (type_dispatch[otype]) {
-                       fprintf(ctx.cur, ", ");
-                       type_dispatch[otype](&ctx, obj);
+                       obj = va_arg(argp, void *);
+                       if (type_dispatch[otype]) {
+                               fprintf(ctx.cur, ", ");
+                               type_dispatch[otype](&ctx, obj);
+                       }
+               }
+               va_end(argp);
+
+               fprintf(ctx.cur, " }\n");
+               fflush(ctx.cur);
+               if (ferror(ctx.cur)) {
+                       weston_log("Timeline error in constructing entry, closing.\n");
+               } else {
+                       weston_log_subscription_printf(ctx.subscription, "%s", buf);
                }
-       }
-       va_end(argp);
 
-       fprintf(ctx.cur, " }\n");
-       fflush(ctx.cur);
-       if (ferror(ctx.cur)) {
-               weston_log("Timeline error in constructing entry, closing.\n");
-       } else {
-               weston_log_subscription_printf(ctx.subscription, "%s", buf);
-       }
+               fclose(ctx.cur);
 
-       fclose(ctx.cur);
+       }
 }
index bc98add79f78fd88a3e5bbef09a855c8f80f61d0..a84c27b4681564f426d0898320f1bf09e28e8fe0 100644 (file)
@@ -33,8 +33,6 @@
 #include <libweston/weston-log.h>
 #include <wayland-server-core.h>
 
-extern int weston_timeline_enabled_;
-
 enum timeline_type {
        TLT_END = 0,
        TLT_OUTPUT,
@@ -71,12 +69,12 @@ struct weston_timeline_subscription_object {
 #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_) \
-               weston_timeline_point(__VA_ARGS__); \
+#define TL_POINT(ec, ...) do { \
+       weston_timeline_point(ec->timeline, __VA_ARGS__); \
 } while (0)
 
 void
-weston_timeline_point(const char *name, ...);
+weston_timeline_point(struct weston_log_scope *timeline_scope,
+                     const char *name, ...);
 
 #endif /* WESTON_TIMELINE_H */