Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Split standard input line history per session (notebook) #13944

Merged

Conversation

telamonian
Copy link
Member

@telamonian telamonian commented Feb 7, 2023

References

Closes #13798

Code changes

  • adds new inputHistoryScope setting to notebook (and intialization options of: Cell, OutputArea and Stdin)

User-facing changes

  • new Input History Scope setting

Backwards-incompatible changes

NA

@jupyterlab-probot
Copy link

Thanks for making a pull request to jupyterlab!
To try out this branch on binder, follow this link: Binder

@telamonian telamonian force-pushed the split-stdin-history-per-notebook branch from fb759ca to fcf08b6 Compare February 27, 2023 02:45
@github-actions github-actions bot removed tag:CSS For general CSS related issues and pecadilloes documentation Design System CSS labels Feb 27, 2023
@telamonian telamonian marked this pull request as ready for review February 27, 2023 02:46
@telamonian telamonian marked this pull request as draft February 27, 2023 02:47
@telamonian
Copy link
Member Author

The trick to getting this to work turned out to be buried in the kernel msg that's used to request the Stdin input widget in the first place. The kernel session id is included as part of that stdin request msg, which is then passed on to the Stdin constructor, which can then be used to split up the cmd history when the splitStdinHistoryBySession preference is enabled.

So technically this ended up being a "split stdin history by kernel session" feature rather than being "split by notebook", but I actually think it's better this way.

@krassowski @fcollonval Could one of you please take a look at this when you have a sec? Ideally I'd like to get this in before the feature freeze on Wednesday (though I realize that may be a heavy ask).

Copy link
Member

@fcollonval fcollonval left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @telamonian

I tested it on Binder. It works as expected and the history is kept shared for console for example.

On the implementation level, we should move the configuration flag in INotebookConfig as this is not related to the editor

The current code will also not be possible if you rebase on master - so I advice you to first move to notebook config before rebasing.

This means also you need to move the settings as a primary property like maxNumberOutputs.

Regarding the history storage, I would prefer using a Map rather than a object. And we should try to clean the history if the session gets disposed. But that seems quite complex for this small amount of data; something like a static public method on Stdin triggered by session.disposed?

@krassowski krassowski changed the title implements #13798: split stdin line history per notebook Split standard input line history per session (notebook) Mar 19, 2023
@krassowski
Copy link
Member

Regarding the history storage, I would prefer using a Map rather than a object. And we should try to clean the history if the session gets disposed. But that seems quite complex for this small amount of data; something like a static public method on Stdin triggered by session.disposed?

This could be a WeakMap using Session object which would avoid adding extra complexity in signals and defer GC to browser.

@krassowski
Copy link
Member

So doing this with a static method sounds nice (though introduces an additional dependency on outputarea in notebook-extension - at least in the way I tried) but in fact the session ID is different from both: session (connection) ID and kernel (connection) ID which are easily accessible from session object, hence session.disposed does not give us information on what we should clean (or I cannot find it).

Using a WeakMap where key is session object would be more suitable but the behaviour would be different as there would be no way to achieve persistence when refreshing page; while there is no persistence as-is, it could be more easily implemented in the future if we do not go for WeakMap solution.

Given the tiny benefit of cleaning it up I propose we move forward without it.

@fcollonval fcollonval added this to the 4.0.0 milestone Mar 20, 2023
Copy link
Member

@fcollonval fcollonval left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @krassowski for finishing up this one

@github-actions
Copy link
Contributor

Benchmark report

The execution time (in milliseconds) are grouped by test file, test type and browser.
For each case, the following values are computed: min <- [1st quartile - median - 3rd quartile] -> max.

The mean relative comparison is computed with 95% confidence.

