--- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -1,4 +1,6 @@ #include +#include +#include #include #include #include @@ -1276,7 +1278,18 @@ return view->urgent.tv_sec || view->urgent.tv_nsec; } +/* WHY: passive private evidence identifies actual saved nodes and lifetime. */ +static long long saved_ns(void) { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (long long)ts.tv_sec * 1000000000LL + ts.tv_nsec; +} + void view_remove_saved_buffer(struct sway_view *view) { + fprintf(stderr, "SB_TREE_DESTROY ns=%lld view=%p con=%p tree=%p content=%p\n", + saved_ns(), (void *)view, (void *)view->container, + (void *)view->saved_surface_tree, (void *)view->content_tree); + if (!sway_assert(view->saved_surface_tree, "Expected a saved buffer")) { return; } @@ -1309,6 +1322,10 @@ wlr_scene_buffer_set_buffer(sbuf, buffer->buffer); wlr_scene_buffer_set_corner_radii(sbuf, buffer->corners); scene_descriptor_assign(&sbuf->node, SWAY_SCENE_DESC_SAVED_BUFFER, tree); + fprintf(stderr, "SB_BUFFER_CREATE ns=%lld node=%p source_node=%p source_buffer=%p buffer=%p size=%dx%d pos=%d,%d parent=%p\n", + saved_ns(), (void *)&sbuf->node, (void *)&buffer->node, + (void *)buffer->buffer, (void *)sbuf->buffer, buffer->buffer ? buffer->buffer->width : 0, + buffer->buffer ? buffer->buffer->height : 0, sx, sy, (void *)sbuf->node.parent); } void view_save_buffer(struct sway_view *view) { @@ -1317,6 +1334,10 @@ } view->saved_surface_tree = wlr_scene_tree_create(view->scene_tree); + fprintf(stderr, "SB_TREE_CREATE ns=%lld view=%p con=%p tree=%p parent=%p content=%p\n", + saved_ns(), (void *)view, (void *)view->container, + (void *)view->saved_surface_tree, (void *)view->scene_tree, + (void *)view->content_tree); if (!view->saved_surface_tree) { sway_log(SWAY_ERROR, "Could not allocate a scene tree node when saving a surface"); return; @@ -1333,6 +1354,9 @@ wlr_scene_node_set_enabled(&view->content_tree->node, false); wlr_scene_node_set_enabled(&view->saved_surface_tree->node, true); + fprintf(stderr, "SB_ENABLE ns=%lld view=%p tree=%p content_enabled=%d saved_enabled=%d\n", + saved_ns(), (void *)view, (void *)view->saved_surface_tree, + view->content_tree->node.enabled, view->saved_surface_tree->node.enabled); } bool view_is_transient_for(struct sway_view *child,