Skip to content

Commit

Permalink
Misc #163: Make usage of glFinish() optional
Browse files Browse the repository at this point in the history
Make usage of glFinish() optional to avoid high CPU usage. (#163)
  • Loading branch information
richardgv committed Dec 26, 2013
1 parent 9e05391 commit 3e783f3
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 2 deletions.
3 changes: 3 additions & 0 deletions src/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -513,6 +513,9 @@ typedef struct {
bool dbe;
/// Whether to do VSync aggressively.
bool vsync_aggressive;
/// Whether to use glFinish() instead of glFlush() for (possibly) better
/// VSync yet probably higher CPU usage.
bool vsync_use_glfinish;

// === Shadow ===
/// Enable/disable shadow for specific window types.
Expand Down
12 changes: 10 additions & 2 deletions src/compton.c
Original file line number Diff line number Diff line change
Expand Up @@ -1905,7 +1905,10 @@ paint_all(session_t *ps, XserverRegion region, XserverRegion region_real, win *t
XSync(ps->dpy, False);
#ifdef CONFIG_VSYNC_OPENGL
if (ps->glx_context) {
glFinish();
if (ps->o.vsync_use_glfinish)
glFinish();
else
glFlush();
glXWaitX();
}
#endif
Expand Down Expand Up @@ -1939,7 +1942,10 @@ paint_all(session_t *ps, XserverRegion region, XserverRegion region_real, win *t
#ifdef CONFIG_VSYNC_OPENGL
case BKEND_XR_GLX_HYBRID:
XSync(ps->dpy, False);
glFinish();
if (ps->o.vsync_use_glfinish)
glFinish();
else
glFlush();
glXWaitX();
paint_bind_tex_real(ps, &ps->tgt_buffer,
ps->root_width, ps->root_height, ps->depth,
Expand Down Expand Up @@ -5421,6 +5427,7 @@ get_cfg(session_t *ps, int argc, char *const *argv, bool first_pass) {
{ "unredir-if-possible-exclude", required_argument, NULL, 308 },
{ "unredir-if-possible-delay", required_argument, NULL, 309 },
{ "write-pid-path", required_argument, NULL, 310 },
{ "vsync-use-glfinish", no_argument, NULL, 311 },
// Must terminate with a NULL entry
{ NULL, 0, NULL, 0 },
};
Expand Down Expand Up @@ -5668,6 +5675,7 @@ get_cfg(session_t *ps, int argc, char *const *argv, bool first_pass) {
// --write-pid-path
ps->o.write_pid_path = mstrcpy(optarg);
break;
P_CASEBOOL(311, vsync_use_glfinish);
default:
usage(1);
break;
Expand Down

0 comments on commit 3e783f3

Please sign in to comment.