v2 / vlib / gg / frame_pacing_test.v
52 lines · 45 sloc · 1.73 KB · c54da47a5bde456c92a7b83575c259966bc33f9a
Raw
1// vtest build: !docker-ubuntu-musl // needs GL/gl.h
2module gg
3
4import encoding.base64
5import time
6
7fn test_swap_interval_frame_budget() {
8 assert swap_interval_frame_budget(-1) == time.Duration(0)
9 assert swap_interval_frame_budget(0) == time.Duration(0)
10 assert swap_interval_frame_budget(1) == time.second / 60
11 assert swap_interval_frame_budget(2) == time.second / 30
12 assert swap_interval_frame_budget(3) == time.second / 20
13}
14
15fn test_parse_screenshot_frames_ignores_blank_entries() {
16 assert parse_screenshot_frames('') == []u64{}
17 assert parse_screenshot_frames('1, 2,,4 ') == [u64(1), 2, 4]
18}
19
20fn test_new_gg_recorder_settings_stdout_defaults_to_first_frame() {
21 settings := new_gg_recorder_settings_from_env({
22 'VGG_SCREENSHOT_OUTPUT': 'stdout'
23 }, '/tmp/minimal_demo')
24 assert settings.screenshot_output == .stdout
25 assert settings.screenshot_frames == [u64(1)]
26 assert settings.stop_at_frame == 1
27}
28
29fn test_new_gg_recorder_settings_stdout_uses_last_frame_as_default_stop() {
30 settings := new_gg_recorder_settings_from_env({
31 'VGG_SCREENSHOT_OUTPUT': 'stdout'
32 'VGG_SCREENSHOT_FRAMES': '2, 4'
33 }, '/tmp/minimal_demo')
34 assert settings.screenshot_frames == [u64(2), 4]
35 assert settings.stop_at_frame == 4
36}
37
38fn test_new_gg_recorder_settings_preserves_explicit_stop_frame() {
39 settings := new_gg_recorder_settings_from_env({
40 'VGG_SCREENSHOT_OUTPUT': 'stdout'
41 'VGG_SCREENSHOT_FRAMES': '3'
42 'VGG_STOP_AT_FRAME': '9'
43 }, '/tmp/minimal_demo')
44 assert settings.stop_at_frame == 9
45}
46
47fn test_screenshot_stdout_payload_contains_expected_marker() {
48 png := [u8(0x89), `P`, `N`, `G`]
49 encoded := base64.encode(png)
50 payload := screenshot_stdout_payload(7, png)
51 assert payload == '${gg_record_stdout_prefix} frame=7 format=png encoding=base64 data=${encoded}'
52}
53