This is an automated email from the ASF dual-hosted git repository. sushuang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git
commit eaa6b44eaba6350e94813c3cb96e15f1966227d4 Author: sushuang <sushuang0...@gmail.com> AuthorDate: Mon Apr 2 12:35:32 2018 +0800 Fix lines update layout in not large but incremental mode. --- src/chart/helper/LargeLineDraw.js | 1 + src/chart/helper/LineDraw.js | 6 ++ src/chart/helper/createRenderPlanner.js | 4 +- src/chart/lines/LinesView.js | 3 +- src/stream/Scheduler.js | 8 +- src/view/Chart.js | 4 +- test/-cases.js | 1 + test/lines-stream-not-large.html | 141 ++++++++++++++++++++++++++++++++ 8 files changed, 159 insertions(+), 9 deletions(-) diff --git a/src/chart/helper/LargeLineDraw.js b/src/chart/helper/LargeLineDraw.js index 6cc523c..1683435 100644 --- a/src/chart/helper/LargeLineDraw.js +++ b/src/chart/helper/LargeLineDraw.js @@ -163,6 +163,7 @@ largeLineProto.incrementalUpdate = function (taskParams, data) { lineEl.setShape({ segs: data.getLayout('linesPoints') }); + this._setCommon(lineEl, data, !!this._incremental); if (!this._incremental) { diff --git a/src/chart/helper/LineDraw.js b/src/chart/helper/LineDraw.js index 4d40a3a..b1f1982 100644 --- a/src/chart/helper/LineDraw.js +++ b/src/chart/helper/LineDraw.js @@ -87,6 +87,12 @@ function doUpdate(lineDraw, oldLineData, newLineData, oldIdx, newIdx, seriesScop lineDrawProto.updateLayout = function () { var lineData = this._lineData; + + // Do not support update layout in incremental mode. + if (!lineData) { + return; + } + lineData.eachItemGraphicEl(function (el, idx) { el.updateLayout(lineData, idx); }, this); diff --git a/src/chart/helper/createRenderPlanner.js b/src/chart/helper/createRenderPlanner.js index d90cd46..eb8c057 100644 --- a/src/chart/helper/createRenderPlanner.js +++ b/src/chart/helper/createRenderPlanner.js @@ -11,10 +11,10 @@ export default function () { var pipelineContext = seriesModel.pipelineContext; var originalLarge = fields.large; - var originalProgressive = fields.canProgressiveRender; + var originalProgressive = fields.progressiveRender; var large = fields.large = pipelineContext.large; - var progressive = fields.canProgressiveRender = pipelineContext.canProgressiveRender; + var progressive = fields.progressiveRender = pipelineContext.progressiveRender; return !!((originalLarge ^ large) || (originalProgressive ^ progressive)) && 'reset'; }; diff --git a/src/chart/lines/LinesView.js b/src/chart/lines/LinesView.js index f4c4e3e..6f52713 100644 --- a/src/chart/lines/LinesView.js +++ b/src/chart/lines/LinesView.js @@ -82,8 +82,9 @@ export default echarts.extendChartView({ updateTransform: function (seriesModel, ecModel, api) { var data = seriesModel.getData(); + var pipelineContext = seriesModel.pipelineContext; - if (!this._finished || seriesModel.pipelineContext.large) { + if (!this._finished || pipelineContext.large || pipelineContext.progressiveRender) { // TODO Don't have to do update in large mode. Only do it when there are millions of data. return { update: true diff --git a/src/stream/Scheduler.js b/src/stream/Scheduler.js index d7d833a..4dfcf80 100644 --- a/src/stream/Scheduler.js +++ b/src/stream/Scheduler.js @@ -90,7 +90,7 @@ proto.getPerformArgs = function (task, isBlock) { var pCtx = pipeline.context; var incremental = !isBlock && pipeline.progressiveEnabled - && (!pCtx || pCtx.canProgressiveRender) + && (!pCtx || pCtx.progressiveRender) && task.__idxInPipeline > pipeline.bockIndex; return {step: incremental ? pipeline.step : null}; @@ -112,19 +112,19 @@ proto.updateStreamModes = function (seriesModel, view) { var data = seriesModel.getData(); var dataLen = data.count(); - // `canProgressiveRender` means that can render progressively in each + // `progressiveRender` means that can render progressively in each // animation frame. Note that some types of series do not provide // `view.incrementalPrepareRender` but support `chart.appendData`. We // use the term `incremental` but not `progressive` to describe the // case that `chart.appendData`. - var canProgressiveRender = pipeline.progressiveEnabled + var progressiveRender = pipeline.progressiveEnabled && view.incrementalPrepareRender && dataLen >= pipeline.threshold; var large = seriesModel.get('large') && dataLen >= seriesModel.get('largeThreshold'); seriesModel.pipelineContext = pipeline.context = { - canProgressiveRender: canProgressiveRender, + progressiveRender: progressiveRender, large: large }; }; diff --git a/src/view/Chart.js b/src/view/Chart.js index 9f03019..3aa6809 100644 --- a/src/view/Chart.js +++ b/src/view/Chart.js @@ -189,11 +189,11 @@ function renderTaskReset(context) { var api = context.api; var payload = context.payload; // ???! remove updateView updateVisual - var canProgressiveRender = seriesModel.pipelineContext.canProgressiveRender; + var progressiveRender = seriesModel.pipelineContext.progressiveRender; var view = context.view; var updateMethod = payload && inner(payload).updateMethod; - var methodName = canProgressiveRender + var methodName = progressiveRender ? 'incrementalPrepareRender' : (updateMethod && view[updateMethod]) ? updateMethod diff --git a/test/-cases.js b/test/-cases.js index 202cef5..d0d2353 100644 --- a/test/-cases.js +++ b/test/-cases.js @@ -39,6 +39,7 @@ 'scatter-gps.html', 'scatter-weibo.html', 'lines-flight.html', + 'lines-stream-not-large.html', 'stream-filter.html', 'scatter-stream-visual.html' ] diff --git a/test/lines-stream-not-large.html b/test/lines-stream-not-large.html new file mode 100644 index 0000000..c475437 --- /dev/null +++ b/test/lines-stream-not-large.html @@ -0,0 +1,141 @@ +<html> + <head> + <meta charset='utf-8'> + <script src='lib/esl.js'></script> + <script src='lib/config.js'></script> + <script src='lib/jquery.min.js'></script> + <script src="lib/dat.gui.min.js"></script> + <meta name='viewport' content='width=device-width, initial-scale=1' /> + </head> + <body> + <style> + html, body, #main { + width: 100%; + height: 100%; + margin: 0; + } + #info { + position: fixed; + left: 5; + top: 5; + height: 100px; + width: 200px; + background: #fff; + border: 2px solid #999; + z-index: 9999; + } + </style> + <div id="info">Rendering (large: false), please wait ...</div> + <div id='main'></div> + <script> + + var xs = [440000, 450000]; + var ys = [4368000, 4537000]; + + var dataURL = './data/flight.json'; + + require([ + 'echarts' + + // 'echarts/chart/lines', + // 'echarts/component/legend', + // 'extension/bmap' + ], function (echarts) { + + $.get('../map/json/world.json', function (worldJson) { + echarts.registerMap('world', worldJson); + + $.get(dataURL, function (data) { + var config = { + dataLoading: 'whole', + streamThreshold: 0, + streamRender: true, + largeModel: true + }; + + var chart; + var infoEl = document.getElementById('info'); + + init(); + + function init() { + if (chart) { + chart.dispose(); + } + + chart = echarts.init(document.getElementById('main')); + + function getAirportCoord(idx) { + return [data.airports[idx][3], data.airports[idx][4]]; + } + var routes = data.routes.map(function (airline) { + return [ + getAirportCoord(airline[1]), + getAirportCoord(airline[2]) + ]; + }); + + var option = { + streamStep: 4000, + title: { + text: 'World Flights', + left: 'center', + textStyle: { + color: '#eee' + } + }, + backgroundColor: '#003', + tooltip: { + formatter: function (param) { + var route = data.routes[param.dataIndex]; + return data.airports[route[1]][1] + ' > ' + data.airports[route[2]][1]; + } + }, + geo: { + map: 'world', + left: 0, + right: 0, + roam: true, + silent: true, + itemStyle: { + normal: { + borderColor: '#003', + color: '#005' + } + } + }, + series: [{ + type: 'lines', + coordinateSystem: 'geo', + blendModel: 'lighter', + data: routes, + // Test not large mode. + large: false, + largeThreshold: 100, + lineStyle: { + normal: { + opacity: 0.05, + width: 0.5, + curveness: 0.3 + } + }, + // 设置混合模式为叠加 + blendMode: 'lighter' + }] + }; + + chart.on('finished', function () { + infoEl.innerHTML = 'Finished (large: false). Please test roam (in not large mode, should no error thrown'; + }); + + chart.setOption(option); + } + + }); + + }); + }); + + </script> + </body> +</html> \ No newline at end of file -- To stop receiving notification emails like this one, please contact sushu...@apache.org. --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@echarts.apache.org For additional commands, e-mail: commits-h...@echarts.apache.org