You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2021/06/18 12:45:06 UTC
[echarts] branch enhance-morph updated: refact(ut): move old series
save to ut module.
This is an automated email from the ASF dual-hosted git repository.
shenyi pushed a commit to branch enhance-morph
in repository https://gitbox.apache.org/repos/asf/echarts.git
The following commit(s) were added to refs/heads/enhance-morph by this push:
new 4689903 refact(ut): move old series save to ut module.
4689903 is described below
commit 468990312fe3bd9b37033eebcd123918445483e9
Author: pissang <bm...@gmail.com>
AuthorDate: Fri Jun 18 20:44:25 2021 +0800
refact(ut): move old series save to ut module.
---
src/animation/universalTransition.ts | 49 ++++++++++++++++++++++++++++--------
src/core/echarts.ts | 13 ----------
src/core/lifecycle.ts | 4 ---
3 files changed, 38 insertions(+), 28 deletions(-)
diff --git a/src/animation/universalTransition.ts b/src/animation/universalTransition.ts
index bde43f8..b667e97 100644
--- a/src/animation/universalTransition.ts
+++ b/src/animation/universalTransition.ts
@@ -34,11 +34,16 @@ import {
UpdateLifecycleTransitionItem,
UpdateLifecycleTransitionSeriesFinder
} from '../core/lifecycle';
-import { normalizeToArray } from '../util/model';
+import { makeInner, normalizeToArray } from '../util/model';
import { warn } from '../util/log';
import ExtensionAPI from '../core/ExtensionAPI';
import { getAnimationConfig } from './basicTrasition';
+const DATA_COUNT_THRESHOLD = 1e4;
+
+interface GlobalStore { oldSeries: SeriesModel[], oldData: List[] };
+const getUniversalTransitionGlobalStore = makeInner<GlobalStore, ExtensionAPI>();
+
interface DiffItem {
data: List
dim: DimensionLoose
@@ -64,7 +69,7 @@ function flattenDataDiffItems(list: TransitionSeries[]) {
each(list, seriesInfo => {
const data = seriesInfo.data;
- if (data.count() > 1e4) {
+ if (data.count() > DATA_COUNT_THRESHOLD) {
if (__DEV__) {
warn('Universal transition is disabled on large data > 10k.');
}
@@ -370,7 +375,10 @@ interface SeriesTransitionBatch {
newSeries: TransitionSeries[]
}
-function findTransitionSeriesBatches(params: UpdateLifecycleParams) {
+function findTransitionSeriesBatches(
+ globalStore: GlobalStore,
+ params: UpdateLifecycleParams
+) {
const updateBatches = createHashMap<SeriesTransitionBatch>();
const oldDataMap = createHashMap<List>();
@@ -381,8 +389,8 @@ function findTransitionSeriesBatches(params: UpdateLifecycleParams) {
data: List
}>();
- each(params.oldSeries, (series, idx) => {
- const oldData = params.oldData[idx];
+ each(globalStore.oldSeries, (series, idx) => {
+ const oldData = globalStore.oldData[idx];
const transitionKey = getSeriesTransitionKey(series);
const transitionKeyStr = convertArraySeriesKeyToString(transitionKey);
oldDataMap.set(transitionKeyStr, oldData);
@@ -483,15 +491,17 @@ function querySeries(series: SeriesModel[], finder: UpdateLifecycleTransitionSer
function transitionSeriesFromOpt(
transitionOpt: UpdateLifecycleTransitionItem,
- params: UpdateLifecycleParams, api: ExtensionAPI
+ globalStore: GlobalStore,
+ params: UpdateLifecycleParams,
+ api: ExtensionAPI
) {
const from: TransitionSeries[] = [];
const to: TransitionSeries[] = [];
each(normalizeToArray(transitionOpt.from), finder => {
- const idx = querySeries(params.oldSeries, finder);
+ const idx = querySeries(globalStore.oldSeries, finder);
if (idx >= 0) {
from.push({
- data: params.oldData[idx],
+ data: globalStore.oldData[idx],
dim: finder.dimension
});
}
@@ -526,17 +536,20 @@ export function installUniversalTransition(registers: EChartsExtensionInstallReg
});
});
registers.registerUpdateLifecycle('series:transition', (ecModel, api, params) => {
+ // TODO api provide an namespace that can save stuff per instance
+ const globalStore = getUniversalTransitionGlobalStore(api);
+
// TODO multiple to multiple series.
- if (params.oldSeries && params.updatedSeries) {
+ if (globalStore.oldSeries && params.updatedSeries) {
// Use give transition config if its' give;
const transitionOpt = params.seriesTransition;
if (transitionOpt) {
each(normalizeToArray(transitionOpt), opt => {
- transitionSeriesFromOpt(opt, params, api);
+ transitionSeriesFromOpt(opt, globalStore, params, api);
});
}
else { // Else guess from series based on transition series key.
- const updateBatches = findTransitionSeriesBatches(params);
+ const updateBatches = findTransitionSeriesBatches(globalStore, params);
each(updateBatches.keys(), key => {
const batch = updateBatches.get(key);
transitionBetween(batch.oldSeries, batch.newSeries, api);
@@ -551,5 +564,19 @@ export function installUniversalTransition(registers: EChartsExtensionInstallReg
}
});
}
+
+ // Save all series of current update. Not only the updated one.
+ const allSeries = ecModel.getSeries();
+ const savedSeries: SeriesModel[] = globalStore.oldSeries = [];
+ const savedData: List[] = globalStore.oldData = [];
+ for (let i = 0; i < allSeries.length; i++) {
+ const data = allSeries[i].getData();
+ // Only save the data that can have transition.
+ // Avoid large data costing too much extra memory
+ if (data.count() < DATA_COUNT_THRESHOLD) {
+ savedSeries.push(allSeries[i]);
+ savedData.push(data);
+ }
+ }
});
}
\ No newline at end of file
diff --git a/src/core/echarts.ts b/src/core/echarts.ts
index 70c1125..ea7785a 100644
--- a/src/core/echarts.ts
+++ b/src/core/echarts.ts
@@ -600,8 +600,6 @@ class ECharts extends Eventful<ECEventDefinition> {
this[IN_MAIN_PROCESS_KEY] = true;
- // Try getting from old model if notMerge is enabled.
- let oldSeriesModels = this._model && this._model.getSeries();
if (!this._model || notMerge) {
const optionManager = new OptionManager(this._api);
const theme = this._theme;
@@ -609,21 +607,10 @@ class ECharts extends Eventful<ECEventDefinition> {
ecModel.scheduler = this._scheduler;
ecModel.init(null, null, null, theme, this._locale, optionManager);
}
- else {
- oldSeriesModels = this._model.getSeries();
- }
-
- // Check if previous option is not rendered yet. Can't getData if so(will throw error.)
- // TODO: This will cause animation failed if setOption with lazyUpdate twice.
- const oldSeriesData = !this[PENDING_UPDATE]
- && oldSeriesModels
- && map(oldSeriesModels, series => series.getData());
this._model.setOption(option as ECBasicOption, { replaceMerge }, optionPreprocessorFuncs);
const updateParams = {
- oldSeries: oldSeriesModels,
- oldData: oldSeriesData,
seriesTransition: transitionOpt
} as UpdateLifecycleParams;
diff --git a/src/core/lifecycle.ts b/src/core/lifecycle.ts
index d5c5976..5f33a3a 100644
--- a/src/core/lifecycle.ts
+++ b/src/core/lifecycle.ts
@@ -22,7 +22,6 @@ import SeriesModel from '../model/Series';
import GlobalModel from '../model/Global';
import { EChartsType } from './echarts';
import ExtensionAPI from './ExtensionAPI';
-import List from '../data/List';
import { ModelFinderIdQuery, ModelFinderIndexQuery } from '../util/model';
import { DimensionLoose } from '../util/types';
@@ -43,9 +42,6 @@ export interface UpdateLifecycleTransitionItem {
export type UpdateLifecycleTransitionOpt = UpdateLifecycleTransitionItem | UpdateLifecycleTransitionItem[];
export interface UpdateLifecycleParams {
- oldSeries?: SeriesModel[]
- oldData?: List[]
-
updatedSeries?: SeriesModel[]
// Specify series to transition in this setOption.
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org