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

100pah pushed a commit to branch fix/progressive-gl
in repository https://gitbox.apache.org/repos/asf/echarts.git

commit 8aa9d6dc473666dabd18f431fba69b08ff54c912
Author: 100pah <[email protected]>
AuthorDate: Sun May 31 01:55:53 2026 +0800

    fix: Revert updateTransform to support progressive rendering (e.g. for 
'linesGL' in echarts-gl). It is incorrectly break by v6.1.0.
---
 src/chart/effectScatter/EffectScatterView.ts |  5 +++++
 src/chart/lines/LinesView.ts                 |  5 +++--
 src/chart/scatter/ScatterView.ts             |  6 ++++--
 src/core/echarts.ts                          |  8 +-------
 src/util/model.ts                            |  4 ++++
 src/view/Chart.ts                            | 16 ++++++++++++++++
 test/scatter-gps.html                        |  2 +-
 7 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/src/chart/effectScatter/EffectScatterView.ts 
b/src/chart/effectScatter/EffectScatterView.ts
index db0e4d247..f7d0cf517 100644
--- a/src/chart/effectScatter/EffectScatterView.ts
+++ b/src/chart/effectScatter/EffectScatterView.ts
@@ -29,6 +29,7 @@ import EffectScatterSeriesModel from './EffectScatterSeries';
 import { StageHandlerProgressExecutor } from '../../util/types';
 import { createCoordSysClipAreaSimply } from 
'../helper/createClipPathFromCoordSys';
 import { SymbolDrawUpdateOpt } from '../helper/baseDraw';
