gods-eye-view/docs/PERFORMANCE.md

6.2 KiB

Performance baseline

This page records one hardware-rendered Apple M5 comparison captured on 22 August 2026 in Chrome 150 at 1440 x 900. It is not a minimum hardware specification and should not be used to predict performance on untested systems. The original capture artifacts are not included here, so this page records results rather than defining a runnable benchmark.

Test context

The baseline was captured on 22 August 2026 with these conditions:

Setting Value
Renderer Apple M5 Metal through the hardware ANGLE path
Browser Chrome 150 in a fresh isolated profile
Viewport 1440 x 900 at device pixel ratio 1
Focus Page foregrounded for controlled scenes
Scene sample 5 seconds of scripted motion, then 5 seconds at rest
Startup Browser cache disabled; three samples

The capture covered three startup samples, 16 cold layer scenarios with 14 measurements, 23 controlled option and stress scenes, and five hardware-rendered overlay scenes.

Startup

Sample App ready Initial settle Load event Motion / rest Used JS heap
1 784.980 ms 2,035.082 ms 439.5 ms 60 / 60 FPS 102.9 MiB
2 604.849 ms 1,855.836 ms 442.4 ms 60 / 60 FPS 111.6 MiB
3 558.527 ms 1,809.592 ms 438.8 ms 60 / 60 FPS 105.1 MiB
Median 604.849 ms 1,855.836 ms 439.5 ms 60 / 60 FPS 105.1 MiB

The initial-settle measurement is the more useful launch reference because it includes the first visual and data settling window. All three samples reached the display ceiling during both motion and rest.

Cold layer activation

Cold activation was measured separately from warm option switching. Live object counts are included so that future runs can compare source populations before attributing a difference to the client.

Layer Activation Source count Motion / rest Used JS heap
CCTV city 19,608.240 ms 48 60 / 60 FPS 192.7 MiB
Space Missions (report label: Rocket missions) 3,581.066 ms 26 60 / 60 FPS 131.3 MiB
Radio 3,458.709 ms 750 60 / 60 FPS 124.8 MiB
Bikeshare 2,069.498 ms 633 60 / 60 FPS 157.4 MiB
Datacenters 817.693 ms 4,362 59.6 / 60 FPS 328.2 MiB
Flights 667.671 ms 247 60 / 60 FPS 118.4 MiB
Submarine cables 614.727 ms 2,629 60 / 60 FPS 412.0 MiB
Military Flights 557.113 ms 68 60 / 60 FPS 118.4 MiB

CCTV had the largest cold activation cost in this capture. Submarine cables used the most heap, followed by datacenters. Completed single-layer samples generally reached 60 FPS, so activation time and heap separate these cases more clearly than steady-state frame rate.

Aircraft, detection, and Cockpit

Scene Motion / rest
Idle globe 60 / 60 FPS
Flights, 2D 60 / 60 FPS
Flights, 3D proximity 60 / 60 FPS
Flights, all 3D models 60 / 60 FPS
Military Flights, all 3D models 60 / 60 FPS
Detection at 25% 39.3 / 41.1 FPS
Detection at 50% 37.4 / 39.8 FPS
Detection at 100% 34.4 / 35.5 FPS
Cockpit 49.6 / 49.2 FPS

The clean detection scenes processed 8,169 to 8,170 observations. Selected labels rose from 14 at 25% density to 28 at 50% and 56 at 100%. The aircraft rows came from an earlier loaded, foreground-controlled pass because the clean rerun received no live aircraft rows.

Visual styles and combined stress

Scene Motion / rest
Normal 60 / 60 FPS
CRT (report label: Retro) 60 / 60 FPS
NVG (report label: Surveillance) 60 / 60 FPS
FLIR (report label: Thermal) 49 / 60 FPS
Anime 60 / 59.8 FPS
Noir 47 / 56.6 FPS
Snow 42.3 / 45.8 FPS
Combined static 57.6 / 60 FPS
Combined operational 39.9 / 43.1 FPS

The combined static scene rendered 11,575 objects, used 872.2 MiB of JavaScript heap, and issued 48,665 text draws during motion and 54,106 at rest. The combined operational sample contained 3,909 observations and two selected labels, but its live aircraft and traffic rows were empty, so it remains a limited stress case.

Snow, Noir, dense detection, and text-heavy combined layers are the clearest controlled comparison points for later optimization work.

Keyed live sources

NASA FIRMS, AISStream, and TomTom were captured in a separate hardware-rendered pass. The page was visible but was not the focused window, so these frame rates must not be compared directly with the foreground-controlled scenes above.

Source Point-in-time population Activation or coverage Motion / rest
NASA FIRMS 100,430 detections in 3,557 cells 30.0 s activation 32.1 / 55.2 FPS
AISStream 12,000 vessels 6.4 s activation 22.1 / 29.8 FPS
TomTom Traffic 4,222 road dots 70% coverage, 2 decoded tiles 45.0 / 51.7 FPS

These populations change continuously. A future comparison must record the live counts again and match the focus conditions.

Controls for a future capture

Use the same controls before attributing a difference to the application:

  1. Record the exact GPU renderer and reject software-rendered or unavailable GPU strings.
  2. Use a 1440 x 900 viewport at device pixel ratio 1 and keep the page focused.
  3. Measure cache-disabled startup separately from cold layer activation and warm option switching.
  4. Repeat startup three times and compare medians.
  5. Sample each option for 5 seconds in scripted motion and 5 seconds at rest.
  6. Record live object counts before attributing a difference to the client.
  7. Treat a live-source outage as missing coverage, not as evidence of low client rendering cost.

What is not established yet

  • This report does not establish Windows performance.
  • The report does not record machine memory capacity, so it cannot support a minimum-memory recommendation.
  • The report does not cover other GPU renderers or viewport configurations.
  • Military Installations is outside this comparison because it requires close camera context.
  • The keyed pass has no controlled rerun suitable for comparison with the option scenes.

Use this page as a regression baseline for one known hardware and browser configuration, not as a compatibility guarantee.