Add FPS profiling (set DEBUG_FPS when running tint2)

This commit is contained in:
o9000
2016-10-04 22:43:18 +02:00
parent c5845a7f70
commit 0f3f6eebd8

View File

@@ -79,6 +79,8 @@ XSettingsClient *xsettings_client = NULL;
timeout *detect_compositor_timer = NULL;
int detect_compositor_timer_counter = 0;
gboolean debug_fps = FALSE;
void detect_compositor(void *arg)
{
if (server.composite_manager) {
@@ -376,6 +378,7 @@ void init(int argc, char *argv[])
debug_geometry = getenv("DEBUG_GEOMETRY") != NULL;
debug_gradients = getenv("DEBUG_GRADIENTS") != NULL;
debug_fps = getenv("DEBUG_FPS") != NULL;
}
static int sigchild_pipe_valid = FALSE;
@@ -1560,8 +1563,14 @@ start:
int ufd = uevent_init();
int hidden_dnd = 0;
double ts_event_read = 0;
double ts_event_processed = 0;
double ts_render_finished = 0;
double ts_flush_finished = 0;
while (1) {
if (panel_refresh) {
if (debug_fps)
ts_event_processed = get_time();
if (systray_profile)
fprintf(stderr,
BLUE "[%f] %s:%d redrawing panel" RESET "\n",
@@ -1635,7 +1644,23 @@ start:
0);
}
}
if (debug_fps)
ts_render_finished = get_time();
XFlush(server.display);
if (debug_fps) {
ts_flush_finished = get_time();
double period = ts_flush_finished - ts_event_read;
double fps = 1.0 / period;
double proc_ratio = (ts_event_processed - ts_event_read) / period;
double render_ratio = (ts_render_finished - ts_event_processed) / period;
double flush_ratio = (ts_flush_finished - ts_render_finished) / period;
fprintf(stderr,
BLUE "fps = %.1f : processing %.1f%%, rendering %.1f%%, flushing %.1f%%" RESET "\n",
fps,
proc_ratio * 100,
render_ratio * 100,
flush_ratio * 100);
}
}
// Create a File Description Set containing x11_fd
@@ -1686,6 +1711,8 @@ start:
if (XPending(server.display) > 0) {
XEvent e;
XNextEvent(server.display, &e);
if (debug_fps)
ts_event_read = get_time();
#if HAVE_SN
if (startup_notifications)
sn_display_process_event(server.sn_display, &e);