mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-07 16:38:33 +02:00
backend-drm: Explicitly arm/disarm the page flip timer counter
when drm-backend debug scope is set. This follows-up with the surface counter timer but because this is buried in the drm-backend we make use the drm-backend scope if there's a subscription to it and enable and arm the counter as well when that happens. Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
This commit is contained in:
parent
cda8de1089
commit
5beca735b0
2 changed files with 53 additions and 5 deletions
|
|
@ -276,6 +276,7 @@ struct drm_backend {
|
|||
struct {
|
||||
uint32_t frame_counter_interval;
|
||||
struct wl_event_source *pageflip_timer_counter;
|
||||
bool timer_armed;
|
||||
} perf_page_flips_stats;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -222,7 +222,7 @@ pageflip_timer_counter_handler(void *data)
|
|||
}
|
||||
|
||||
static int
|
||||
drm_backend_pageflip_timer_create(struct drm_backend *b, uint32_t interval)
|
||||
drm_backend_pageflip_counter_timer_create(struct drm_backend *b, uint32_t interval)
|
||||
{
|
||||
struct wl_event_loop *loop = NULL;
|
||||
struct weston_compositor *ec = b->compositor;
|
||||
|
|
@ -241,11 +241,53 @@ drm_backend_pageflip_timer_create(struct drm_backend *b, uint32_t interval)
|
|||
|
||||
b->perf_page_flips_stats.frame_counter_interval = interval;
|
||||
|
||||
/* arm it w/ interval */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
drm_backend_pageflip_counter_timer_arm(struct drm_backend *b)
|
||||
{
|
||||
if (!b->perf_page_flips_stats.pageflip_timer_counter)
|
||||
return;
|
||||
|
||||
wl_event_source_timer_update(b->perf_page_flips_stats.pageflip_timer_counter,
|
||||
1000 * b->perf_page_flips_stats.frame_counter_interval);
|
||||
|
||||
return 0;
|
||||
b->perf_page_flips_stats.timer_armed = true;
|
||||
}
|
||||
|
||||
static void
|
||||
drm_backend_pageflip_counter_timer_disarm(struct drm_backend *b)
|
||||
{
|
||||
if (!b->perf_page_flips_stats.pageflip_timer_counter)
|
||||
return;
|
||||
|
||||
/* do not disarm the timer if there are subscriptions to this log scope */
|
||||
if (weston_log_scope_is_enabled(b->debug))
|
||||
return;
|
||||
|
||||
wl_event_source_timer_update(b->perf_page_flips_stats.pageflip_timer_counter, 0);
|
||||
|
||||
b->perf_page_flips_stats.timer_armed = false;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
drm_backend_pageflip_counter_timer_disable_cb(struct weston_log_subscription *sub, void *data)
|
||||
{
|
||||
struct drm_backend *b = data;
|
||||
assert(b->perf_page_flips_stats.timer_armed);
|
||||
|
||||
drm_backend_pageflip_counter_timer_disarm(b);
|
||||
}
|
||||
|
||||
static void
|
||||
drm_backend_pageflip_counter_timer_arm_cb(struct weston_log_subscription *sub, void *data)
|
||||
{
|
||||
struct drm_backend *b = data;
|
||||
|
||||
if (!b->perf_page_flips_stats.timer_armed)
|
||||
drm_backend_pageflip_counter_timer_arm(b);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -4128,7 +4170,9 @@ drm_backend_create(struct weston_compositor *compositor,
|
|||
|
||||
b->debug = weston_compositor_add_log_scope(compositor, "drm-backend",
|
||||
"Debug messages from DRM/KMS backend\n",
|
||||
NULL, NULL, NULL);
|
||||
drm_backend_pageflip_counter_timer_arm_cb,
|
||||
drm_backend_pageflip_counter_timer_disable_cb,
|
||||
b);
|
||||
|
||||
wl_list_insert(&compositor->backend_list, &b->base.link);
|
||||
|
||||
|
|
@ -4327,7 +4371,10 @@ drm_backend_create(struct weston_compositor *compositor,
|
|||
goto err_udev_monitor;
|
||||
}
|
||||
|
||||
drm_backend_pageflip_timer_create(b, DEFAULT_FRAME_RATE_INTERVAL);
|
||||
drm_backend_pageflip_counter_timer_create(b, DEFAULT_FRAME_RATE_INTERVAL);
|
||||
|
||||
if (weston_log_scope_is_enabled(b->debug))
|
||||
drm_backend_pageflip_counter_timer_arm(b);
|
||||
|
||||
return b;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue