)]}'
{"id": 5110962817073152, "name": "Container Timing", "summary": "The Container Timing API enables monitoring when annotated sections of the DOM are displayed on screen and have finished their initial paint. A developer will have the ability to mark subsections of the DOM with the containertiming attribute (similar to elementtiming for the Element Timing API) and receive performance entries when that section has been painted for the first time. This API will allow developers to measure the timing of various components in their pages.", "markdown_fields": [], "blink_components": ["Blink>PerformanceAPIs"], "star_count": 90, "search_tags": ["performance", "container", "timing"], "created": {"by": "jwilliams720@bloomberg.net", "when": "2024-10-30 14:27:12.642033"}, "updated": {"by": "jwilliams720@bloomberg.net", "when": "2026-03-27 12:50:43.000005"}, "category": "Performance", "category_int": 13, "feature_notes": null, "web_feature": null, "is_official_web_feature": null, "webdx_usecounter_enum": null, "enterprise_feature_categories": [], "enterprise_product_category": 0, "is_releasenotes_content_reviewed": false, "is_releasenotes_publish_ready": false, "stages": [{"id": 5177738384900096, "created": "2024-10-30 14:27:13.112753", "feature_id": 5110962817073152, "stage_type": 110, "display_name": null, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": null, "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 5079517583114240, "created": "2024-10-30 14:27:13.188339", "feature_id": 5110962817073152, "stage_type": 120, "display_name": null, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": "https://groups.google.com/a/chromium.org/d/msgid/blink-dev/672cffcd.2b0a0220.d9f4a.0540.GAE%40google.com", "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 5527954782945280, "created": "2024-10-30 14:27:13.389543", "feature_id": 5110962817073152, "stage_type": 130, "display_name": null, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": null, "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": 145, "android_first": 145, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 5151570122244096, "created": "2024-10-30 14:27:13.451178", "feature_id": 5110962817073152, "stage_type": 140, "display_name": null, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": null, "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 5201488278978560, "created": "2024-10-30 14:27:13.523400", "feature_id": 5110962817073152, "stage_type": 150, "display_name": "Container Timing", "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": "https://groups.google.com/a/chromium.org/d/msgid/blink-dev/69ba8919.050a0220.1bf526.0067.GAE%40google.com", "announcement_url": null, "experiment_goals": "During this Origin Trial, we are primarily looking to gain insight into:\n\n## The attribute-based instrumentation model\n- Usage patterns of `containertiming`\n- Frequency and purpose of `containertiming-ignore`\n- Number of annotated elements per page\n\n## PerformanceObserver integration\n- Adoption of PerformanceObserver with container-timing\n- Whether developers batch-observe or use targeted observation\n- Whether buffering behavior meets developer expectations\n\n## Entry shape and timing semantics\n- Whether the exposed timing values align with developer expectations relative to LCP and Element Timing\n- Whether additional metadata fields are needed\n- Whether any fields appear unused or redundant\n\n## Edge cases and ergonomics\n- Nested containers\n- Dynamically inserted elements\n- Interaction with visibility changes and layout shifts", "experiment_risks": "No storage / state risk: Container Timing does not introduce any new storage surface, persistent state, or origin-scoped quota/permissions. Ending the trial cannot cause sites to \u201close access\u201d to any data they previously stored or relied on for functionality.\n\nBehavioral impact is limited to observability: Sites that rely on Container Timing for analytics/monitoring will stop receiving PerformanceContainerTiming entries once the feature is no longer available. This may reduce visibility into container-level performance but does not affect page rendering, resource loading, or correctness.\n\nDegradation mode is predictable and detectable: Sites can feature-detect support (e.g., checking supported entry types / observing errors when registering the observer) and fall back to existing signals like LCP / Element Timing / custom userland timing. We will document recommended feature detection and fallback patterns for trial participants.\n\nNo security/privacy regressions beyond standard Perf Timeline considerations: The API is an extension of the Performance Timeline and is intended to follow existing constraints (origin isolation, clamping, and exposure rules consistent with other performance entries). Trial end does not create additional risk; it only removes the entries.", "origin_trial_id": "3312960475884421121", "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": "ContainerTiming", "ot_description": "The Container Timing API enables monitoring when annotated sections of the DOM are displayed on screen and have finished their initial paint. A developer will have the ability to mark subsections of the DOM with the \"containertiming\" attribute (similar to \"elementtiming\" for the Element Timing API) and receive performance entries when that section has been painted for the first time. This API will allow developers to measure the timing of various components in their pages.", "ot_display_name": "Container Timing", "ot_documentation_url": "https://github.com/WICG/container-timing/blob/main/ORIGIN_TRIAL.md", "ot_emails": ["jwilliams720@bloomberg.net", "jdapena@igalia.com"], "ot_feedback_submission_url": "https://github.com/WICG/container-timing/issues", "ot_has_third_party_support": true, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": "shaseley@google.com", "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": 5744, "ot_webfeature_use_counter": "kContainerTimingObserverRegistered", "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": 148, "android_first": 148, "ios_first": null, "webview_first": 148, "desktop_last": 153, "android_last": 153, "ios_last": null, "webview_last": 153, "ot_setup_status": 6}, {"id": 5170845432152064, "created": "2024-10-30 14:27:13.794971", "feature_id": 5110962817073152, "stage_type": 160, "display_name": null, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": null, "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}], "accurate_as_of": "2024-10-30 14:27:12.641704", "creator_email": "jwilliams720@bloomberg.net", "updater_email": "jwilliams720@bloomberg.net", "owner_emails": ["jwilliams720@bloomberg.net"], "editor_emails": ["shaseley@chromium.org"], "cc_emails": [], "spec_mentor_emails": ["shaseley@chromium.org"], "unlisted": false, "deleted": false, "editors": ["shaseley@chromium.org"], "cc_recipients": [], "spec_mentors": ["shaseley@chromium.org"], "creator": "jwilliams720@bloomberg.net", "feature_type": "New or changed feature", "feature_type_int": 0, "intent_stage": "None", "intent_stage_int": 0, "active_stage_id": 5201488278978560, "bug_url": "https://issues.chromium.org/issues/382422286", "launch_bug_url": null, "new_crbug_url": "https://bugs.chromium.org/p/chromium/issues/entry?components=Blink>PerformanceAPIs&blocking=382422286&cc=jwilliams720@bloomberg.net", "screenshot_links": [], "first_enterprise_notification_milestone": null, "enterprise_impact": 1, "breaking_change": false, "confidential": false, "shipping_year": 2026, "flag_name": "enable-experimental-web-platform-features", "finch_name": "ContainerTiming", "non_finch_justification": null, "ongoing_constraints": "None", "rollout_plan": 0, "rollout_plan_displayname": "Will ship enabled for all users", "motivation": "As developers increasingly organize their applications into components there's becoming a demand to measure performance on subsections of an application or a web page. For instance, a developer may want to know when a subsection of the DOM has been painted, like a table or a widget, so they can mark the paint time and submit it to their analytics.\n\nCurrent Web APIs don't help with this. Element Timing is limited due to what it can mark so it can't be used for whole sections. \"Largest Contentful Paint\" has the same limitations due to being built on top of element timing (and thus can't select components or composite structures like a table)\n\nDevelopers would like to communicate the performance of their own blocks of content in a way that their users or organisation would understand, for example \"time to first tweet\" for timing when the first tweet component is shown on screen.", "devtrial_instructions": "https://github.com/WICG/container-timing?tab=readme-ov-file#chrome-canary-and-chrome-beta", "activation_risks": "The feature is consistent with other Performance APIs that work on the Performance Timeline. This feature can't be polyfilled properly, there has been an attempt (see Explainer) but that has high resource usage. \n\nToday all the documentation lives in the explainer, we will hope to promote this more once it is exposed to the wider development community.", "measurement": "https://chromestatus.com/metrics/feature/popularity#V8Element_ContainerTimingIgnore_AttributeGetter\n\nhttps://chromestatus.com/metrics/feature/popularity#V8Element_ContainerTiming_AttributeGetter\n\nhttps://chromestatus.com/metrics/feature/popularity#ContainerTimingObserverRegistered", "availability_expectation": null, "adoption_expectation": null, "adoption_plan": null, "initial_public_proposal_url": "https://github.com/WICG/container-timing", "explainer_links": ["https://github.com/WICG/container-timing"], "requires_embedder_support": false, "spec_link": "https://WICG.github.io/container-timing", "api_spec": false, "automation_spec": false, "interop_compat_risks": "", "all_platforms": true, "all_platforms_descr": "This feature is implemented in Blink and isn't subject to any platform specific APIs", "non_oss_deps": null, "anticipated_spec_changes": null, "security_risks": "https://github.com/WICG/container-timing/?tab=readme-ov-file#security-and-privacy", "ergonomics_risks": "Performance overhead only happens when enabling, any overhead is low because we piggy back on DOM-traversals which are already happening.", "wpt": true, "wpt_descr": "https://wpt.fyi/results/container-timing/tentative?label=experimental&label=master&aligned", "webview_risks": null, "devrel_emails": ["devrel-chromestatus-all@google.com"], "debuggability": "Container Timing entries can be printed to the developer console from the PerformanceObserver. The attributes are also observable in the Elements Panel. This feature has basic support from DevTools.", "doc_links": ["https://github.com/WICG/container-timing"], "sample_links": ["https://github.com/WICG/container-timing/tree/main/examples/adding-content", "https://github.com/WICG/container-timing/tree/main/examples/shadow-dom", "https://github.com/WICG/container-timing/tree/main/examples/skeleton-layout", "https://github.com/WICG/container-timing/tree/main/examples/svg", "https://github.com/WICG/container-timing/tree/main/examples/table"], "prefixed": null, "tags": ["performance", "container", "timing"], "tag_review": "https://github.com/w3ctag/design-reviews/issues/1034", "tag_review_status": "Issues addressed", "tag_review_status_int": 3, "security_review_status": "Pending", "security_review_status_int": 1, "privacy_review_status": "Pending", "privacy_review_status_int": 1, "security_continuity_id": null, "security_launch_issue_id": null, "updated_display": null, "resources": {"samples": ["https://github.com/WICG/container-timing/tree/main/examples/adding-content", "https://github.com/WICG/container-timing/tree/main/examples/shadow-dom", "https://github.com/WICG/container-timing/tree/main/examples/skeleton-layout", "https://github.com/WICG/container-timing/tree/main/examples/svg", "https://github.com/WICG/container-timing/tree/main/examples/table"], "docs": ["https://github.com/WICG/container-timing"]}, "comments": null, "ff_views": 3, "safari_views": 8, "web_dev_views": 4, "browsers": {"chrome": {"bug": "https://issues.chromium.org/issues/382422286", "blink_components": ["Blink>PerformanceAPIs"], "devrel": ["devrel-chromestatus-all@google.com"], "owners": ["jwilliams720@bloomberg.net"], "origintrial": false, "prefixed": null, "flag": false, "status": {"text": "In development", "val": 3, "milestone_str": "In development"}, "announced": false, "desktop": null, "android": null, "webview": null, "ios": null}, "ff": {"view": {"url": "https://github.com/mozilla/standards-positions/issues/1155", "notes": "Firefox are positive and are working on an implementation: https://phabricator.services.mozilla.com/D279373", "text": "Positive", "val": 3}}, "safari": {"view": {"url": "https://github.com/WebKit/standards-positions/issues/442", "notes": "", "text": "Neutral", "val": 8}}, "webdev": {"view": {"text": "No signals", "val": 4, "url": null, "notes": null}}, "other": {"view": {"text": null, "val": null, "url": null, "notes": null}}}, "standards": {"spec": "https://WICG.github.io/container-timing", "maturity": {"text": "Specification being incubated in a Community Group", "short_text": "Incubation", "val": 3}}, "is_released": false, "is_enterprise_feature": false, "experiment_timeline": null, "ai_test_eval_report": null, "ai_test_eval_run_status": null, "ai_test_eval_status_timestamp": null}