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

Reply via email to