Results table
Test file large_code_notebook large_md_notebook
open
chromium
actual 648 <- [723 - 748 - 795] -> 952 813 <- [1524 - 1587 - 1633] -> 1868
expected 649 <- [699 - 737 - 781] -> 966 819 <- [1518 - 1575 - 1614] -> 1810
Mean relative change ⚠️ 2.0% ± 2.2% 0.4% ± 4.2%
switch-from
chromium
actual 795 <- [847 - 869 - 893] -> 966 353 <- [419 - 445 - 467] -> 545
expected 761 <- [843 - 874 - 900] -> 1045 361 <- [430 - 450 - 482] -> 572
Mean relative change ⚠️ -0.7% ± 1.3% -2.4% ± 2.4%
switch-to
chromium
actual 1422 <- [1590 - 1624 - 1693] -> 1881 1038 <- [1118 - 1141 - 1161] -> 1313
expected 1506 <- [1567 - 1603 - 1666] -> 2004 1045 <- [1108 - 1125 - 1153] -> 1265
Mean relative change ⚠️ 1.0% ± 1.4% 1.0% ± 1.0%
close
chromium
actual 157 <- [185 - 199 - 207] -> 232 235 <- [260 - 270 - 277] -> 351
expected 151 <- [180 - 188 - 196] -> 326 233 <- [258 - 267 - 277] -> 312
Mean relative change ⚠️ 3.4% ± 2.9% 1.0% ± 1.8%

Changes are computed with expected as reference.

@jupyterlab/benchmarks@1.0.0 test:mocha
mocha ./tests/

Waiting for localhost:8888
localhost:8888 is up

Cell memory leaks

Create a code cell Memory change: -144 kB Leak detected: No

Leaking objects:

Object # added Retained size increase
ArraySearchMarker 1 +5 B
ContentDeleted 1 +16 B
ContentString 1 +69 B
Detached Text 1 +74 B
FocusTracker 1 +276 B
ObservableList 1 +172 B
OutputArea 1 +1.43 kB
OutputAreaModel 1 +183 B
Promise 1 +23 B
PromiseDelegate 1 +128 B
ResizeHandle 1 +47 B
RestorablePool 1 +558 B
UndoManager 1 +1.93 kB
WidgetTracker 1 +1.05 kB
YArray 1 +164 B
YCodeCell 1 +107 B
YText 1 +561 B
Detached DOMStringMap 2 +96 B
Detached V8EventHandlerNonNull 2 +80 B
Set 2 +1.42 kB
YMap 2 +464 B
StackItem 3 +1.32 kB
ContentAny 4 +202 B
ContentType 4 +64 B
DeleteItem 4 +80 B
DeleteSet 6 +988 B
Detached HTMLCollection 6 +568 B
EventHandler 8 +239 B
ID 10 +320 B
Item 10 +1.17 kB
Detached DOMTokenList 13 +888 B
Detached Attr 14 +1.01 kB
Detached HTMLDivElement 14 +46.8 kB
Map 17 +11 kB
Signal 19 +319 B
Array 44 +24.4 kB
Detached V8EventListener 263 +23.4 kB
Detached EventListener 265 +42.6 kB
(closure) 270 +20.8 kB
Detached InternalNode 323 +45.2 kB

Leaking collections:

Type Change Preview Size increased at
Array +2 [StackItem, ...]
UndoManager.afterTransactionHandler  http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:5064:15
webpack://jupyterlab/node_modules/lib0/observable.js:73:62
Array.forEach <anonymous>
webpack://jupyterlab/node_modules/lib0/observable.js:73:62
Array.<anonymous> http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4720:27
webpack://jupyterlab/node_modules/lib0/function.js:19:0
cleanupTransactions http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4722:62
transact http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4843:9
Doc.transact http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:2050:5
Array +10 [Item, ...]
addStruct                    http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4295:11
Item.integrate http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:11118:7
<unknown> http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:6651:22
Array.forEach <anonymous>
typeListInsertGenericsAfter http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:6624:11
typeListInsertGenerics http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:6711:10
<unknown> http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:7039:9
transact http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4829:14
YArray.insert http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:7038:7
Set +1 Set((anonymous function), ...)
                          webpack://jupyterlab/node_modules/lib0/observable.js:30:56                                                                                     