+import { isInProgressiveRendering } from '../../util/model';
 
 class EffectScatterView extends ChartView {
     static readonly type = 'effectScatter';
@@ -48,6 +49,10 @@ class EffectScatterView extends ChartView {
     }
 
     updateTransform(seriesModel: EffectScatterSeriesModel, ecModel: 
GlobalModel, api: ExtensionAPI) {
+        if (isInProgressiveRendering(seriesModel)) {
+            return {update: true} as const;
+        }
+
         const data = seriesModel.getData();
 
         this.group.dirty();
diff --git a/src/chart/lines/LinesView.ts b/src/chart/lines/LinesView.ts
index 52c49b860..683d9f247 100644
--- a/src/chart/lines/LinesView.ts
+++ b/src/chart/lines/LinesView.ts
@@ -35,7 +35,7 @@ import SeriesData from '../../data/SeriesData';
 import type Polar from '../../coord/polar/Polar';
 import type Cartesian2D from '../../coord/cartesian/Cartesian2D';
 import Element from 'zrender/src/Element';
-import { getIncrementalId } from '../../util/model';
+import { getIncrementalId, isInProgressiveRendering } from '../../util/model';
 import { getCurrentCanvasPainter } from '../../util/graphic';
 import { ILineDraw } from '../helper/baseDraw';
 
@@ -134,7 +134,8 @@ class LinesView extends ChartView {
         const data = seriesModel.getData();
         const lineDraw = this._lineDraw;
 
-        if (!this._finished
+        if (isInProgressiveRendering(seriesModel)
+            || !this._finished
             || !lineDraw
             // TODO Don't have to do update in large mode. Only do it when 
there are millions of data.
             || !lineDraw.updateLayout
diff --git a/src/chart/scatter/ScatterView.ts b/src/chart/scatter/ScatterView.ts
index ae3de6531..61e9dc456 100644
--- a/src/chart/scatter/ScatterView.ts
+++ b/src/chart/scatter/ScatterView.ts
@@ -28,7 +28,7 @@ import SeriesData from '../../data/SeriesData';
 import { TaskProgressParams } from '../../core/task';
 import type { StageHandlerProgressExecutor } from '../../util/types';
 import Element from 'zrender/src/Element';
-import { getIncrementalId } from '../../util/model';
+import { getIncrementalId, isInProgressiveRendering } from '../../util/model';
 import { createCoordSysClipAreaSimply } from 
'../helper/createClipPathFromCoordSys';
 import { ISymbolDraw, SymbolDrawUpdateOpt } from '../helper/baseDraw';
 
@@ -78,7 +78,9 @@ class ScatterView extends ChartView {
         // PENDING
         this.group.dirty();
 
-        if (!this._finished) { // FIXME: _finished checking is unnecessary?
+        if (isInProgressiveRendering(seriesModel)
+            || !this._finished
+        ) { // FIXME: _finished checking is unnecessary?
             return {update: true} as const;
         }
         else {
diff --git a/src/core/echarts.ts b/src/core/echarts.ts
index a432ad137..d489477e2 100644
--- a/src/core/echarts.ts
+++ b/src/core/echarts.ts
@@ -1973,13 +1973,7 @@ class ECharts extends Eventful<ECEventDefinition> {
                 const seriesDirtyMap = createHashMap();
                 ecModel.eachSeries(function (seriesModel) {
                     const chartView = ecIns._chartsMap[seriesModel.__viewId];
-                    const pipelineContext = seriesModel.pipelineContext;
-                    if (chartView.updateTransform
-                        // Use the progressive pass if enabled, where each 
frame renders only a small amount.
-                        // And `ISymbolDraw['updateLayout']` and 
`ILineDraw['updateLayout']` do not support
-                        // progressive case.
-                        && !pipelineContext.progressiveRender
-                    ) {
+                    if (chartView.updateTransform) {
                         const result = chartView.updateTransform(seriesModel, 
ecModel, api, payload);
                         result && result.update && 
seriesDirtyMap.set(seriesModel.uid, 1);
                     }
diff --git a/src/util/model.ts b/src/util/model.ts
index 1888ee081..03cc24e13 100644
--- a/src/util/model.ts
+++ b/src/util/model.ts
@@ -1442,3 +1442,7 @@ export function createSimpleOverallStageHandler2(
         overallReset: overallReset
     };
 }
+
+export function isInProgressiveRendering(seriesModel: SeriesModel): boolean {
+    return seriesModel.pipelineContext.progressiveRender;
+}
diff --git a/src/view/Chart.ts b/src/view/Chart.ts
index 3b93544bc..19e3b80b6 100644
--- a/src/view/Chart.ts
+++ b/src/view/Chart.ts
@@ -71,6 +71,22 @@ interface ChartView {
     /**
      * Update transform directly.
      * Implement it if needed.
+     *
+     * [NOTICE]: It may be called after normal rendering (via 
`ChartView['render']`)
+     * or progressive rendering (via `ChartView['incrementalPrepareRender']` 
and
+     * `ChartView['incrementalRender']`).
+     * For example, echarts-gl `linesGL` supports `updateTransform` to run in
+     * progressive rendering.
+     * If a series opts out of supporting `updateTransform` in progressive 
rendering,
+     * it can fall back to the normal update path using
+     *  ```js
+     *  updateTransform(seriesModel) {
+     *      if (isInProgressiveRendering(seriesModel)) {
+     *          return {update: true} as const;
+     *      }
+     *      // ...
+     *  }
+     *  ```
      */
     updateTransform(
         seriesModel: SeriesModel,
diff --git a/test/scatter-gps.html b/test/scatter-gps.html
index da9191007..3a72ce78f 100644
--- a/test/scatter-gps.html
+++ b/test/scatter-gps.html
@@ -70,7 +70,7 @@ under the License.
                 }
                 // var dataURL = 
`../../echarts-gl/test/data/gps/gps_${idx}.bin`;
                 // var dataURL = `../../data-online/gps/gps_${idx}.bin`;
-                var dataURL = 
`../../echarts-examples/public/data/asset/data/gps2/gps_${idx}.bin`;
+                var dataURL = 
`../../echarts-examples/public/data/asset/data/gps/gps_${idx}.bin`;
                 var xhr = new XMLHttpRequest();
                 xhr.open('GET', dataURL, true);
                 xhr.responseType = 'arraybuffer';


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to