Performance Model and Tradeoffs
Chromium’s performance vocabulary is the RAIL model, introduced by Paul Lewis and Paul Irish in 2015 and still load-bearing a decade later: a 50ms response budget for user interactions (the full perceived window is 100ms, with 50ms reserved for browser handling), a 16ms animation frame budget at 60fps, an idle budget that keeps deferred work in chunks of 50ms or less, and a load target that reaches interactive state within five seconds on median mobile hardware. The 200ms “jank threshold” repeated in casual technical writing does not appear in the RAIL specification; the correct figure for the response budget is 50ms, and every performance claim downstream of that figure depends on the right number.
The patterns and concepts in this section name the model and the architectural decisions that interact with it. The Rendering Pipeline concept walks Parse → Style → Layout → Paint → Compositing → Raster → Display and names which stages run on the main thread and which do not; it is the vocabulary every subsequent performance pattern references. The Skia Graphite Transition is a Decision entry: the project replaced the Ganesh GPU rasterization backend with Graphite, designed for modern low-overhead graphics APIs (Metal, Vulkan, Direct3D 12), shipping with Chrome 120 and improving MotionMark 1.3 by approximately 15% on Apple Silicon in internal benchmarks. The IPC Integer Type Discipline pattern is the operational rule that every size, count, or offset value crossing a Mojo IPC trust boundary uses an explicitly-sized unsigned integer (uint32_t, uint64_t) — never int or size_t — combined with base/numerics/safe_conversions.h for arithmetic, because an attacker who can send a crafted negative or very large integer can bypass bounds checks. Memory Pressure Response names the platform-specific behaviors (tab discarding, renderer consolidation, GPU cache eviction) that an enterprise browser deployed on constrained hardware will encounter in production. Main Thread Starvation is the antipattern that blocks the main thread for more than 50ms and produces the perceived-unresponsive controls every reader has experienced as a user.
Engineers debugging rendering performance, AI coding agents wiring up Mojo interfaces, and product teams setting performance budgets use this section to align their work with the actual numbers the project measures against.