Doc.on http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:2209:11
new UndoManager http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:5084:14
YCodeCell.setUndoManager http://localhost:8888/static/lab/vendors-node_modules_jupyter_ydoc_lib_index_js-node_modules_process_browser_js.fc8babfba933ff460960.js:398:33
<unknown> http://localhost:8888/static/lab/vendors-node_modules_jupyter_ydoc_lib_index_js-node_modules_process_browser_js.fc8babfba933ff460960.js:1584:15
Array.forEach <anonymous>
YNotebook.insertCells http://localhost:8888/static/lab/vendors-node_modules_jupyter_ydoc_lib_index_js-node_modules_process_browser_js.fc8babfba933ff460960.js:1583:16
YNotebook.insertCell http://localhost:8888/static/lab/vendors-node_modules_jupyter_ydoc_lib_index_js-node_modules_process_browser_js.fc8babfba933ff460960.js:1564:21
webpack://jupyterlab/packages/notebook/src/actions.tsx:404:22
Create a markdown cell Memory change: -149 kB Leak detected: No

Leaking objects:

Object # added Retained size increase
ActivityMonitor 1 +294 B
ArraySearchMarker 1 +5 B
AttachmentsModel 1 +193 B
AttachmentsResolver 1 +14 B
CodeCellModel 1 +359 B
ContentString 1 +72 B
Debouncer 1 +3.46 kB
Detached HTMLAnchorElement 1 +300 B
Detached HTMLButtonElement 1 +5.3 kB
Detached HTMLHeadingElement 1 +960 B
Error 1 +3.06 kB
MarkdownCell 1 +4.73 kB
MarkdownCellModel 1 +237 B
Poll 1 +3.7 kB
RenderMimeRegistry 1 +227 B
RenderedMarkdown 1 +66 B
Transaction 1 +860 B
TypeError 1 +295 B
YArray 1 +164 B
YArrayEvent 1 +357 B
YCodeCell 1 +107 B
YMarkdownCell 1 +45 B
Detached CSSStyleDeclaration 2 +116 B
Detached HTMLElement 2 +304 B
Detached V8EventHandlerNonNull 2 +5.04 kB
Promise 2 +3.06 kB
PromiseDelegate 2 +3.27 kB
UndoManager 2 +2.38 kB
YText 2 +479 B
Detached DOMStringMap 3 +124 B
ObservableMap 3 +381 B
StackItem 3 +1.33 kB
DeleteItem 4 +80 B
YMap 4 +872 B
ContentAny 5 +454 B
DeleteSet 6 +1 kB
ContentType 7 +112 B
Detached Text 7 +476 B
Set 8 +1.76 kB
Detached HTMLDivElement 10 +30.3 kB
Detached DOMTokenList 13 +788 B
ID 13 +416 B
Item 13 +1.72 kB
EventHandler 14 +448 B
Detached HTMLCollection 17 +1.74 kB
Map 27 +12.1 kB
Signal 28 +722 B
Array 74 +28.4 kB
Detached V8EventListener 130 +10.9 kB
Detached EventListener 132 +25.5 kB
(closure) 152 +-4.2 kB
Detached InternalNode 162 +28.2 kB

Leaking collections:

Type Change Preview Size increased at
Array +1 [{signal, slot, thisArg}, ...]
Object.connect  http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10490:17
Signal.connect http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10230:24
webpack://jupyterlab/packages/cell-toolbar/src/celltoolbartracker.ts:121:37
invokeSlot http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10699:18
Object.emit http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10657:17
Signal.emit http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10256:17
webpack://jupyterlab/packages/notebook/src/widget.ts:1328:30
webpack://jupyterlab/packages/notebook/src/actions.tsx:408:28
webpack://jupyterlab/packages/notebook-extension/src/index.ts:2722:15
Array +1 [eea002cf-57a5-43b5-ad58-73fe4f32ad5f, ...]
                                     webpack://jupyterlab/packages/notebook/src/actions.tsx:2503:37            
