feat: minor frame timing improvments
This commit is contained in:
parent
259b6c015d
commit
2faa5c6b9b
1 changed files with 16 additions and 15 deletions
|
@ -52,7 +52,7 @@ sigwinch_signal: ?tp.signal = null,
|
||||||
no_sleep: bool = false,
|
no_sleep: bool = false,
|
||||||
final_exit: []const u8 = "normal",
|
final_exit: []const u8 = "normal",
|
||||||
|
|
||||||
const idle_frames = 1;
|
const idle_frames = 0;
|
||||||
|
|
||||||
const init_delay = 1; // ms
|
const init_delay = 1; // ms
|
||||||
|
|
||||||
|
@ -235,29 +235,19 @@ fn receive_safe(self: *Self, from: tp.pid_ref, m: tp.message) tp.result {
|
||||||
|
|
||||||
if (try m.match(.{"render"})) {
|
if (try m.match(.{"render"})) {
|
||||||
if (!self.frame_clock_running)
|
if (!self.frame_clock_running)
|
||||||
self.render(std.time.microTimestamp());
|
self.render();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var counter: usize = undefined;
|
var counter: usize = undefined;
|
||||||
if (try m.match(.{ "tick", tp.extract(&counter) })) {
|
if (try m.match(.{ "tick", tp.extract(&counter) })) {
|
||||||
tracy.frameMark();
|
self.render();
|
||||||
const current_time = std.time.microTimestamp();
|
|
||||||
if (current_time < self.frame_last_time) { // clock moved backwards
|
|
||||||
self.frame_last_time = current_time;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const time_delta = current_time - self.frame_last_time;
|
|
||||||
if (time_delta >= self.frame_time * 2 / 3) {
|
|
||||||
self.frame_last_time = current_time;
|
|
||||||
self.render(current_time);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (try m.match(.{"init"})) {
|
if (try m.match(.{"init"})) {
|
||||||
try self.init_delayed();
|
try self.init_delayed();
|
||||||
self.render(std.time.microTimestamp());
|
self.render();
|
||||||
if (self.init_timer) |*timer| {
|
if (self.init_timer) |*timer| {
|
||||||
timer.deinit();
|
timer.deinit();
|
||||||
self.init_timer = null;
|
self.init_timer = null;
|
||||||
|
@ -297,7 +287,17 @@ fn receive_safe(self: *Self, from: tp.pid_ref, m: tp.message) tp.result {
|
||||||
return tp.unexpected(m);
|
return tp.unexpected(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render(self: *Self, current_time: i64) void {
|
fn render(self: *Self) void {
|
||||||
|
const current_time = std.time.microTimestamp();
|
||||||
|
if (current_time < self.frame_last_time) { // clock moved backwards
|
||||||
|
self.frame_last_time = current_time;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const time_delta = current_time - self.frame_last_time;
|
||||||
|
if (!(time_delta >= self.frame_time * 2 / 3)) {
|
||||||
|
if (self.frame_clock_running)
|
||||||
|
return;
|
||||||
|
}
|
||||||
self.frame_last_time = current_time;
|
self.frame_last_time = current_time;
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -317,6 +317,7 @@ fn render(self: *Self, current_time: i64) void {
|
||||||
const frame = tracy.initZone(@src(), .{ .name = renderer.log_name ++ " render" });
|
const frame = tracy.initZone(@src(), .{ .name = renderer.log_name ++ " render" });
|
||||||
defer frame.deinit();
|
defer frame.deinit();
|
||||||
self.rdr.render() catch |e| self.logger.err("render", e);
|
self.rdr.render() catch |e| self.logger.err("render", e);
|
||||||
|
tracy.frameMark();
|
||||||
}
|
}
|
||||||
|
|
||||||
self.idle_frame_count = if (self.unrendered_input_events_count > 0)
|
self.idle_frame_count = if (self.unrendered_input_events_count > 0)
|
||||||
|
|
Loading…
Add table
Reference in a new issue