On 15.01.2021 03:06, Laurent Bourgès wrote:
Hi Clemens,

It reminds me our discussion few years ago, when I experimented opengl on linux 
and tuned the OGLRenderQueue for the Marlin renderer, see:
- 
https://github.com/bourgesl/marlin-renderer/blob/jdk/src/main/java/sun/java2d/pipe/RenderQueue.java
 
<https://github.com/bourgesl/marlin-renderer/blob/jdk/src/main/java/sun/java2d/pipe/RenderQueue.java>
- 
https://github.com/bourgesl/marlin-renderer/blob/jdk/src/main/java/sun/java2d/opengl/OGLRenderQueue.java
 
<https://github.com/bourgesl/marlin-renderer/blob/jdk/src/main/java/sun/java2d/opengl/OGLRenderQueue.java>

1. These changes mainly consists in increasing internal queue buffer from 32K 
to 1 Mb (based on my own performance tests).
Ideally an heuristic (data volume per second) could help estimating the 
appropriate queue capacity needed to automatically optimize the producer 
writing / consumer reading speed.

The problem with increasing the buffer is that it can cause unexpected spikes during drawing 
-> Most of the draw operations will work faster because all of them just put the 
"draw operation" to the buffer and the flush will occur less often, but the flush 
operation itself will be slower. Imagine a situation when the user draws something on the 
screen while the 1 Mb buffer is full.
Also note that executing OGL commands in native on the OGLRenderQueue does not 
mean that the picture is rendered on the screen, it could be possible that the 
picture will appeared at the end of the buffer when will call glFlush/glFinish, 
so the lag could occurred when we flush 1Mb vs 32k.


--
Best regards, Sergey.

Reply via email to