Le principe
Chaque scène montée parWrappyView remonte un événement scene_perf. Il part 5 s après la
première frame, pour que l’ouverture qui s’anime et les textures peintes après l’affichage soient
comptées. Il part plus tôt si la page passe en arrière-plan (outcome: hidden, envoyé en
sendBeacon), ou au bout de 30 s sans première frame (outcome: timeout).
La mesure vit dans @wrappy/core (lib/scene-perf.ts), sans PostHog. L’hôte l’écoute par
onScenePerf et capture l’événement : apps/open, sur /$token (host: token) et /preview
(host: preview, la démo de la landing quand embedded est vrai). Le studio ne l’écoute pas.
Les jalons
Les instantst_*_ms partent du début de la navigation de la page qui monte la scène.
Les durées qui en découlent :
chunk_ms (vue → canvas), assets_ms (canvas → assets),
view_to_frame_ms (vue → première frame), et first_frame_ms, le travail de la première frame
seule : la compilation des shaders et l’envoi des textures.
Le main thread et les frames
blocking_ms,long_tasksetlongest_task_mscomptent les tâches longues depuis le début de la navigation. La source estlong-animation-framesur Chromium 123+,longtasksinon (long_tasks_api). Safari et Firefox n’en observent pas : ces champs valentnull, pas 0.blocking_after_frame_msne garde que le blocage qui suit la première frame : le travail que la scène repousse après son affichage.frames,frame_p50_ms,frame_p95_ms,frame_max_msetslow_frames(au-delà de 33 ms) portent sur le temps CPU des frames rendues après les assets. En rendu à la demande, une scène au repos ne rend rien : peu de frames n’est pas un problème.
Le GPU et l’appareil
backend(webgpuouwebgl, celui qui rend vraiment),webgpu_compat, etgpu: le nom de l’adaptateur WebGPU ou le renderer WebGL démasqué.nullquand le navigateur le tait.- La charge de la première frame :
draw_calls,triangles,programs,textures,gpu_memory_mb. - L’appareil :
mobile,device_memory_gb(plafonné à 8 par Chromium),cpu_cores,dpr,viewport_width,viewport_height,effective_type,save_data. Navigateur, OS et modèle viennent des propriétés PostHog ($browser,$os,$device_type).
Lire les données
Le p75 de la première frame par scène et par GPU, sur mobile :countIf(properties.t_first_frame_ms IS NULL) / count(), par scene_id et device_memory_gb.