Array.forEach <anonymous>
webpack://jupyterlab/packages/notebook/src/actions.tsx:2498:21
webpack://jupyterlab/packages/notebook/src/actions.tsx:350:12
webpack://jupyterlab/packages/notebook-extension/src/index.ts:2653:15
CommandRegistry.execute http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:5748:33
CommandRegistry._executeKeyBinding http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:5906:14
CommandRegistry.processKeydownEvent http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:5846:18
JupyterLab.evtKeydown http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:4660:23
Array +1 [{signal, slot, thisArg}, ...]
Object.connect  http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10490:17
Signal.connect http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10230:24
webpack://jupyterlab/packages/notebook/src/notebooktools.ts:226:33
invokeSlot http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10699:18
Object.emit http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10657:17
Signal.emit http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10256:17
webpack://jupyterlab/packages/notebook/src/tracker.ts:90:30
invokeSlot http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10699:18
Object.emit http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10657:17
Array +2 [StackItem, ...]
UndoManager.afterTransactionHandler  http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:5064:15
webpack://jupyterlab/node_modules/lib0/observable.js:73:62
Array.forEach <anonymous>
webpack://jupyterlab/node_modules/lib0/observable.js:73:62
Array.<anonymous> http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4720:27
webpack://jupyterlab/node_modules/lib0/function.js:19:0
cleanupTransactions http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4722:62
transact http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4843:9
Doc.transact http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:2050:5
Array +13 [Item, ...]
addStruct                    http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4295:11
Item.integrate http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:11118:7
<unknown> http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:6651:22
Array.forEach <anonymous>
typeListInsertGenericsAfter http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:6624:11
typeListInsertGenerics http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:6711:10
<unknown> http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:7039:9
transact http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4829:14
YArray.insert http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:7038:7
Set +2 Set((anonymous function), ...)
                          webpack://jupyterlab/node_modules/lib0/observable.js:30:56                                                                                     
Doc.on http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:2209:11
new UndoManager http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:5084:14
YCodeCell.setUndoManager http://localhost:8888/static/lab/vendors-node_modules_jupyter_ydoc_lib_index_js-node_modules_process_browser_js.fc8babfba933ff460960.js:398:33
<unknown> http://localhost:8888/static/lab/vendors-node_modules_jupyter_ydoc_lib_index_js-node_modules_process_browser_js.fc8babfba933ff460960.js:1584:15
Array.forEach <anonymous>
YNotebook.insertCells http://localhost:8888/static/lab/vendors-node_modules_jupyter_ydoc_lib_index_js-node_modules_process_browser_js.fc8babfba933ff460960.js:1583:16
YNotebook.insertCell http://localhost:8888/static/lab/vendors-node_modules_jupyter_ydoc_lib_index_js-node_modules_process_browser_js.fc8babfba933ff460960.js:1564:21
webpack://jupyterlab/packages/notebook/src/actions.tsx:404:22
Create a raw cell Memory change: +149 kB Leak detected: Yes

Leaking objects:

Object # added Retained size increase
ArraySearchMarker 1 +5 B
CodeCellModel 1 +217 B
ContentString 1 +690 B
Detached CSSStyleDeclaration 1 +64 B
Detached V8EventHandlerNonNull 1 +40 B
ObservableMap 1 +102 B
TypeError 1 +306 B
YArray 1 +164 B
YCodeCell 1 +107 B
YRawCell 1 +45 B
Detached DOMStringMap 2 +104 B
Set 2 +1.28 kB
UndoManager 2 +2.38 kB
YText 2 +479 B
StackItem 3 +1.33 kB
DeleteItem 4 +80 B
YMap 4 +872 B
ContentAny 5 +524 B
Detached HTMLCollection 5 +492 B
DeleteSet 6 +1 kB
ContentType 7 +112 B
Detached DOMTokenList 9 +616 B
Detached HTMLDivElement 9 +22.6 kB
Signal 11 +356 B
ID 13 +416 B
Item 13 +2.41 kB
EventHandler 14 +448 B
Map 19 +2.88 kB
Detached V8EventListener 130 +10.9 kB
Detached EventListener 131 +20.4 kB
(closure) 140 +32.6 kB
Detached InternalNode 151 +21.7 kB

Leaking collections:

