wl_shm_buffer_get(surface->buffer_ref.buffer->resource))
surface->compositor->renderer->flush_damage(surface);
- if (weston_timeline_enabled_ &&
- pixman_region32_not_empty(&surface->damage))
+ if (pixman_region32_not_empty(&surface->damage))
TL_POINT("core_flush_damage", TLP_SURFACE(surface),
TLP_OUTPUT(surface->output), TLP_END);
state->buffer_viewport.changed = 0;
/* wl_surface.damage and wl_surface.damage_buffer */
- if (weston_timeline_enabled_ &&
- (pixman_region32_not_empty(&state->damage_surface) ||
- pixman_region32_not_empty(&state->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);
pixman_region32_union(&surface->damage, &surface->damage,
return fd;
}
-static void
-timeline_key_binding_handler(struct weston_keyboard *keyboard,
- const struct timespec *time, uint32_t key,
- void *data)
-{
- struct weston_compositor *compositor = data;
-
- if (weston_timeline_enabled_)
- weston_timeline_close();
- else
- weston_timeline_open(compositor);
-}
-
static const char *
output_repaint_status_text(struct weston_output *output)
{
weston_layer_set_position(&ec->cursor_layer,
WESTON_LAYER_POSITION_CURSOR);
- weston_compositor_add_debug_binding(ec, KEY_T,
- timeline_key_binding_handler, ec);
-
ec->debug_scene =
weston_compositor_add_log_scope(ec->weston_log_ctx, "scene-graph",
"Scene graph details\n",
int fd;
struct timeline_render_point *trp;
- if (!weston_timeline_enabled_ ||
- !gr->has_native_fence_sync ||
+ if (!gr->has_native_fence_sync ||
sync == EGL_NO_SYNC_KHR)
return;
/*
* Copyright © 2014 Pekka Paalanen <pq@iki.fi>
- * Copyright © 2014 Collabora, Ltd.
+ * Copyright © 2014, 2019 Collabora, Ltd.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
#include "timeline.h"
#include <libweston/libweston.h>
-#include "shared/file-util.h"
-
-struct timeline_log {
- clock_t clk_id;
- FILE *file;
- unsigned series;
- struct wl_listener compositor_destroy_listener;
-};
WL_EXPORT int weston_timeline_enabled_;
-static struct timeline_log timeline_ = { CLOCK_MONOTONIC, NULL, 0 };
-
-static int
-weston_timeline_do_open(void)
-{
- const char *prefix = "weston-timeline-";
- const char *suffix = ".log";
- char fname[1000];
-
- timeline_.file = file_create_dated(NULL, prefix, suffix,
- fname, sizeof(fname));
- if (!timeline_.file) {
- const char *msg;
-
- switch (errno) {
- case ETIME:
- msg = "failure in datetime formatting";
- break;
- default:
- msg = strerror(errno);
- }
-
- weston_log("Cannot open '%s*%s' for writing: %s\n",
- prefix, suffix, msg);
- return -1;
- }
-
- weston_log("Opened timeline file '%s'\n", fname);
-
- return 0;
-}
-
-static void
-timeline_notify_destroy(struct wl_listener *listener, void *data)
-{
- weston_timeline_close();
-}
-
-void
-weston_timeline_open(struct weston_compositor *compositor)
-{
- if (weston_timeline_enabled_)
- return;
-
- if (weston_timeline_do_open() < 0)
- return;
-
- timeline_.compositor_destroy_listener.notify = timeline_notify_destroy;
- wl_signal_add(&compositor->destroy_signal,
- &timeline_.compositor_destroy_listener);
-
- if (++timeline_.series == 0)
- ++timeline_.series;
-
- weston_timeline_enabled_ = 1;
-}
-
-void
-weston_timeline_close(void)
-{
- if (!weston_timeline_enabled_)
- return;
-
- weston_timeline_enabled_ = 0;
-
- wl_list_remove(&timeline_.compositor_destroy_listener.link);
-
- fclose(timeline_.file);
- timeline_.file = NULL;
- weston_log("Timeline log file closed.\n");
-}
struct timeline_emit_context {
FILE *cur;
char buf[512];
struct timeline_emit_context ctx;
- clock_gettime(timeline_.clk_id, &ts);
+ clock_gettime(CLOCK_MONOTONIC, &ts);
- ctx.out = timeline_.file;
ctx.cur = fmemopen(buf, sizeof(buf), "w");
- ctx.series = timeline_.series;
if (!ctx.cur) {
weston_log("Timeline error in fmemopen, closing.\n");
- weston_timeline_close();
return;
}
fflush(ctx.cur);
if (ferror(ctx.cur)) {
weston_log("Timeline error in constructing entry, closing.\n");
- weston_timeline_close();
} else {
fprintf(ctx.out, "%s", buf);
}
/*
* Copyright © 2014 Pekka Paalanen <pq@iki.fi>
- * Copyright © 2014 Collabora, Ltd.
+ * Copyright © 2014, 2019 Collabora, Ltd.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
extern int weston_timeline_enabled_;
-struct weston_compositor;
-
-void
-weston_timeline_open(struct weston_compositor *compositor);
-
-void
-weston_timeline_close(void);
-
enum timeline_type {
TLT_END = 0,
TLT_OUTPUT,
TLT_GPU,
};
-#define TYPEVERIFY(type, arg) ({ \
+#define TYPEVERIFY(type, arg) ({ \
typeof(arg) tmp___ = (arg); \
(void)((type)0 == tmp___); \
tmp___; })
.SS DEBUG BINDINGS
The combination \fBmod + Shift + Space\fR begins a debug binding. Debug
bindings are completed by pressing an additional key. For example, pressing
-T next may toggle timeline recording, and F may toggle texture mesh
-wireframes with the GL renderer. (In fact, most debug effects can be
-disabled again by repeating the command.) Debug bindings are often tied to
-specific backends.
+F may toggle texture mesh wireframes with the GL renderer.
+(In fact, most debug effects can be disabled again by repeating the command.)
+Debug bindings are often tied to specific backends.
.SH "SEE ALSO"
.BR weston (1),