mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-07 03:48:02 +02:00
compositor: Give paint nodes their own flow id
Since a paint node is a combination of surface, view, and output, using the surface flow in paint node functions can make a confusing twisty mess. Perfetto flows have in/out degree of one, so we can't properly express the 1 surface to multiple paint nodes relationship with flows. So for now let's break up the surface and paint node flows, but in the future we'll have better ways to map multiple flow starts to the same function via INSTANT events, and we'll be able to better link surface content update to paint node render. Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
This commit is contained in:
parent
8a8cc8486a
commit
54a25720c6
2 changed files with 12 additions and 4 deletions
|
|
@ -204,7 +204,7 @@ get_placeholder_color(struct weston_paint_node *pnode,
|
|||
static void
|
||||
paint_node_update_early(struct weston_paint_node *pnode)
|
||||
{
|
||||
WESTON_TRACE_FUNC_FLOW(&pnode->surface->flow_id);
|
||||
WESTON_TRACE_FUNC_FLOW(&pnode->flow_id);
|
||||
struct weston_matrix *mat = &pnode->buffer_to_output_matrix;
|
||||
struct weston_output *output = pnode->output;
|
||||
struct weston_surface *surface = pnode->surface;
|
||||
|
|
@ -326,7 +326,7 @@ paint_node_validate_ready(struct weston_paint_node *pnode)
|
|||
static void
|
||||
paint_node_update_late(struct weston_paint_node *pnode)
|
||||
{
|
||||
WESTON_TRACE_FUNC_FLOW(&pnode->surface->flow_id);
|
||||
WESTON_TRACE_FUNC_FLOW(&pnode->flow_id);
|
||||
struct weston_surface *surf = pnode->surface;
|
||||
struct weston_buffer *buffer = surf->buffer_ref.buffer;
|
||||
struct weston_view *view = pnode->view;
|
||||
|
|
@ -3295,7 +3295,7 @@ weston_output_damage(struct weston_output *output)
|
|||
static void
|
||||
paint_node_add_damage(struct weston_paint_node *node)
|
||||
{
|
||||
WESTON_TRACE_FUNC_FLOW(&node->surface->flow_id);
|
||||
WESTON_TRACE_FUNC_FLOW(&node->flow_id);
|
||||
struct weston_view *view = node->view;
|
||||
pixman_region32_t damage;
|
||||
|
||||
|
|
@ -3324,7 +3324,7 @@ paint_node_add_damage(struct weston_paint_node *node)
|
|||
static void
|
||||
paint_node_flush_surface_damage(struct weston_paint_node *pnode)
|
||||
{
|
||||
WESTON_TRACE_FUNC_FLOW(&pnode->surface->flow_id);
|
||||
WESTON_TRACE_FUNC_FLOW(&pnode->flow_id);
|
||||
struct weston_output *output = pnode->output;
|
||||
struct weston_surface *surface = pnode->surface;
|
||||
struct weston_buffer *buffer = surface->buffer_ref.buffer;
|
||||
|
|
@ -3351,6 +3351,9 @@ paint_node_flush_surface_damage(struct weston_paint_node *pnode)
|
|||
TLP_SURFACE(surface), TLP_OUTPUT(output), TLP_END);
|
||||
|
||||
out:
|
||||
/* We've flushed the surface's damage for *all* of its paint
|
||||
* nodes, so we can reset the surface flow_id here.
|
||||
*/
|
||||
surface->flow_id = 0;
|
||||
}
|
||||
|
||||
|
|
@ -3817,6 +3820,9 @@ weston_output_repaint(struct weston_output *output)
|
|||
z_order_link) {
|
||||
assert(pnode->view->output_mask & (1u << pnode->output->id));
|
||||
assert(pnode->output == output);
|
||||
|
||||
/* Reset paint node perfetto flows at start of repaint */
|
||||
pnode->flow_id = 0;
|
||||
}
|
||||
|
||||
/* Find the highest protection desired for an output */
|
||||
|
|
|
|||
|
|
@ -678,6 +678,8 @@ enum try_view_on_plane_failure_reasons {
|
|||
* A generic data structure unique for surface-view-output combination.
|
||||
*/
|
||||
struct weston_paint_node {
|
||||
uint64_t flow_id; /* Perfetto flow id */
|
||||
|
||||
/* Immutable members: */
|
||||
|
||||
/* struct weston_surface::paint_node_list */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue