You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by wa...@apache.org on 2024/01/15 21:28:56 UTC

(echarts) branch fix/graph-dispose created (now 690ebe6ee)

This is an automated email from the ASF dual-hosted git repository.

wangzx pushed a change to branch fix/graph-dispose
in repository https://gitbox.apache.org/repos/asf/echarts.git


      at 690ebe6ee fix(graph): fix force layout iteration timer doesn't stop after disposing the chart

This branch includes the following new commits:

     new 690ebe6ee fix(graph): fix force layout iteration timer doesn't stop after disposing the chart

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org


(echarts) 01/01: fix(graph): fix force layout iteration timer doesn't stop after disposing the chart

Posted by wa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

wangzx pushed a commit to branch fix/graph-dispose
in repository https://gitbox.apache.org/repos/asf/echarts.git

commit 690ebe6ee6c3f914718d466942f1884252b8e0ea
Author: plainheart <yh...@all-my-life.cn>
AuthorDate: Tue Jan 16 05:23:54 2024 +0800

    fix(graph): fix force layout iteration timer doesn't stop after disposing the chart
---
 src/chart/graph/GraphView.ts         |  8 ++++-
 test/graph-case.html                 | 57 +++++++++++++++++++++++++++++++++++-
 test/runTest/actions/__meta__.json   |  2 +-
 test/runTest/actions/graph-case.json |  2 +-
 4 files changed, 65 insertions(+), 4 deletions(-)

diff --git a/src/chart/graph/GraphView.ts b/src/chart/graph/GraphView.ts
index d5f51eba4..f4559521f 100644
--- a/src/chart/graph/GraphView.ts
+++ b/src/chart/graph/GraphView.ts
@@ -208,6 +208,8 @@ class GraphView extends ChartView {
     }
 
     dispose() {
+        this.remove();
+
         this._controller && this._controller.dispose();
         this._controllerHost = null;
     }
@@ -300,7 +302,11 @@ class GraphView extends ChartView {
         this._lineDraw.updateLayout();
     }
 
-    remove(ecModel: GlobalModel, api: ExtensionAPI) {
+    remove() {
+        clearTimeout(this._layoutTimeout);
+        this._layouting = false;
+        this._layoutTimeout = null;
+
         this._symbolDraw && this._symbolDraw.remove();
         this._lineDraw && this._lineDraw.remove();
     }
diff --git a/test/graph-case.html b/test/graph-case.html
index 7f199f5a4..4523593c7 100644
--- a/test/graph-case.html
+++ b/test/graph-case.html
@@ -39,7 +39,7 @@ under the License.
 
         <div id="main0"></div>
         <div id="main1"></div>
-
+        <div id="main2"></div>
 
 
 
@@ -154,6 +154,61 @@ under the License.
             });
             </script>
 
+            <script>
+                require(['echarts'], function (echarts) {
+                    var option = {
+                        series: [{
+                            type: 'graph',
+                            layout: 'force',
+                            roam: true,
+                            data: [
+                                {
+                                    name: 'Node 1',
+                                    x: 300,
+                                    y: 300
+                                },
+                                {
+                                    name: 'Node 2',
+                                    x: 800,
+                                    y: 300
+                                }
+                            ],
+                            links: [
+                                {
+                                    source: 'Node 1',
+                                    target: 'Node 2'
+                                }
+                            ]
+                        }]
+                    };
+
+                    var chart = testHelper.create(echarts, 'main2', {
+                        title: [
+                            'Layout timer should stop after disposing chart'
+                        ],
+                        buttons: [
+                            {
+                                text: 'Dispose',
+                                onclick() {
+                                    const seriesModel = chart.getModel().getSeriesByType('graph')[0]
+                                    const graphView = chart.getViewOfSeriesModel(seriesModel)
+
+                                    const container = chart.getDom()
+
+                                    chart.dispose()
+
+                                    if (graphView._layoutTimeout) {
+                                        const errMsg = 'Graph layout timer is not removed after disposing the chart!'
+                                        container.innerHTML = '<b style="color: red">' + errMsg + '</b>'
+                                        throw new Error(errMsg)
+                                    }
+                                }
+                            }
+                        ],
+                        option: option
+                    });
+                });
+                </script>
     </body>
 </html>
 
diff --git a/test/runTest/actions/__meta__.json b/test/runTest/actions/__meta__.json
index fb743cb9c..8592bb1be 100644
--- a/test/runTest/actions/__meta__.json
+++ b/test/runTest/actions/__meta__.json
@@ -101,7 +101,7 @@
   "geoScatter": 1,
   "getOption": 1,
   "graph": 2,
-  "graph-case": 1,
+  "graph-case": 2,
   "graph-grid": 1,
   "graph-simple": 2,
   "graphic-animation": 1,
diff --git a/test/runTest/actions/graph-case.json b/test/runTest/actions/graph-case.json
index ace16dc41..a4f345849 100644
--- a/test/runTest/actions/graph-case.json
+++ b/test/runTest/actions/graph-case.json
@@ -1 +1 @@
-[{"name":"Action 1","ops":[{"type":"mousemove","time":475,"x":416,"y":188},{"type":"mousemove","time":675,"x":406,"y":208},{"type":"mousedown","time":848,"x":406,"y":210},{"type":"mousemove","time":881,"x":406,"y":210},{"type":"mouseup","time":979,"x":406,"y":210},{"time":980,"delay":400,"type":"screenshot-auto"},{"type":"mousedown","time":1837,"x":406,"y":210},{"type":"mouseup","time":1988,"x":406,"y":210},{"time":1989,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":234 [...]
\ No newline at end of file
+[{"name":"Action 1","ops":[{"type":"mousemove","time":475,"x":416,"y":188},{"type":"mousemove","time":675,"x":406,"y":208},{"type":"mousedown","time":848,"x":406,"y":210},{"type":"mousemove","time":881,"x":406,"y":210},{"type":"mouseup","time":979,"x":406,"y":210},{"time":980,"delay":400,"type":"screenshot-auto"},{"type":"mousedown","time":1837,"x":406,"y":210},{"type":"mouseup","time":1988,"x":406,"y":210},{"time":1989,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":234 [...]
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org