Add debug_dump_scene()

Dump view_tree and osd_tree on calling debug-action. Example bind:

<keybind key="A-F12">
  <action name="Debug"></action>
</keybind>
This commit is contained in:
Johan Malm 2022-02-12 19:43:32 +00:00
parent 532656ad5b
commit 5934ed6682
5 changed files with 69 additions and 1 deletions

9
include/debug.h Normal file
View file

@ -0,0 +1,9 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef __DEBUG_H
#define __DEBUG_H
struct server;
void debug_dump_scene(struct server *server);
#endif /* __DEBUG_H */

View file

@ -173,6 +173,7 @@ struct server {
struct view *cycle_view; struct view *cycle_view;
struct theme *theme; struct theme *theme;
struct menu *rootmenu; struct menu *rootmenu;
struct menu *windowmenu; struct menu *windowmenu;
}; };
@ -476,6 +477,7 @@ void server_start(struct server *server);
void server_finish(struct server *server); void server_finish(struct server *server);
/* update onscreen display 'alt-tab' buffer */ /* update onscreen display 'alt-tab' buffer */
void osd_finish(struct server *server);
void osd_update(struct server *server); void osd_update(struct server *server);
/* /*

View file

@ -3,6 +3,7 @@
#include <wlr/util/log.h> #include <wlr/util/log.h>
#include "common/spawn.h" #include "common/spawn.h"
#include "common/zfree.h" #include "common/zfree.h"
#include "debug.h"
#include "labwc.h" #include "labwc.h"
#include "menu/menu.h" #include "menu/menu.h"
#include "ssd.h" #include "ssd.h"
@ -161,7 +162,7 @@ action(struct view *activator, struct server *server, struct wl_list *actions, u
} }
break; break;
case ACTION_TYPE_DEBUG: case ACTION_TYPE_DEBUG:
/* nothing */ debug_dump_scene(server);
break; break;
case ACTION_TYPE_EXECUTE: case ACTION_TYPE_EXECUTE:
{ {

55
src/debug.c Normal file
View file

@ -0,0 +1,55 @@
// SPDX-License-Identifier: GPL-2.0-only
#include <wlr/types/wlr_scene.h>
#include "buffer.h"
#include "labwc.h"
#define INDENT_SIZE (3)
static char *
get_node_type(enum wlr_scene_node_type type)
{
switch (type) {
case WLR_SCENE_NODE_ROOT:
return "root";
case WLR_SCENE_NODE_TREE:
return "tree";
case WLR_SCENE_NODE_SURFACE:
return "surface";
case WLR_SCENE_NODE_RECT:
return "rect";
case WLR_SCENE_NODE_BUFFER:
return "buffer";
}
return "error";
}
static void
dump_tree(struct wlr_scene_node *node, int pos, int x, int y)
{
char *type = get_node_type(node->type);
if (pos) {
printf("%*c+-- ", pos, ' ');
}
printf("%s (%d,%d) [%p]\n", type, x, y, node);
struct wlr_scene_node *child;
wl_list_for_each(child, &node->state.children, state.link) {
dump_tree(child, pos + INDENT_SIZE, x + child->state.x,
y + child->state.y);
}
}
void
debug_dump_scene(struct server *server)
{
struct wlr_scene_node *node;
printf(":: view_tree ::\n");
node = &server->view_tree->node;
dump_tree(node, 0, node->state.x, node->state.y);
printf(":: osd_tree ::\n");
node = &server->osd_tree->node;
dump_tree(node, 0, node->state.x, node->state.y);
}

View file

@ -3,6 +3,7 @@ labwc_sources = files(
'buffer.c', 'buffer.c',
'cursor.c', 'cursor.c',
'damage.c', 'damage.c',
'debug.c',
'desktop.c', 'desktop.c',
'foreign.c', 'foreign.c',
'interactive.c', 'interactive.c',