From 3a0197c8dbf4bcf6be2c3afea2b95434002ea109 Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Sun, 12 May 2013 20:13:08 +0200 Subject: [PATCH] Hash: make .size() constant time MessageTray calls .size() very often to update the no messages label, so a linear time implementation is not good enough. https://bugzilla.gnome.org/show_bug.cgi?id=700194 --- js/misc/hash.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/js/misc/hash.js b/js/misc/hash.js index 19d4df619..db70d6542 100644 --- a/js/misc/hash.js +++ b/js/misc/hash.js @@ -58,6 +58,7 @@ const Map = new Lang.Class({ _init: function(iterable) { this._pool = { }; + this._size = 0; if (iterable) { for (let i = 0; i < iterable.length; i++) { @@ -99,6 +100,7 @@ const Map = new Lang.Class({ node.value = value; } else { this._pool[hash] = { key: key, value: value }; + this._size++; } }, @@ -108,6 +110,7 @@ const Map = new Lang.Class({ if (node && _sameValue(node.key, key)) { delete this._pool[hash]; + this._size--; return [node.key, node.value]; } else { return [null, null]; @@ -136,6 +139,6 @@ const Map = new Lang.Class({ }, size: function() { - return Object.getOwnPropertyNames(this._pool).length; + return this._size; }, });