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]
