Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/chart/effectScatter/EffectScatterView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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();
Expand Down
5 changes: 3 additions & 2 deletions src/chart/lines/LinesView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down Expand Up @@ -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
Expand Down
6 changes: 4 additions & 2 deletions src/chart/scatter/ScatterView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down Expand Up @@ -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 {
Expand Down
8 changes: 1 addition & 7 deletions src/core/echarts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
4 changes: 4 additions & 0 deletions src/util/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1442,3 +1442,7 @@ export function createSimpleOverallStageHandler2(
overallReset: overallReset
};
}

export function isInProgressiveRendering(seriesModel: SeriesModel): boolean {
return seriesModel.pipelineContext.progressiveRender;
}
16 changes: 16 additions & 0 deletions src/view/Chart.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion test/scatter-gps.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.