Hmm, glFinish and then processing was tricky only at first glace.
As i understand this: when you process/render-calls, you only give data to driver(starts rendering at same time as get data, but really blackbox), then call glFinish and now it's time to render rest of data return control, but only when finished everything including buffer swapping. (glFinishTime= ~16ms - processTime)
And if you glFinish at start, you just ensure all old draw calls already rendered and buffer already swapped for elapsed <16ms from last frame, and now can prepare next portion.
And yes, it's me, unfortunate LAB remaker from 2019... Still has a terrible english and watching for your projects.