I do my ocean wave generation on the side.
It takes by far the longest time up in the rendering pipeline, but it’s ok visually if the ocean updates at a lower rate than the rest of the game.
So the generator performed at 9ms or so so my frametime was around 10 ms. But now that I don’t depend on that being finished any more i can run with 1 ms. Meanwhile the ocean updates at 100 Hz, so it’s basically not noticeable that it updates slower.
So what i do is
copyProcessedVerticesToVertexBuffer() //This must be thread safe, so the thread can not run!
… render stuff including the ocean