Tokio Tick Architecture
The backend engine uses smart timing to check for updates and send them to the display. This document explains how that timing works and why itโs efficient.How the Backend Checks for Updates
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ BACKEND UPDATE CHECKING โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ The engine constantly watches for two things: โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 1. NEW DATA 2. TIMER TICK โ โ
โ โ from terminal (every 50ms at 60Hz) โ โ
โ โ โ โ โ โ
โ โ โ โ โ โ
โ โ โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ
โ โ โผ โ โ
โ โ โโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ WHICH HAPPENED? โ โ โ
โ โ โโโโโโโโโโฌโโโโโโโโโ โ โ
โ โ โ โ โ
โ โ โโโโโโโโโโโโโโโผโโโโโโโโโโโโโโ โ โ
โ โ โผ โผ โผ โ โ
โ โ [New data] [Timer tick] [Both] โ โ
โ โ โ โ โ โ โ
โ โ โผ โผ โผ โ โ
โ โ Process it Check timeouts Handle both โ โ
โ โ Try to send โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ This runs continuously, handling whatever happens first โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
The Timer System
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HOW THE TIMER WORKS โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ The engine uses a "timer wheel" - imagine a clock with many hands: โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ Level 1: Milliseconds (64 slots) โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ [1ms][2ms][3ms]...[64ms] โ โ
โ โ Handles: 0-64 millisecond delays โ โ
โ โ โ โ
โ โ Level 2: Seconds (64 slots) โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ [64ms][128ms]...[4 seconds] โ โ
โ โ Handles: 64ms to 4 second delays โ โ
โ โ โ โ
โ โ Level 3-6: Minutes to Days โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ For longer timeouts (confirmation, etc.) โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ Why this matters: โ
โ โโโโโโโโโโโโโโโโโโ โ
โ โข Setting a timer: instant (O(1)) โ
โ โข Checking a timer: instant (O(1)) โ
โ โข Canceling a timer: instant (O(1)) โ
โ โ
โ No matter how many timers, operations stay fast! โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
What Happens Each Tick
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ TICK OPERATIONS โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ Every tick (50ms at 60Hz, 100ms at 30Hz): โ
โ โ
โ Step 1: Check Timeouts Cost: ~10 microseconds โ
โ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โข Is the multi-part operation taking too long? โ
โ โข Is the erase pattern detection expired? โ
โ โข Has the cursor been hidden too long? โ
โ โข Did the display forget to confirm? โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ Step 2: Try to Send Update Cost: varies โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Situation โ What happens โ Cost โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโค โ
โ โ No new data โ Do nothing โ ~5 ฮผs โ โ
โ โ Data, can't send โ Keep waiting โ ~5 ฮผs โ โ
โ โ Data, ready to send โ Build update and send โ ~1-10 ms โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโ โ
โ โ
โ Most ticks are cheap (~15 ฮผs) because usually nothing needs to happen! โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Four Timeout Mechanisms
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ TIMEOUT SAFETY NETS โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ The engine has four timeout mechanisms to prevent getting stuck: โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 1. MULTI-PART OPERATION TIMEOUT โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ When: Program sends "start" signal but never sends "end" โ โ
โ โ Action: After timeout, proceed anyway โ โ
โ โ Prevents: Infinite waiting for broken programs โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 2. ERASE PATTERN TIMEOUT โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ When: Screen erase detected, waiting for redraw โ โ
โ โ Action: After timeout, show current state โ โ
โ โ Prevents: Blank screen if redraw never comes โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 3. CURSOR HIDE TIMEOUT โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ When: Program hides cursor (fast typing mode) โ โ
โ โ Action: After timeout, show cursor again โ โ
โ โ Prevents: Permanently invisible cursor โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 4. CONFIRMATION TIMEOUT โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ When: Display doesn't confirm receiving update โ โ
โ โ Action: After 1 second, send next update anyway โ โ
โ โ Prevents: Complete display freeze โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ All timeouts adjust automatically based on display speed! โ
โ (60Hz = shorter timeouts, 30Hz = longer timeouts) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Tick Frequency Adapts to Display Speed
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ TICK RATE BY DISPLAY SPEED โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ Display Speed Time Per Frame Tick Interval Ticks Per Second โ
โ โโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ
โ 120 Hz 8.3 ms 25 ms 40 ticks/sec โ
โ (ProMotion) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ 60 Hz 16.7 ms 50 ms 20 ticks/sec โ
โ (Standard) โโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ 30 Hz 33.3 ms 100 ms 10 ticks/sec โ
โ (Under load) โโโโโโโโโโ โ
โ โ
โ 20 Hz 50 ms 150 ms 6.7 ticks/sec โ
โ (Heavy load) โโโโโโโ โ
โ โ
โ KEY BENEFIT: โ
โ โโโโโโโโโโโโ โ
โ 60Hz โ 30Hz = 50% fewer ticks = 50% less work for backend โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Frame Duration Calculation
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ "WAIT FOR N FRAMES" - HOW IT WORKS โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ Instead of fixed milliseconds, timeouts use "frames": โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ "Wait for 3 frames" โ โ
โ โ โ โ โ
โ โ โผ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Get current display speed (e.g., 60 Hz) โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ
โ โ โผ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Calculate: 1 second รท 60 = 16.7 ms per frame โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ
โ โ โผ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Result: 3 ร 16.7 ms = 50 ms โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ Examples: โ
โ โโโโโโโโโโ โ
โ @ 60 Hz: 3 frames = 50 ms โ
โ @ 30 Hz: 3 frames = 100 ms โ
โ @ 120 Hz: 3 frames = 25 ms โ
โ โ
โ Same "3 frames" adapts automatically to actual display speed! โ
โ โ
โ Calculation speed: ~4-8 nanoseconds (nearly instant) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Cost Savings When Display Slows Down
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 60 Hz VS 30 Hz COST COMPARISON โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ 60 Hz 30 Hz Savings โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ Ticks per second 20 10 50% โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโ โ
โ โ
โ Tick overhead ~400 ฮผs/sec ~200 ฮผs/sec 50% โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโ โ
โ โ
โ Timer operations 20/sec 10/sec 50% โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโ โ
โ โ
โ Timeout checks 20/sec 10/sec 50% โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ TOTAL BACKEND ~1 ms/sec ~0.5 ms/sec 50% โ
โ CPU USAGE โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโ โ
โ โ
โ When your computer gets busy, Monolex automatically does less work! โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Summary
Timer Wheel
Instant timer operations no matter how many timers are running.
Dual Watching
Watches for both new data and timer ticks, handles whichever comes first.
Frame-Based Timing
Timeouts measured in frames, automatically adapt to display speed.
50% Less Work
When display slows down, backend does half the work automatically.
Related
- Display Timing - How display speed is measured
- Dual-Loop Architecture - Data Loop vs Render Loop
- Tauri IPC - Communication between backend and display
- Buffer Injection - How display updates work