1 #include "e_mod_comp_shared_types.h"
2 #include "e_mod_comp.h"
3 #include "e_mod_comp_atoms.h"
4 #include "e_mod_comp_debug.h"
6 typedef struct _E_Mod_Comp_Log_Info
10 } E_Mod_Comp_Log_Info;
12 /* local subsystem functions */
14 _e_mod_comp_debug_wins_info_dump(E_Comp *c,
18 Ecore_X_Window cid = 0;
19 char *wname = NULL, *wclas = NULL;
21 char buf[4096], buf2[4096], buf3[4096];
24 fprintf(fs, "B-----------------------------------------------------------------------------------------------------------------------------\n");
25 fprintf(fs, " NO WINDOW (CLIENT) V x y w h PIXMAP pw ph | v VAL DMGs DONE | PID WNAME WCLASS\n");
26 fprintf(fs, "------------------------------------------------------------------------------------------------------------------------------\n");
28 EINA_INLIST_REVERSE_FOREACH(c->wins, cw)
30 cid = e_mod_comp_util_client_xid_get(cw);
31 ecore_x_icccm_name_class_get(cid, &wname, &wclas);
32 res = ecore_x_netwm_pid_get(cid, &pid);
35 memset(buf, 0, sizeof(buf));
36 memset(buf2, 0, sizeof(buf2));
37 memset(buf3, 0, sizeof(buf3));
40 snprintf(buf, sizeof(buf), "0x%07x", cw->bd->client.win);
43 snprintf(buf2, sizeof(buf2), "0x%07x", cw->pixmap);
45 if (cw->sync_info.val)
46 snprintf(buf3, sizeof(buf3), "%d %4d %4d %4d",
47 cw->sync_info.version,
50 cw->sync_info.done_count);
53 " %3d 0x%07x %9s %s %5d %5d %4d %4d %9s %4d %4d | %16s | %d %d %d %d %d %d |%4d %s %s\n",
57 cw->visible ? "v" : " ",
58 cw->x, cw->y, cw->w, cw->h,
72 if (wname) free(wname);
73 if (wclas) free(wclas);
78 fprintf(fs, "E-----------------------------------------------------------------------------------------------------------------------------\n");
82 _e_mod_comp_debug_canvas_info_dump(E_Comp *c,
83 E_Comp_Canvas *canvas,
87 E_Comp_Object *co, *_co = NULL;
88 E_Comp_Win *cw, *_cw = NULL;
89 E_Comp_Layer *ly = NULL;
91 int x, y, w, h, i = 1;
92 const char *file = NULL, *group = NULL;
94 fprintf(fs, "B-----------------------------------------------------------------------------------------------------------------------------\n");
95 fprintf(fs, " canvas->zone:%p num:%d %d,%d %dx%d\n",
96 canvas->zone, canvas->zone->num,
97 canvas->zone->x, canvas->zone->y,
98 canvas->zone->w, canvas->zone->h);
99 fprintf(fs, " c->nocomp:%d use_hw_ov:%d\n", c->nocomp, c->use_hw_ov);
100 fprintf(fs, " canvas->nocomp mode:%d force_composite:%d(ref:%d)\n", canvas->nocomp.mode, canvas->nocomp.force_composite, canvas->nocomp.comp_ref);
101 fprintf(fs, " canvas->nocomp cw:0x%08x\n", e_mod_comp_util_client_xid_get(canvas->nocomp.cw));
102 fprintf(fs, " canvas->animation run:%d num:%d\n", canvas->animation.run, canvas->animation.num);
103 fprintf(fs, " H/W ov win:%p\n", canvas->ov);
104 fprintf(fs, " Canvas Manual Render State: %d\n", ecore_evas_manual_render_get(canvas->ee));
105 fprintf(fs, "------------------------------------------------------------------------------------------------------------------------------\n");
107 fprintf(fs, "--------------------------------------------------------------------------------------------------------------------------------------\n");
108 fprintf(fs, " NO WinID shobj obj found_o ex ey ew eh | W S O | V SYNC DMG DONE |\n");
109 fprintf(fs, "--------------------------------------------------------------------------------------------------------------------------------------\n");
112 ly = e_mod_comp_canvas_layer_get(canvas, "comp");
115 lm = evas_object_smart_members_get(ly->layout);
116 Evas_Object *o = NULL;
118 EINA_LIST_REVERSE_FOREACH(lm, ll, o)
120 if (!evas_object_visible_get(o)) continue;
122 EINA_INLIST_REVERSE_FOREACH(c->wins, cw)
125 EINA_LIST_FOREACH(cw->objs, l, co)
128 if (co->canvas != canvas) continue;
139 if (found && _co && _cw)
141 edje_object_file_get(_co->shadow, &file, &group);
142 evas_object_geometry_get(o, &x, &y, &w, &h);
145 " %2d 0x%07x %p %p %p %4d %4d %4dx%4d %s %s|%s|%s %.1f|%s %.1f|%s %.1f\n",
146 i, _cw->win, _co->shadow, _co->img, o, x, y, w, h,
147 evas_object_visible_get(_co->shadow) ? "v" : "",
148 _cw->hidden_override ? "HIDDEN" : "",
150 edje_object_part_state_get(_co->shadow, "clipper", &val), val,
151 edje_object_part_state_get(_co->shadow, "shower", &val), val,
152 edje_object_part_state_get(_co->shadow, "e.swallow.content", &val), val);
165 /* externally accessible globals */
166 EINTERN int logtype = LT_NOTHING;
168 /* externally accessible functions */
170 e_mod_comp_debug_info_dump(Eina_Bool to_file,
174 E_Comp_Canvas *canvas;
178 c = e_mod_comp_util_get();
179 E_CHECK_RETURN(c, 0);
181 if ((to_file) && (name))
183 fs = fopen(name, "w");
186 fprintf(stderr, "can't open %s file.\n", name);
188 to_file = EINA_FALSE;
192 _e_mod_comp_debug_wins_info_dump(c, fs);
194 EINA_LIST_FOREACH(c->canvases, l, canvas)
196 if (!canvas) continue;
197 _e_mod_comp_debug_canvas_info_dump(c, canvas, fs);
209 e_mod_comp_debug_edje_error_get(Evas_Object *o,
212 Edje_Load_Error err = edje_object_load_error_get(o);
213 char *_err_msg = NULL;
214 Eina_Bool res = EINA_TRUE;
216 if (err != EDJE_LOAD_ERROR_NONE)
220 case EDJE_LOAD_ERROR_GENERIC: _err_msg = strdup("ERR_GENERIC"); break;
221 case EDJE_LOAD_ERROR_DOES_NOT_EXIST: _err_msg = strdup("ERR_DOES_NOT_EXIST"); break;
222 case EDJE_LOAD_ERROR_PERMISSION_DENIED: _err_msg = strdup("ERR_PERMISSION_DENIED"); break;
223 case EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED: _err_msg = strdup("ERR_RESOURCE_ALLOCATION_FAILED"); break;
224 case EDJE_LOAD_ERROR_CORRUPT_FILE: _err_msg = strdup("ERR_CORRUPT_FILE"); break;
225 case EDJE_LOAD_ERROR_UNKNOWN_FORMAT: _err_msg = strdup("ERR_UNKNOWN_FORMAT"); break;
226 case EDJE_LOAD_ERROR_INCOMPATIBLE_FILE: _err_msg = strdup("ERR_INCOMPATIBLE_FILE"); break;
227 case EDJE_LOAD_ERROR_UNKNOWN_COLLECTION: _err_msg = strdup("ERR_UNKNOWN_COLLECTION"); break;
228 case EDJE_LOAD_ERROR_RECURSIVE_REFERENCE: _err_msg = strdup("ERR_RECURSIVE_REFERENCE"); break;
229 default: _err_msg = strdup("ERR_UNKNOWN_ERROR"); break;
234 if (res) _err_msg = strdup("SUCCESS");
235 fprintf(stderr, "[E17-comp] %s win:0x%08x o:%p\n", _err_msg, win, o);
236 ELBF(ELBT_COMP, 0, win, "%15.15s|o:%p %s", "EDC", o, _err_msg);
243 e_mod_comp_debug_prop_handle(Ecore_X_Event_Window_Property *ev)
245 Eina_Bool res = EINA_FALSE;
246 E_Mod_Comp_Log_Info info = {LT_NOTHING, {0,}};
247 unsigned char* data = NULL;
250 E_CHECK_RETURN(ev, 0);
251 E_CHECK_RETURN(ev->win, 0);
253 ret = ecore_x_window_prop_property_get
254 (ev->win, ATOM_CM_LOG, ECORE_X_ATOM_CARDINAL,
256 E_CHECK_GOTO((ret != -1), cleanup);
257 E_CHECK_GOTO(((ret > 0) && (data)), cleanup);
259 memcpy(&info, data, sizeof(E_Mod_Comp_Log_Info));
262 fprintf(stdout, "[COMP] logtupe:0x%08x\n", logtype);
264 if (logtype == LT_CREATE)
266 e_mod_comp_debug_info_dump(EINA_FALSE, NULL);
268 else if (logtype == LT_CONFIGURE)
270 int enable = e_configure_registry_exists("appearance/comp");
273 E_Comp *c = e_mod_comp_util_get();
274 E_CHECK_RETURN(c, 0);
276 e_configure_registry_call("appearance/comp",
277 e_container_current_get(c->man),
281 else if (logtype == LT_DRAW)
283 E_Comp *c = e_mod_comp_util_get();
284 E_Comp_Canvas *canvas;
286 char msg[4096], buf[2048];
288 snprintf(msg, sizeof(msg), "This is a test dialog for debugging purpose.");
290 EINA_LIST_FOREACH(c->canvases, l, canvas)
292 snprintf(buf, sizeof(buf),
294 "Zone[%d] %d,%d %dx%d<br>"
295 "%s 0x%x F:%d(%d) A:%d(%d)",
301 (canvas->nocomp.mode == E_NOCOMP_MODE_RUN) ? "No composite" : "Composite",
302 e_mod_comp_util_client_xid_get(canvas->nocomp.cw),
303 canvas->nocomp.force_composite,
304 canvas->nocomp.comp_ref,
305 canvas->animation.run,
306 canvas->animation.num);
310 e_util_dialog_internal("Enlightenment Rendering Mode", msg);
313 if ((logtype == LT_DUMP) &&
314 (strlen(info.file) > 0))
316 e_mod_comp_debug_info_dump(EINA_TRUE, info.file);
317 ecore_x_client_message32_send
318 (ev->win, ATOM_CM_LOG_DUMP_DONE,
319 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
326 if (data) E_FREE(data);
330 #if COMP_DEBUG_PIXMAP
331 # ifdef ecore_x_composite_name_window_pixmap_get
332 # undef ecore_x_composite_name_window_pixmap_get
334 EINTERN Ecore_X_Pixmap
335 e_mod_comp_debug_name_window_pixmap_get(Ecore_X_Window w,
339 Ecore_X_Pixmap p = 0;
340 Ecore_X_Window win = 0;
343 p = ecore_x_composite_name_window_pixmap_get(w);
344 bd = e_border_find_by_window(w);
345 if (bd) win = bd->client.win;
347 "[COMP] %30.30s|%04d 0x%08x NEW PIXMAP 0x%x\n",
351 #endif /* COMP_DEBUG_PIXMAP */