Type Change Preview Size increased at
Array +1 [{signal, slot, thisArg}, ...]
Object.connect  http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10490:17
Signal.connect http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10230:24
webpack://jupyterlab/packages/notebook/src/notebooktools.ts:226:33
invokeSlot http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10699:18
Object.emit http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10657:17
Signal.emit http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10256:17
webpack://jupyterlab/packages/notebook/src/tracker.ts:90:30
invokeSlot http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10699:18
Object.emit http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10657:17
Array +1 [86e7033e-1230-4cb7-a7db-041afd9c54b5, ...]
                                     webpack://jupyterlab/packages/notebook/src/actions.tsx:2503:37            
Array.forEach <anonymous>
webpack://jupyterlab/packages/notebook/src/actions.tsx:2498:21
webpack://jupyterlab/packages/notebook/src/actions.tsx:350:12
webpack://jupyterlab/packages/notebook-extension/src/index.ts:2653:15
CommandRegistry.execute http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:5748:33
CommandRegistry._executeKeyBinding http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:5906:14
CommandRegistry.processKeydownEvent http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:5846:18
JupyterLab.evtKeydown http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:4660:23
Array +1 [{signal, slot, thisArg}, ...]
Object.connect  http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10490:17
Signal.connect http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10230:24
webpack://jupyterlab/packages/cell-toolbar/src/celltoolbartracker.ts:121:37
invokeSlot http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10699:18
Object.emit http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10657:17
Signal.emit http://localhost:8888/static/lab/jlab_core.6882a32e5e247c101f12.js:10256:17
webpack://jupyterlab/packages/notebook/src/widget.ts:1328:30
webpack://jupyterlab/packages/notebook/src/actions.tsx:408:28
webpack://jupyterlab/packages/notebook-extension/src/index.ts:2722:15
Array +2 [StackItem, ...]
UndoManager.afterTransactionHandler  http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:5064:15
webpack://jupyterlab/node_modules/lib0/observable.js:73:62
Array.forEach <anonymous>
webpack://jupyterlab/node_modules/lib0/observable.js:73:62
Array.<anonymous> http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4720:27
webpack://jupyterlab/node_modules/lib0/function.js:19:0
cleanupTransactions http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4722:62
transact http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4843:9
Doc.transact http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:2050:5
Array +13 [Item, ...]
addStruct                    http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4295:11
Item.integrate http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:11118:7
<unknown> http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:6651:22
Array.forEach <anonymous>
typeListInsertGenericsAfter http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:6624:11
typeListInsertGenerics http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:6711:10
<unknown> http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:7039:9
transact http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:4829:14
YArray.insert http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:7038:7
Set +2 Set((anonymous function), ...)
                          webpack://jupyterlab/node_modules/lib0/observable.js:30:56                                                                                     
Doc.on http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:2209:11
new UndoManager http://localhost:8888/static/lab/vendors-node_modules_yjs_dist_yjs_mjs.7c22fc794e51ffbd0e42.js:5084:14
YCodeCell.setUndoManager http://localhost:8888/static/lab/vendors-node_modules_jupyter_ydoc_lib_index_js-node_modules_process_browser_js.fc8babfba933ff460960.js:398:33
<unknown> http://localhost:8888/static/lab/vendors-node_modules_jupyter_ydoc_lib_index_js-node_modules_process_browser_js.fc8babfba933ff460960.js:1584:15
Array.forEach <anonymous>
YNotebook.insertCells http://localhost:8888/static/lab/vendors-node_modules_jupyter_ydoc_lib_index_js-node_modules_process_browser_js.fc8babfba933ff460960.js:1583:16
YNotebook.insertCell http://localhost:8888/static/lab/vendors-node_modules_jupyter_ydoc_lib_index_js-node_modules_process_browser_js.fc8babfba933ff460960.js:1564:21
webpack://jupyterlab/packages/notebook/src/actions.tsx:404:22
- Drag and drop a cell

File editor memory leaks

Create a file Memory change: -79.4 kB Leak detected: No

Leaking objects:

