Introduction
Introduction Statistics Contact Development Disclaimer Help
index.md - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
index.md (3891B)
---
1 Synchronized rendering
2 ======================
3
4 Summary
5 -------
6 Better draw timing to reduce flicker/tearing and improve animation smoot…
7
8 Background
9 ----------
10
11 Terminals have to guess when to draw and refresh the screen. This is bec…
12 the terminal doesn't know whether the application has completed a "batch…
13 output, or whether it's about to have more output right after the refres…
14
15 This means that sometimes the terminal draws before the application has
16 completed an output "batch", and usually this results in flicker or tear…
17
18 In st, the parameters which control the timing are `xfps` and `actionfps…
19 `xfps` determines how long st waits before drawing after interactive X e…
20 (KB/mouse), and `actionfps` determines the draw frequency for output whi…
21 doesn't follow X events - i.e. unattended output - e.g. during animation.
22
23
24 Part 1: auto-sync
25 -----------------
26
27 *NOTE*: this patch (part 1) is not required if you use st-master. It was
28 merged upsream on 2020-05-10 and will be included in the next release.
29
30 This patch replaces the timing algorithm and uses a range instead of fix…
31 timing values. The range gives it the flexibility to choose when to draw…
32 it tries to draw once an output "batch" is complete, i.e. when there's s…
33 idle period where no new output arrived. Typically this eliminates flick…
34 tearing almost completely.
35
36 The range is defined with the new configuration values `minlatency` and
37 `maxlatency` (which replace xfps/actionfps), and you should ensure they'…
38 your `config.h` file.
39
40 This range has equal effect for both X events and unattended output; it …
41 care what the trigger was, and only cares when idle arrives. Interactive…
42 usually arrives very quickly so latency is near `minlatency`, while for
43 animation it might take longer until the application completes its outpu…
44 `maxlatency` is almost never reached, except e.g. during `cat huge.txt` …
45 idle never happens until the whole file was printed.
46
47 Note that the interactive timing (mouse/KB) was fine before this patch, …
48 main improvement is for animation e.g. `mpv --vo=tct`, `cava`, terminal …
49 etc, but interactive timing also benefits from this flexibility.
50
51 Part 2: application-sync
52 ------------------------
53
54 The problem of draw timing is not unique to st. All terminals have to de…
55 with it, and a new suggested standard tries to solve it. It's called
56 "Synchronized Updates" and it allows the application to tell the termina…
57 the output "batch" is complete so that the terminal knows not to draw pa…
58 output - hence "application sync".
59
60 The suggestion - by iTerm2 author - is available here:
61 https://gitlab.com/gnachman/iterm2/-/wikis/synchronized-updates-spec
62
63 This patch adds synchronized-updates/application-sync support in st. It
64 requires the auto-sync patch above installed first. This patch has no ef…
65 except when an application uses the synchronized-update escape sequences.
66
67 Note that currently there are very few terminals or applications which s…
68 it, but one application which does support it is `tmux` since 2020-04-18…
69 this patch nearly all cursor flicker is eliminated in tmux, and tmux det…
70 it automatically via terminfo and enables it when st is installed correc…
71
72
73 Download
74 --------
75 Part 1 is independent, but part 2 needs part 1 first. Both files are git
76 patches and can be applied with either `git am` or with `patch`. Both fi…
77 add values at `config.def.h`, and part 2 also updates `st.info`.
78
79 * Part 1 (merged upstream): [st-autosync-0.8.3.diff](st-autosync-0.8.3.d…
80 * Part 2 (st 0.8.3): [st-appsync-0.8.3.diff](st-appsync-0.8.3.diff)
81 * Part 2 (st master 2020-06-17 or later):
82 [st-appsync-20200618-b27a383.diff](st-appsync-20200618-b27a383.diff)
83
84
85 Author
86 ------
87 * Avi Halachmi (:avih) - [https://github.com/avih](https://github.com/av…
88 Contact email is available inside the patch files.
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.