Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit d57178c

Browse filesBrowse files
mabaasitruyadorno
authored andcommitted
events: use bitset to save memory
PR-URL: #43700 Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent b2a15b6 commit d57178c
Copy full SHA for d57178c

File tree

Expand file treeCollapse file tree

1 file changed

+46
-6
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

1 file changed

+46
-6
lines changed
Open diff view settings
Collapse file

‎lib/internal/event_target.js‎

Copy file name to clipboardExpand all lines: lib/internal/event_target.js
+46-6Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,13 @@ function weakListeners() {
389389
return { registry: weakListenersState, map: objectToWeakListenerMap };
390390
}
391391

392+
const kFlagOnce = 1 << 0;
393+
const kFlagCapture = 1 << 1;
394+
const kFlagPassive = 1 << 2;
395+
const kFlagNodeStyle = 1 << 3;
396+
const kFlagWeak = 1 << 4;
397+
const kFlagRemoved = 1 << 5;
398+
392399
// The listeners for an EventTarget are maintained as a linked list.
393400
// Unfortunately, the way EventTarget is defined, listeners are accounted
394401
// using the tuple [handler,capture], and even if we don't actually make
@@ -404,13 +411,21 @@ class Listener {
404411
previous.next = this;
405412
this.previous = previous;
406413
this.listener = listener;
407-
// TODO(benjamingr) these 4 can be 'flags' to save 3 slots
408-
this.once = once;
409-
this.capture = capture;
410-
this.passive = passive;
411-
this.isNodeStyleListener = isNodeStyleListener;
414+
415+
let flags = 0b0;
416+
if (once)
417+
flags |= kFlagOnce;
418+
if (capture)
419+
flags |= kFlagCapture;
420+
if (passive)
421+
flags |= kFlagPassive;
422+
if (isNodeStyleListener)
423+
flags |= kFlagNodeStyle;
424+
if (weak)
425+
flags |= kFlagWeak;
426+
this.flags = flags;
427+
412428
this.removed = false;
413-
this.weak = Boolean(weak); // Don't retain the object
414429

415430
if (this.weak) {
416431
this.callback = new SafeWeakRef(listener);
@@ -430,6 +445,31 @@ class Listener {
430445
}
431446
}
432447

448+
get once() {
449+
return Boolean(this.flags & kFlagOnce);
450+
}
451+
get capture() {
452+
return Boolean(this.flags & kFlagCapture);
453+
}
454+
get passive() {
455+
return Boolean(this.flags & kFlagPassive);
456+
}
457+
get isNodeStyleListener() {
458+
return Boolean(this.flags & kFlagNodeStyle);
459+
}
460+
get weak() {
461+
return Boolean(this.flags & kFlagWeak);
462+
}
463+
get removed() {
464+
return Boolean(this.flags & kFlagRemoved);
465+
}
466+
set removed(value) {
467+
if (value)
468+
this.flags |= kFlagRemoved;
469+
else
470+
this.flags &= ~kFlagRemoved;
471+
}
472+
433473
same(listener, capture) {
434474
const myListener = this.weak ? this.listener.deref() : this.listener;
435475
return myListener === listener && this.capture === capture;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.