Adds WebDX Use Counters for various WebXR APIs [chromium/src : main]

0 views
Skip to first unread message

Brandon Jones (Gerrit)

unread,
Sep 11, 2025, 2:10:52 PM (11 days ago) Sep 11
to Alexander Cooper, Chromium Metrics Reviews, chromium...@chromium.org, asvitkine...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org, bmcquad...@chromium.org, csharris...@chromium.org, feature-v...@chromium.org, kinuko...@chromium.org, loading-rev...@chromium.org, speed-metrics...@chromium.org, speed-metr...@chromium.org
Attention needed from Alexander Cooper

Brandon Jones voted and added 1 comment

Votes added by Brandon Jones

Commit-Queue+1

1 comment

Patchset-level comments
File-level comment, Patchset 1 (Latest):
Brandon Jones . resolved

PTAL! This has been on my TODO list for entirely too long, but I believe this is all that's required to get the feature use counters wired up.

Open in Gerrit

Related details

Attention is currently required from:
  • Alexander Cooper
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: I6eb4220da0923a410bc4c4526f65cc2ed77b4ff3
Gerrit-Change-Number: 6940586
Gerrit-PatchSet: 1
Gerrit-Owner: Brandon Jones <baj...@chromium.org>
Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
Gerrit-Attention: Alexander Cooper <alco...@chromium.org>
Gerrit-Comment-Date: Thu, 11 Sep 2025 18:10:44 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Alexander Cooper (Gerrit)

unread,
Sep 11, 2025, 2:18:55 PM (11 days ago) Sep 11
to Brandon Jones, Chromium LUCI CQ, Chromium Metrics Reviews, chromium...@chromium.org, asvitkine...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org, bmcquad...@chromium.org, csharris...@chromium.org, feature-v...@chromium.org, kinuko...@chromium.org, loading-rev...@chromium.org, speed-metrics...@chromium.org, speed-metr...@chromium.org
Attention needed from Brandon Jones

Alexander Cooper voted and added 2 comments

Votes added by Alexander Cooper

Code-Review+1

2 comments

Patchset-level comments
Alexander Cooper . resolved

LGTM w/one question

File third_party/blink/renderer/modules/xr/xr_system.cc
Line 1620, Patchset 1 (Latest): if (query->mode() == device::mojom::blink::XRSessionMode::kImmersiveAr) {
UseCounter::CountWebDXFeature(
ExecutionContext::From(query->GetScriptState()),
WebDXFeature::kWebxrAr);
}

if (anchors_enabled) {
UseCounter::CountWebDXFeature(
ExecutionContext::From(query->GetScriptState()),
WebDXFeature::kWebxrAnchors);
}

if (hit_test_enabled) {
UseCounter::CountWebDXFeature(
ExecutionContext::From(query->GetScriptState()),
WebDXFeature::kWebxrHitTest);
}
Alexander Cooper . unresolved

Why the split to report these here but the others in ReportRequestSessionResult?

Open in Gerrit

Related details

