The renderer process now takes each view's chunks on a thread of its own as they come, and draws the newest frame on its main thread: the client no longer waits for the previous frame to be drawn (on a VM, 22 of a frame's 25 ms). The adapter records the client's steps (SceneViewer::step, by replacing its entry in the exported IFrameListener vtable, after checking it), and the frame pacer doesn't ask for a frame that wouldn't end before the next step is due: a late step made the client catch up two at once, which showed as hitches. While the renderer process covers the view, the client's renderer doesn't begin or present frames, which could wait for the display. The engine's stats now include the time in the client renderer's methods. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
399d934a08
commit
065c7e9300
11 files changed
+280
-78
No files matched your search
@@ -93,6 +93,8 @@ private:
|
||||
LARGE_INTEGER frameStart_{}; // when the current frame began
|
||||
double frameSeconds_ = 0; // the stats' window frames' time, beginRendering to endRendering
|
||||
bool windowFrame_ = false; // the current frame is drawn into the window
|
||||
bool innerFrame_ = false; // the current frame is begun in the client's renderer
|
||||
std::int64_t innerTicksAtStats_ = 0; // innerTicks when the stats' 300 frames started
|
||||
int statsLogged_ = 0;
|
||||
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user