Object # added Retained size increase
Detached HTMLUListElement 1 +2.28 kB
Detached V8EventHandlerNonNull 1 +40 B
VirtualElementPass 1 +46 B
Detached HTMLButtonElement 2 +23.5 kB
Detached SVGCircleElement 2 +1.1 kB
HTMLDivElement 2 +106 B
LabIcon 2 +1.07 kB
Detached CSSStyleDeclaration 3 +220 B
Detached HTMLLIElement 3 +5.18 kB
Detached NodeList 3 +192 B
NavigationHistoryEntry 3 +720 B
VirtualText 3 +109 B
Detached SVGGElement 4 +2.94 kB
VirtualElement 4 +2.24 kB
Detached SVGAnimatedPreserveAspectRatio 5 +320 B
Detached SVGAnimatedRect 5 +320 B
Detached SVGPathElement 5 +1.77 kB
Detached SVGSVGElement 5 +7.92 kB
Detached HTMLSpanElement 6 +2.27 kB
Detached DOMStringMap 7 +364 B
Detached SVGAnimatedNumber 7 +448 B
Detached Attr 10 +720 B
Detached Text 10 +700 B
Detached HTMLCollection 13 +1.36 kB
Detached DOMTokenList 14 +868 B
Detached HTMLDivElement 15 +32.5 kB
Detached SVGAnimatedString 16 +896 B
Detached SVGAnimatedTransformList 16 +1.02 kB
Detached SVGAnimatedLength 26 +1.66 kB
Detached V8EventListener 130 +10.9 kB
Detached EventListener 131 +20.4 kB
(closure) 138 +24.3 kB
✔ Opening a text file (73078ms)

Notebook memory leaks

Create a notebook Memory change: +27.5 kB Leak detected: Yes

Leaking objects:

Object # added Retained size increase
Detached HTMLUListElement 1 +2.29 kB
Detached V8EventHandlerNonNull 1 +40 B
VirtualElementPass 1 +46 B
Detached HTMLButtonElement 2 +23.7 kB
Detached SVGCircleElement 2 +1.1 kB
HTMLDivElement 2 +89 B
LabIcon 2 +935 B
Detached CSSStyleDeclaration 3 +204 B
Detached HTMLLIElement 3 +5.92 kB
Detached NodeList 3 +168 B
NavigationHistoryEntry 3 +720 B
VirtualText 3 +110 B
VirtualElement 4 +1.19 kB
Detached SVGAnimatedPreserveAspectRatio 5 +320 B
Detached SVGAnimatedRect 5 +320 B
Detached SVGSVGElement 5 +9.21 kB
Detached HTMLSpanElement 6 +3.04 kB
Detached SVGGElement 6 +4.9 kB
Detached SVGPathElement 7 +2.47 kB
Detached SVGAnimatedNumber 9 +576 B
Detached Attr 10 +720 B
Detached Text 10 +716 B
Detached HTMLCollection 13 +1.44 kB
Detached DOMTokenList 15 +1.01 kB
Detached HTMLDivElement 15 +33.2 kB
Detached SVGAnimatedString 20 +1.12 kB
Detached SVGAnimatedTransformList 20 +1.28 kB
Detached SVGAnimatedLength 26 +1.66 kB
Detached V8EventListener 130 +10.9 kB
Detached EventListener 131 +20.4 kB
(closure) 138 +40 kB
✔ Opening a notebook (76238ms)

2 passing (7m)
1 pending
1 failing

   Adding a cell:

  Create a code cell - Objects leaking
  + expected - actual

  -1322
  +1308
  
  at file:///home/runner/work/_actions/jupyterlab/benchmarks/v1/memory-leaks/tests/utils.mjs:43:16
  at Array.forEach (<anonymous>)
  at expectNoLeaks (file:///home/runner/work/_actions/jupyterlab/benchmarks/v1/memory-leaks/tests/utils.mjs:28:11)
  at testScenario (file:///home/runner/work/_actions/jupyterlab/benchmarks/v1/memory-leaks/tests/utils.mjs:230:3)
  at async Context.<anonymous> (file:///home/runner/work/_actions/jupyterlab/benchmarks/v1/memory-leaks/tests/cell.test.mjs:7:5)

@krassowski krassowski merged commit 6d31bbb into jupyterlab:master Mar 25, 2023
75 of 76 checks passed
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Mar 25, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Improving stdin line history: option to split line history per notebook
3 participants