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