Skip to content

Commit 55117ee

Browse files
committed
Improve python to javascript conversion
1 parent 5c8845d commit 55117ee

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

lib/matplotlib/backends/backend_webagg.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ def show(self):
5252
"""
5353
js_code = f"var fig_id = '{fignum}';" + js_code
5454

55-
js_fig = run_js(js_code)
56-
web_socket = WebAggApplication.MockPythonWebSocket(self, js_fig.ws)
55+
self.js_fig = run_js(js_code)
56+
web_socket = WebAggApplication.MockPythonWebSocket(self, self.js_fig.ws)
5757
web_socket.open(fignum)
5858

5959

@@ -70,14 +70,18 @@ class MockPythonWebSocket:
7070
def __init__(self, manager, js_web_socket):
7171
self.manager = manager
7272
self.js_web_socket = js_web_socket
73+
self.on_message_proxy = None
7374

7475
def open(self, fignum):
75-
self.js_web_socket.open(create_proxy(self.on_message)) # should destroy proxy on close/exit?
76+
self.on_message_proxy = create_proxy(self.on_message)
77+
self.js_web_socket.open(self.on_message_proxy)
7678
self.fignum = int(fignum)
7779
self.manager.add_web_socket(self)
7880

7981
def on_close(self):
8082
self.manager.remove_web_socket(self)
83+
self.on_message_proxy.destroy()
84+
self.on_message_proxy = None
8185

8286
def on_message(self, message):
8387
message = message.as_py_json()

lib/matplotlib/backends/web_backend/js/mpl.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,14 @@ class MockJsWebSocket {
2929
}
3030

3131
receive_binary(content, binary=true) {
32-
content = content.toJs();
33-
blob = new Blob([content]);
34-
this.onmessage({ data: blob });
32+
var buffer = content.getBuffer();
33+
content.destroy();
34+
try {
35+
blob = new Blob([buffer.data]);
36+
this.onmessage({ data: blob });
37+
} finally {
38+
buffer.release(); // Release the memory when we're done
39+
}
3540
}
3641

3742
receive_json(content) {
@@ -416,7 +421,7 @@ mpl.figure.prototype._init_toolbar = function () {
416421

417422
var icon_img = new Image();
418423
this._toolbar_images.push(icon_img);
419-
image_bytes = mpl.toolbar_image_callback(image).toJs();
424+
image_bytes = mpl.toolbar_image_callback(image).toJs({create_pyproxies : false});
420425
blob = new Blob([image_bytes], { type: 'image/png' });
421426
icon_img.src = (window.URL || window.webkitURL).createObjectURL(blob);
422427
icon_img.alt = tooltip;

0 commit comments

Comments
 (0)