SYSTEM Cited by 1 source
Pinterest BaseSurface¶
Definition¶
BaseSurface is the Android base UI class every Pinterest feature screen ("surface") inherits from. Since 2026 it doubles as the substrate for automatic Visually Complete measurement: the base class walks the Android view tree from the root on each eligible surface, inspects opt-in Perf* marker interfaces, and emits a User Perceived Latency timestamp when all visible image / text / video views report ready (Source: sources/2026-04-08-pinterest-performance-for-everyone).
Role in Pinterest's client performance platform¶
Pre-2026, measuring User Perceived Latency on a new Android surface cost two engineer-weeks — instrument the surface-specific done-state, wire it through to Pinterest's RUM / APM toolsets, validate. This instrumentation tax gated coverage: short-shelf-life surfaces (holiday landing pages) never got instrumented. BaseSurface turns this from an N-surface cost into a one-time platform cost by implementing base-class automatic instrumentation:
- Every surface inherits measurement as a side-effect of inheriting
BaseSurface. - Product engineers tag performance-critical views with
PerfImageView/PerfTextView/PerfVideoViewand the platform emits Visually Complete timestamps automatically. - 60+ Android surfaces are continuously measured in production.
How the base class decides "done"¶
The BaseSurface has access to the Android root ViewGroup for its screen. On the measurement hook (cadence / trigger not disclosed), it runs a view-tree walk:
- Iterate the view tree from
RootViewdownward. - Filter to visible views (using the geometry methods
x(),y(),width(),height()exposed by thePerf*interfaces). - For each visible
PerfImageView/PerfTextView: checkisDrawn(). - For each visible
PerfVideoView: checkisVideoLoadStarted(). - Emit a Visually Complete timestamp when all visible
Perf*views have transitioned to ready.
The composite predicate encodes a per-surface definition of "the user sees the content" without any per-surface code — the product engineer's only job is tagging.
Analogues and cross-platform generalisation¶
The base-class instrumentation pattern is substrate-agnostic. Pinterest notes (without detail): "Following the success on Android, we have also extended the same concept to iOS and web platforms" (Source: sources/2026-04-08-pinterest-performance-for-everyone). The pattern generalises wherever (a) screens have a common ancestor class or framework entrypoint, (b) UI is a tree, (c) elements can expose readiness through a uniform interface. UIKit view controllers + SwiftUI views on iOS and React component trees + IntersectionObserver on web are the obvious analogues.
Caveats¶
- Stub — this page is bounded to
BaseSurface's role as the Visually Complete substrate in the 2026-04-08 post. Its broader responsibilities as Pinterest's Android UI ancestor (fragment lifecycle, analytics, A/B tests, feature flags, navigation) are not in scope. - Measurement cadence not disclosed — how often the view-tree walk runs (every frame? draw-listener? debounced?) and whether the walk itself perturbs measured latency is not specified in the post.
- False-negative and false-positive guardrails not described — a decorative loader tagged as
PerfImageViewcould stop completion forever; a critical hero image left untagged could let completion fire too early. Pinterest doesn't describe lint / code-review rules for correct tagging. - iOS / Web equivalents named but not architected — the cross-platform extension claim is at the concept level; the post doesn't describe how
BaseSurfaceis expressed on those stacks.
Seen in¶
- 2026-04-08 Pinterest — Performance for Everyone (sources/2026-04-08-pinterest-performance-for-everyone) — canonical; names
BaseSurfaceas the UI base class, describes the view-tree walk, reports 60+ surfaces continuously measured.
Related¶
- companies/pinterest
- systems/pinterest-perf-view — the opt-in marker interfaces
BaseSurfaceinspects - systems/pinterest-android-app — deployment target
- concepts/visually-complete — the predicate
BaseSurfacecomputes - concepts/user-perceived-latency — the metric
BaseSurfaceemits - patterns/base-class-automatic-instrumentation — canonical pattern instance
- patterns/view-tree-walk-for-readiness-detection — companion pattern