This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new c5eb6bdde4 Fix BrowserWebVitalsPerfData `clsTime` to `cls` and make it 
double type. (#13597)
c5eb6bdde4 is described below

commit c5eb6bdde4205a7474361598a5402d1b6efa60f7
Author: Wan Kai <[email protected]>
AuthorDate: Wed Dec 3 16:43:02 2025 +0800

    Fix BrowserWebVitalsPerfData `clsTime` to `cls` and make it double type. 
(#13597)
---
 apm-protocol/apm-network/src/main/proto            |  2 +-
 docs/en/api/browser-protocol.md                    |  2 +-
 docs/en/changes/changes.md                         |  1 +
 .../browser/source/BrowserAppWebVitalsPerf.java    |  2 +-
 .../BrowserWebVitalsPerfDataDecorator.java         |  4 +-
 .../BrowserWebVitalsPerfDataAnalysisListener.java  |  4 +-
 .../src/main/resources/oal/browser.oal             |  2 +-
 .../browser/browser-page.json                      |  4 +-
 test/e2e-v2/cases/browser/browser-cases.yaml       |  6 +-
 .../e2e-v2/cases/browser/docker/Dockerfile.test-ui |  1 +
 test/e2e-v2/cases/browser/expected/dependency.yml  | 10 +--
 .../expected/metrics-has-value-percentile.yml      | 77 +++++-----------------
 .../cases/browser/expected/metrics-has-value.yml   |  2 +-
 .../e2e-v2/cases/browser/expected/trace-detail.yml |  2 +-
 .../cases/browser/expected/trace-v2-detail.yml     |  2 +-
 test/e2e-v2/script/env                             |  2 +-
 16 files changed, 44 insertions(+), 79 deletions(-)

diff --git a/apm-protocol/apm-network/src/main/proto 
b/apm-protocol/apm-network/src/main/proto
index 055d64b104..050b6eb294 160000
--- a/apm-protocol/apm-network/src/main/proto
+++ b/apm-protocol/apm-network/src/main/proto
@@ -1 +1 @@
-Subproject commit 055d64b104b5d84e15e27b74f5cbe712e7f9b0df
+Subproject commit 050b6eb2941e197e9aed118263f2fa23d44265f8
diff --git a/docs/en/api/browser-protocol.md b/docs/en/api/browser-protocol.md
index 3fb3d71e7f..4f7f515c28 100644
--- a/docs/en/api/browser-protocol.md
+++ b/docs/en/api/browser-protocol.md
@@ -55,7 +55,7 @@ Input:
   "pagePath": "/index.html",
   "fmpTime": 10, // Deprecated since skywalking-client-js 1.0. This is no 
longer recommended. Please use the `useWebVitals` instead.
   /* NOTE, Safari does not support all core web vitals, and Firefox does not 
support `CLS`. */
-  "clsTime": 10,
+  "cls": 0.1,
   "lcpTime": 10,
 }
 ```
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index f4b4ae9ba5..b2ef569462 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -6,6 +6,7 @@
 
 * KubernetesCoordinator: make self instance return real pod IP address instead 
of `127.0.0.1`.
 * Enhance the alarm kernel with recovered status notification capability
+* Fix BrowserWebVitalsPerfData `clsTime` to `cls` and make it double type.
 
 #### UI
 * Fix the missing icon in new native trace view.
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/browser/source/BrowserAppWebVitalsPerf.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/browser/source/BrowserAppWebVitalsPerf.java
index c7df9271ad..874e163fae 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/browser/source/BrowserAppWebVitalsPerf.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/browser/source/BrowserAppWebVitalsPerf.java
@@ -50,7 +50,7 @@ public class BrowserAppWebVitalsPerf extends Source {
     private String serviceName;
     private String path;
     private int fmpTime;
-    private int clsTime;
+    private int cls;
     private int lcpTime;
 
     @Override
diff --git 
a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/decorators/BrowserWebVitalsPerfDataDecorator.java
 
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/decorators/BrowserWebVitalsPerfDataDecorator.java
index 7d4ede1f23..33712fb199 100644
--- 
a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/decorators/BrowserWebVitalsPerfDataDecorator.java
+++ 
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/decorators/BrowserWebVitalsPerfDataDecorator.java
@@ -69,7 +69,7 @@ public class BrowserWebVitalsPerfDataDecorator implements 
BrowserPerfDecorator {
         return builder.getLcpTime();
     }
 
-    public int getClsTime() {
-        return builder.getClsTime();
+    public double getCls() {
+        return builder.getCls();
     }
 }
diff --git 
a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/listener/BrowserWebVitalsPerfDataAnalysisListener.java
 
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/listener/BrowserWebVitalsPerfDataAnalysisListener.java
index db7c6cd19a..f457925fe2 100644
--- 
a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/listener/BrowserWebVitalsPerfDataAnalysisListener.java
+++ 
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/listener/BrowserWebVitalsPerfDataAnalysisListener.java
@@ -49,7 +49,9 @@ public class BrowserWebVitalsPerfDataAnalysisListener 
implements PerfDataAnalysi
         
browserAppWebVitalsPerf.setServiceName(namingControl.formatServiceName(decorator.getService()));
         
browserAppWebVitalsPerf.setPath(namingControl.formatEndpointName(browserAppWebVitalsPerf.getServiceName(),
 decorator.getPagePath()));
         browserAppWebVitalsPerf.setFmpTime(decorator.getFmpTime());
-        browserAppWebVitalsPerf.setClsTime(decorator.getClsTime());
+        // CLS values are typically between 0 and 1. Multiplying by 1000 
allows storage as an integer
+        // while preserving 3 decimal places of precision. When querying, 
divide by 1000 to restore the original value.
+        browserAppWebVitalsPerf.setCls((int) Math.round(decorator.getCls() * 
1000));
         browserAppWebVitalsPerf.setLcpTime(decorator.getLcpTime());
     }
 
diff --git a/oap-server/server-starter/src/main/resources/oal/browser.oal 
b/oap-server/server-starter/src/main/resources/oal/browser.oal
index b7b3a37deb..995dcf09b0 100644
--- a/oap-server/server-starter/src/main/resources/oal/browser.oal
+++ b/oap-server/server-starter/src/main/resources/oal/browser.oal
@@ -65,7 +65,7 @@ browser_app_resource_protocol_count = 
from(BrowserAppResourcePerf.*).labelCount(
 browser_app_resource_type_count = 
from(BrowserAppResourcePerf.*).labelCount(type);
 
 browser_app_web_vitals_fmp_avg = 
from(BrowserAppWebVitalsPerf.fmpTime).filter(fmpTime >= 0).longAvg();
-browser_app_web_vitals_cls_avg = 
from(BrowserAppWebVitalsPerf.clsTime).filter(clsTime >= 0).longAvg();
+browser_app_web_vitals_cls_avg = from(BrowserAppWebVitalsPerf.cls).filter(cls 
>= 0).longAvg();
 browser_app_web_vitals_lcp_avg = 
from(BrowserAppWebVitalsPerf.lcpTime).filter(lcpTime >= 0).longAvg();
 
 browser_app_web_interaction_inp_percentile = 
from(BrowserAppWebInteractionPerf.inpTime).filter(inpTime >= 0).percentile2(10);
diff --git 
a/oap-server/server-starter/src/main/resources/ui-initialized-templates/browser/browser-page.json
 
b/oap-server/server-starter/src/main/resources/ui-initialized-templates/browser/browser-page.json
index c25500e6a5..ed25669d5e 100644
--- 
a/oap-server/server-starter/src/main/resources/ui-initialized-templates/browser/browser-page.json
+++ 
b/oap-server/server-starter/src/main/resources/ui-initialized-templates/browser/browser-page.json
@@ -741,7 +741,7 @@
                   "i": "12",
                   "type": "Widget",
                   "expressions": [
-                    "browser_app_web_vitals_cls_avg"
+                    "browser_app_web_vitals_cls_avg / 1000"
                   ],
                   "graph": {
                     "type": "Line",
@@ -752,7 +752,7 @@
                     "showYAxis": true
                   },
                   "widget": {
-                    "title": "Web Vitals Cumulative Layout Shift Latency(ms)"
+                    "title": "Web Vitals Cumulative Layout Shift Score"
                   },
                   "associate": [
                     {
diff --git a/test/e2e-v2/cases/browser/browser-cases.yaml 
b/test/e2e-v2/cases/browser/browser-cases.yaml
index 403e1ced04..6a6291917d 100644
--- a/test/e2e-v2/cases/browser/browser-cases.yaml
+++ b/test/e2e-v2/cases/browser/browser-cases.yaml
@@ -70,6 +70,10 @@ cases:
     query: |
       swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics exec \
         --expression=browser_app_page_load_page_avg --service-id 
dGVzdC11aQ==.1 --endpoint-name index.html
+  - expected: expected/metrics-has-value.yml
+    query: |
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics exec \
+        --expression=browser_app_web_vitals_cls_avg --service-id 
dGVzdC11aQ==.1 --endpoint-name index.html
   - expected: expected/metrics-has-value.yml
     query: |
       swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics exec \
@@ -84,4 +88,4 @@ cases:
         --expression=browser_app_page_load_page_percentile --service-id 
dGVzdC11aQ==.1 --endpoint-name index.html
   # dependency service
   - expected: expected/dependency.yml
-    query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql dependency service 
--service-id dGVzdC11aTxicm93c2VyPg==.1
\ No newline at end of file
+    query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql dependency service 
--service-name test-ui
\ No newline at end of file
diff --git a/test/e2e-v2/cases/browser/docker/Dockerfile.test-ui 
b/test/e2e-v2/cases/browser/docker/Dockerfile.test-ui
index da43d5dae8..57a7e5c424 100644
--- a/test/e2e-v2/cases/browser/docker/Dockerfile.test-ui
+++ b/test/e2e-v2/cases/browser/docker/Dockerfile.test-ui
@@ -23,6 +23,7 @@ ARG 
CLIENT_JS_CODE_URL=https://github.com/apache/skywalking-client-js/archive/${
 WORKDIR /skywalking-client-js
 ADD ${CLIENT_JS_CODE_URL} .
 RUN tar -xf ${CLIENT_JS_CODE} --strip 1 && rm ${CLIENT_JS_CODE}
+ENV NPM_TOKEN=""
 RUN npm run rebuild \
     && npm link
 
diff --git a/test/e2e-v2/cases/browser/expected/dependency.yml 
b/test/e2e-v2/cases/browser/expected/dependency.yml
index a3a791efc7..93ab0b700f 100644
--- a/test/e2e-v2/cases/browser/expected/dependency.yml
+++ b/test/e2e-v2/cases/browser/expected/dependency.yml
@@ -22,22 +22,22 @@ nodes:
   isreal: true
   layers:
     - GENERAL
-- id: {{ b64enc "test-ui<browser>"}}.1
-  name: test-ui<browser>
+- id: {{ b64enc "test-ui"}}.1
+  name: test-ui
   type: null
   isreal: true
   layers:
-    - UNDEFINED
+    - BROWSER
 {{- end }}
 calls:
 {{- contains .calls }}
-- source: {{ b64enc "test-ui<browser>"}}.1
+- source: {{ b64enc "test-ui"}}.1
   sourcecomponents:
     - ajax
   target: {{ b64enc "provider-py"}}.1
   targetcomponents:
     - Python
-  id: {{ b64enc "test-ui<browser>"}}.1-{{ b64enc "provider-py"}}.1
+  id: {{ b64enc "test-ui"}}.1-{{ b64enc "provider-py"}}.1
   detectpoints:
     - CLIENT
     - SERVER
diff --git 
a/test/e2e-v2/cases/browser/expected/metrics-has-value-percentile.yml 
b/test/e2e-v2/cases/browser/expected/metrics-has-value-percentile.yml
index 69e12a134e..469e8ed4a9 100644
--- a/test/e2e-v2/cases/browser/expected/metrics-has-value-percentile.yml
+++ b/test/e2e-v2/cases/browser/expected/metrics-has-value-percentile.yml
@@ -17,65 +17,22 @@ debuggingtrace: null
 type: TIME_SERIES_VALUES
 results:
   {{- contains .results }}
-- metric:
-    labels:
-      - key: p
-        value: "50"
-  values:
-    {{- contains .values }}
-    - id: {{ notEmpty .id }}
-      value: {{ .value }}
-      owner: null
-      traceid: null
-    - id: {{ notEmpty .id }}
-      owner: null
-      value: null
-      traceid: null
-    {{- end}}
-- metric:
-    labels:
-      - key: p
-        value: "75"
-  values:
-    {{- contains .values }}
-    - id: {{ notEmpty .id }}
-      value: {{ .value }}
-      owner: null
-      traceid: null
-    - id: {{ notEmpty .id }}
-    owner: null
-      value: null
-      traceid: null
-    {{- end}}
-- metric:
-    labels:
-      - key: p
-        value: "90"
-  values:
-    {{- contains .values }}
-    - id: {{ notEmpty .id }}
-      value: {{ .value }}
-      owner: null
-      traceid: null
-    - id: {{ notEmpty .id }}
-      owner: null
-      value: null
-      traceid: null
-    {{- end}}
-- metric:
-    labels:
-      - key: p
-        value: "99"
-  values:
-    {{- contains .values }}
-    - id: {{ notEmpty .id }}
-      value: {{ .value }}
-      owner: null
-      traceid: null
-    - id: {{ notEmpty .id }}
-      value: null
-      owner: null
-      traceid: null
-    {{- end}}
+  - metric:
+      labels:
+        {{- contains .metric.labels }}
+        - key: p
+          value: {{ .value }}
+        {{- end}}
+    values:
+      {{- contains .values }}
+      - id: {{ notEmpty .id }}
+        value: {{ notEmpty .value }}
+        owner: null
+        traceid: null
+      - id: {{ notEmpty .id }}
+        value: null
+        owner: null
+        traceid: null
+      {{- end}}
   {{- end}}
 error: null
diff --git a/test/e2e-v2/cases/browser/expected/metrics-has-value.yml 
b/test/e2e-v2/cases/browser/expected/metrics-has-value.yml
index 37b19de246..cae6688aec 100644
--- a/test/e2e-v2/cases/browser/expected/metrics-has-value.yml
+++ b/test/e2e-v2/cases/browser/expected/metrics-has-value.yml
@@ -22,7 +22,7 @@ results:
     values:
       {{- contains .values }}
       - id: {{ notEmpty .id }}
-        value: {{ .value }}
+        value: {{ notEmpty .value }}
         owner: null
         traceid: null
       - id: {{ notEmpty .id }}
diff --git a/test/e2e-v2/cases/browser/expected/trace-detail.yml 
b/test/e2e-v2/cases/browser/expected/trace-detail.yml
index eab62c70f3..2350d844a4 100644
--- a/test/e2e-v2/cases/browser/expected/trace-detail.yml
+++ b/test/e2e-v2/cases/browser/expected/trace-detail.yml
@@ -21,7 +21,7 @@ spans:
   spanid: 0
   parentspanid: -1
   refs: []
-  servicecode: test-ui<browser>
+  servicecode: test-ui
   serviceinstancename: "v1.0.0"
   starttime: {{ gt .starttime 0 }}
   endtime: {{ gt .endtime 0 }}
diff --git a/test/e2e-v2/cases/browser/expected/trace-v2-detail.yml 
b/test/e2e-v2/cases/browser/expected/trace-v2-detail.yml
index fee293ca30..f3c263b25e 100644
--- a/test/e2e-v2/cases/browser/expected/trace-v2-detail.yml
+++ b/test/e2e-v2/cases/browser/expected/trace-v2-detail.yml
@@ -28,7 +28,7 @@ traces:
       spanid: 0
       parentspanid: -1
       refs: []
-      servicecode: test-ui<browser>
+      servicecode: test-ui
       serviceinstancename: "v1.0.0"
       starttime: {{ gt .starttime 0 }}
       endtime: {{ gt .endtime 0 }}
diff --git a/test/e2e-v2/script/env b/test/e2e-v2/script/env
index 343737522f..3fa61bc3d1 100644
--- a/test/e2e-v2/script/env
+++ b/test/e2e-v2/script/env
@@ -19,7 +19,7 @@ 
SW_AGENT_NGINX_LUA_COMMIT=c3cee4841798a147d83b96a10914d4ac0e11d0aa
 SW_AGENT_NODEJS_COMMIT=4f9a91dad3dfd8cfe5ba8f7bd06b39e11eb5e65e
 SW_AGENT_GO_COMMIT=afa75a3cc8c31f142102443af6164b825d63d8fc
 SW_AGENT_PYTHON_COMMIT=c76a6ec51a478ac91abb20ec8f22a99b8d4d6a58
-SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
+SW_AGENT_CLIENT_JS_COMMIT=f08776d909eb1d9bc79c600e493030651b97e491
 SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
 SW_KUBERNETES_COMMIT_SHA=6fe5e6f0d3b7686c6be0457733e825ee68cb9b35
 SW_ROVER_COMMIT=79292fe07f17f98f486e0c4471213e1961fb2d1d

Reply via email to