Attention is currently required from:
  • Brandon Jones
Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement satisfiedCode-Owners
    • requirement satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I6eb4220da0923a410bc4c4526f65cc2ed77b4ff3
    Gerrit-Change-Number: 6940586
    Gerrit-PatchSet: 1
    Gerrit-Owner: Brandon Jones <baj...@chromium.org>
    Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
    Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
    Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
    Gerrit-Attention: Brandon Jones <baj...@chromium.org>
    Gerrit-Comment-Date: Thu, 11 Sep 2025 18:18:45 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Brandon Jones (Gerrit)

    unread,
    Sep 11, 2025, 2:22:10 PM (11 days ago) Sep 11
    to Alexander Cooper, Chromium LUCI CQ, Chromium Metrics Reviews, chromium...@chromium.org, asvitkine...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org, bmcquad...@chromium.org, csharris...@chromium.org, feature-v...@chromium.org, kinuko...@chromium.org, loading-rev...@chromium.org, speed-metrics...@chromium.org, speed-metr...@chromium.org
    Attention needed from Alexander Cooper

    Brandon Jones added 1 comment

    File third_party/blink/renderer/modules/xr/xr_system.cc
    Line 1620, Patchset 1 (Latest): if (query->mode() == device::mojom::blink::XRSessionMode::kImmersiveAr) {
    UseCounter::CountWebDXFeature(
    ExecutionContext::From(query->GetScriptState()),
    WebDXFeature::kWebxrAr);
    }

    if (anchors_enabled) {
    UseCounter::CountWebDXFeature(
    ExecutionContext::From(query->GetScriptState()),
    WebDXFeature::kWebxrAnchors);
    }

    if (hit_test_enabled) {
    UseCounter::CountWebDXFeature(
    ExecutionContext::From(query->GetScriptState()),
    WebDXFeature::kWebxrHitTest);
    }
    Alexander Cooper . unresolved

    Why the split to report these here but the others in ReportRequestSessionResult?

    Brandon Jones

    Mostly because we were already checking for these features in this function, and it did have a UseCounter recorded in it already. I'm fine moving them all to ReportRequestSessionResult, though.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Alexander Cooper
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement satisfiedCode-Owners
    • requirement satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I6eb4220da0923a410bc4c4526f65cc2ed77b4ff3
    Gerrit-Change-Number: 6940586
    Gerrit-PatchSet: 1
    Gerrit-Owner: Brandon Jones <baj...@chromium.org>
    Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
    Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
    Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
    Gerrit-Attention: Alexander Cooper <alco...@chromium.org>
    Gerrit-Comment-Date: Thu, 11 Sep 2025 18:22:01 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Alexander Cooper <alco...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Alexander Cooper (Gerrit)

    unread,
    Sep 11, 2025, 2:23:39 PM (11 days ago) Sep 11
    to Brandon Jones, Chromium LUCI CQ, Chromium Metrics Reviews, chromium...@chromium.org, asvitkine...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org, bmcquad...@chromium.org, csharris...@chromium.org, feature-v...@chromium.org, kinuko...@chromium.org, loading-rev...@chromium.org, speed-metrics...@chromium.org, speed-metr...@chromium.org
    Attention needed from Brandon Jones

    Alexander Cooper added 1 comment

    File third_party/blink/renderer/modules/xr/xr_system.cc
    Line 1620, Patchset 1 (Latest): if (query->mode() == device::mojom::blink::XRSessionMode::kImmersiveAr) {
    UseCounter::CountWebDXFeature(
    ExecutionContext::From(query->GetScriptState()),
    WebDXFeature::kWebxrAr);
    }

    if (anchors_enabled) {
    UseCounter::CountWebDXFeature(
    ExecutionContext::From(query->GetScriptState()),
    WebDXFeature::kWebxrAnchors);
    }

    if (hit_test_enabled) {
    UseCounter::CountWebDXFeature(
    ExecutionContext::From(query->GetScriptState()),
    WebDXFeature::kWebxrHitTest);
    }
    Alexander Cooper . unresolved

    Why the split to report these here but the others in ReportRequestSessionResult?

    Brandon Jones

    Mostly because we were already checking for these features in this function, and it did have a UseCounter recorded in it already. I'm fine moving them all to ReportRequestSessionResult, though.

    Alexander Cooper

    Either way is fine with me, just didn't know if there was a reason that these features were different.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Brandon Jones
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement satisfiedCode-Owners
    • requirement satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I6eb4220da0923a410bc4c4526f65cc2ed77b4ff3
    Gerrit-Change-Number: 6940586
    Gerrit-PatchSet: 1
    Gerrit-Owner: Brandon Jones <baj...@chromium.org>
    Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
    Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
    Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
    Gerrit-Attention: Brandon Jones <baj...@chromium.org>
    Gerrit-Comment-Date: Thu, 11 Sep 2025 18:23:30 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Brandon Jones <baj...@chromium.org>
    Comment-In-Reply-To: Alexander Cooper <alco...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Brandon Jones (Gerrit)

    unread,
    Sep 11, 2025, 2:42:38 PM (11 days ago) Sep 11
    to Alexander Cooper, Chromium LUCI CQ, Chromium Metrics Reviews, chromium...@chromium.org, asvitkine...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org, bmcquad...@chromium.org, csharris...@chromium.org, feature-v...@chromium.org, kinuko...@chromium.org, loading-rev...@chromium.org, speed-metrics...@chromium.org, speed-metr...@chromium.org

    Brandon Jones voted and added 1 comment

    Votes added by Brandon Jones

    Commit-Queue+2

    1 comment

    File third_party/blink/renderer/modules/xr/xr_system.cc
    Line 1620, Patchset 1: if (query->mode() == device::mojom::blink::XRSessionMode::kImmersiveAr) {

    UseCounter::CountWebDXFeature(
    ExecutionContext::From(query->GetScriptState()),
    WebDXFeature::kWebxrAr);
    }

    if (anchors_enabled) {
    UseCounter::CountWebDXFeature(
    ExecutionContext::From(query->GetScriptState()),
    WebDXFeature::kWebxrAnchors);
    }

    if (hit_test_enabled) {
    UseCounter::CountWebDXFeature(
    ExecutionContext::From(query->GetScriptState()),
    WebDXFeature::kWebxrHitTest);
    }
    Alexander Cooper . resolved

    Why the split to report these here but the others in ReportRequestSessionResult?

    Brandon Jones

    Mostly because we were already checking for these features in this function, and it did have a UseCounter recorded in it already. I'm fine moving them all to ReportRequestSessionResult, though.

    Alexander Cooper

    Either way is fine with me, just didn't know if there was a reason that these features were different.

    Brandon Jones

    Done. Moved them to ReportRequestSessionResult except for the AR session one, which felt appropriate to keep next to the Session use counter.

    Open in Gerrit

    Related details

    Attention set is empty
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement satisfiedCode-Owners
    • requirement satisfiedCode-Review
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I6eb4220da0923a410bc4c4526f65cc2ed77b4ff3
    Gerrit-Change-Number: 6940586
    Gerrit-PatchSet: 2
    Gerrit-Owner: Brandon Jones <baj...@chromium.org>
    Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
    Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
    Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
    Gerrit-Comment-Date: Thu, 11 Sep 2025 18:42:28 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    satisfied_requirement
    open
    diffy

    Chromium LUCI CQ (Gerrit)

    unread,
    Sep 11, 2025, 4:18:12 PM (11 days ago) Sep 11
    to Brandon Jones, Alexander Cooper, Chromium Metrics Reviews, chromium...@chromium.org, asvitkine...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org, bmcquad...@chromium.org, csharris...@chromium.org, feature-v...@chromium.org, kinuko...@chromium.org, loading-rev...@chromium.org, speed-metrics...@chromium.org, speed-metr...@chromium.org

    Chromium LUCI CQ submitted the change with unreviewed changes

    Unreviewed changes

    1 is the latest approved patch-set.
    The change was submitted with unreviewed changes in the following files:

    ```
    The name of the file: third_party/blink/renderer/modules/xr/xr_system.cc
    Insertions: 66, Deletions: 68.

    @@ -590,6 +590,10 @@
    GetFeatureRequestStatus(XRSessionFeature::LIGHT_ESTIMATION, session);
    auto feature_request_camera_access =
    GetFeatureRequestStatus(XRSessionFeature::CAMERA_ACCESS, session);
    + auto feature_request_anchors =
    + GetFeatureRequestStatus(XRSessionFeature::ANCHORS, session);
    + auto feature_request_hit_test =
    + GetFeatureRequestStatus(XRSessionFeature::HIT_TEST, session);

    ukm::builders::XR_WebXR_SessionRequest(ukm_source_id_)
    .SetMode(static_cast<int64_t>(mode_))
    @@ -602,62 +606,68 @@
    .SetFeature_Unbounded(static_cast<int64_t>(feature_request_unbounded))
    .Record(execution_context->UkmRecorder());

    - // If the session was successfully created and DOM overlay was requested,
    - // count this as a use of the DOM overlay feature.
    - if (session && status == SessionRequestStatus::kSuccess &&
    - IsFeatureRequested(feature_request_dom_overlay)) {
    - DVLOG(2) << __func__ << ": DOM overlay was requested, logging a UseCounter";
    - UseCounter::Count(session->GetExecutionContext(),
    - WebFeature::kXRDOMOverlay);
    - }
    + // If the session was successfully created record use counters.
    + if (session && status == SessionRequestStatus::kSuccess) {
    + if (IsFeatureRequested(feature_request_dom_overlay)) {
    + DVLOG(2) << __func__
    + << ": DOM overlay was requested, logging a UseCounter";
    + UseCounter::Count(session->GetExecutionContext(),
    + WebFeature::kXRDOMOverlay);
    + }

    - // If the session was successfully created and depth-sensing was requested,
    - // count this as a use of depth sensing feature.
    - if (session && status == SessionRequestStatus::kSuccess &&
    - IsFeatureRequested(feature_request_depth_sensing)) {
    - DVLOG(2) << __func__
    - << ": depth sensing was requested, logging a UseCounter";
    - UseCounter::Count(session->GetExecutionContext(),
    - WebFeature::kXRDepthSensing);
    - }
    + if (IsFeatureRequested(feature_request_depth_sensing)) {
    + DVLOG(2) << __func__
    + << ": depth sensing was requested, logging a UseCounter";
    + UseCounter::Count(session->GetExecutionContext(),
    + WebFeature::kXRDepthSensing);
    + }

    - if (session && status == SessionRequestStatus::kSuccess &&
    - IsFeatureRequested(feature_request_plane_detection)) {
    - DVLOG(2) << __func__
    - << ": plane detection was requested, logging a UseCounter";
    - UseCounter::Count(session->GetExecutionContext(),
    - WebFeature::kXRPlaneDetection);
    - }
    + if (IsFeatureRequested(feature_request_plane_detection)) {
    + DVLOG(2) << __func__
    + << ": plane detection was requested, logging a UseCounter";
    + UseCounter::Count(session->GetExecutionContext(),
    + WebFeature::kXRPlaneDetection);
    + }

    - if (session && status == SessionRequestStatus::kSuccess &&
    - IsFeatureRequested(feature_request_image_tracking)) {
    - DVLOG(2) << __func__
    - << ": image tracking was requested, logging a UseCounter";
    - UseCounter::Count(session->GetExecutionContext(),
    - WebFeature::kXRImageTracking);
    - }
    + if (IsFeatureRequested(feature_request_image_tracking)) {
    + DVLOG(2) << __func__
    + << ": image tracking was requested, logging a UseCounter";
    + UseCounter::Count(session->GetExecutionContext(),
    + WebFeature::kXRImageTracking);
    + }

    - if (session && status == SessionRequestStatus::kSuccess &&
    - IsFeatureRequested(feature_request_hand_input)) {
    - DVLOG(2) << __func__ << ": hand input was requested, logging a UseCounter";
    - UseCounter::CountWebDXFeature(session->GetExecutionContext(),
    - WebDXFeature::kWebxrHandInput);
    - }
    + if (IsFeatureRequested(feature_request_hand_input)) {
    + DVLOG(2) << __func__
    + << ": hand input was requested, logging a UseCounter";
    + UseCounter::CountWebDXFeature(session->GetExecutionContext(),
    + WebDXFeature::kWebxrHandInput);
    + }

    - if (session && status == SessionRequestStatus::kSuccess &&
    - IsFeatureRequested(feature_request_light_estimation)) {
    - DVLOG(2) << __func__
    - << ": lighting estimation was requested, logging a UseCounter";
    - UseCounter::CountWebDXFeature(session->GetExecutionContext(),
    - WebDXFeature::kWebxrLightingEstimation);
    - }
    + if (IsFeatureRequested(feature_request_light_estimation)) {
    + DVLOG(2) << __func__
    + << ": lighting estimation was requested, logging a UseCounter";
    + UseCounter::CountWebDXFeature(session->GetExecutionContext(),
    + WebDXFeature::kWebxrLightingEstimation);
    + }

    - if (session && status == SessionRequestStatus::kSuccess &&
    - IsFeatureRequested(feature_request_camera_access)) {
    - DVLOG(2) << __func__
    - << ": camera access was requested, logging a UseCounter";
    - UseCounter::CountWebDXFeature(session->GetExecutionContext(),
    - WebDXFeature::kWebxrCamera);
    + if (IsFeatureRequested(feature_request_camera_access)) {
    + DVLOG(2) << __func__
    + << ": camera access was requested, logging a UseCounter";
    + UseCounter::CountWebDXFeature(session->GetExecutionContext(),
    + WebDXFeature::kWebxrCamera);
    + }
    +
    + if (IsFeatureRequested(feature_request_anchors)) {
    + DVLOG(2) << __func__ << ": anchors were requested, logging a UseCounter";
    + UseCounter::CountWebDXFeature(session->GetExecutionContext(),
    + WebDXFeature::kWebxrAnchors);
    + }
    +
    + if (IsFeatureRequested(feature_request_hit_test)) {
    + DVLOG(2) << __func__ << ": hit test was requested, logging a UseCounter";
    + UseCounter::CountWebDXFeature(session->GetExecutionContext(),
    + WebDXFeature::kWebxrHitTest);
    + }
    }

    if (session && metrics_recorder) {
    @@ -1616,29 +1626,17 @@
    // element is already in fullscreen mode, and the session can proceed.
    session->SetDOMOverlayElement(query->DOMOverlayElement());
    }
    -
    - if (query->mode() == device::mojom::blink::XRSessionMode::kImmersiveAr) {
    - UseCounter::CountWebDXFeature(
    - ExecutionContext::From(query->GetScriptState()),
    - WebDXFeature::kWebxrAr);
    - }
    -
    - if (anchors_enabled) {
    - UseCounter::CountWebDXFeature(
    - ExecutionContext::From(query->GetScriptState()),
    - WebDXFeature::kWebxrAnchors);
    - }
    -
    - if (hit_test_enabled) {
    - UseCounter::CountWebDXFeature(
    - ExecutionContext::From(query->GetScriptState()),
    - WebDXFeature::kWebxrHitTest);
    - }
    }

    UseCounter::Count(ExecutionContext::From(query->GetScriptState()),
    WebFeature::kWebXrSessionCreated);

    + if (query->mode() == device::mojom::blink::XRSessionMode::kImmersiveAr) {
    + UseCounter::CountWebDXFeature(
    + ExecutionContext::From(query->GetScriptState()),
    + WebDXFeature::kWebxrAr);
    + }
    +
    query->Resolve(session, std::move(metrics_recorder));
    }

    ```

    Change information

    Commit message:
    Adds WebDX Use Counters for various WebXR APIs

    Starts collecting use counters for the following APIs:
    WebxrAnchors
    WebxrAr
    WebxrCamera
    WebxrDepthSensing
    WebxrDomOverlays
    WebxrHandInput
    WebxrHitTest
    WebxrLightingEstimation
    Change-Id: I6eb4220da0923a410bc4c4526f65cc2ed77b4ff3
    Reviewed-by: Alexander Cooper <alco...@chromium.org>
    Commit-Queue: Brandon Jones <baj...@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#1514484}
    Files:
    • M components/page_load_metrics/browser/observers/use_counter/webdx_feature_maps.cc
    • M third_party/blink/public/mojom/use_counter/metrics/webdx_feature.mojom
    • M third_party/blink/renderer/modules/xr/xr_system.cc
    • M tools/metrics/histograms/metadata/blink/enums.xml
    Change size: M
    Delta: 4 files changed, 93 insertions(+), 30 deletions(-)
    Branch: refs/heads/main
    Submit Requirements:
    • requirement satisfiedCode-Review: +1 by Alexander Cooper
    Open in Gerrit
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: merged
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I6eb4220da0923a410bc4c4526f65cc2ed77b4ff3
    Gerrit-Change-Number: 6940586
    Gerrit-PatchSet: 3
    Gerrit-Owner: Brandon Jones <baj...@chromium.org>
    Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
    Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
    Gerrit-Reviewer: Chromium LUCI CQ <chromiu...@luci-project-accounts.iam.gserviceaccount.com>
    open
    diffy
    satisfied_requirement
    Reply all
    Reply to author
    Forward
    0 new messages