GLFW + Angle: Xorg has high GPU usage

Hi,
I’m porting esshader from OpenGL ES 3.0 to ANGLE.
Now that I have it working, using intel-gpu-top, I’ve noticed that Xorg, when running the application, uses exactly the same amount of GPU as the rendering itself, topping out at 50% each.
In games like 0AD or OpenArena, this is not the case, there Xorg uses ~10% of the GPU.

Is this expected?
Can it be improved?

Primary monitor is 1080p, secondary is just 900p.
I’m using the default angle renderer, which should be desktop openGL on linux.
My GPU supports OpenGL 4.6 (Core Profile), Mesa 23.0.4.

Try enabling vsync - glfwSetSwapInterval(1). Without vsync the CPU will submit draw calls without waiting if GPU can display them all or not (meaning you’ll have fps larger than monitor Hz). But with vsync, CPU in simple applications will be mostly idle waiting on monitor refresh.

It really was “too high fps”.
The default shader renders at 2k+ fps, but a more complex that will do ~60fps even in small window doesn’t cause xorg to consume much CPU.
I implemented this simple fps counter:

struct fps_counter_memory {
	int frame_count;
	float time_last_print;
	float time_interval;
};

void fps_counter_set_interval(struct fps_counter_memory* memory, float interval) {
	memory->time_last_print = glfwGetTime();
	memory->time_interval = interval;
}

void fps_counter(struct fps_counter_memory* memory) {
	float time_now = glfwGetTime();
	memory->frame_count++;
	if (time_now - memory->time_last_print >= memory->time_interval) {
		float fps = memory->frame_count / (time_now - memory->time_last_print);
		printf("####i	%f frames per second\n", fps);
		memory->frame_count = 0;
		memory->time_last_print = time_now;
	}
}

It’s quite revealing to actually see the fps.
I didn’t expect the iGPU to push so many fps, leaving almost 100% to the renderer.
Case closed, thank you very much again @mmozeiko