Skip to content

Commit 11629de

Browse files
committed
perf(ChangeDetector): lazy initialize DuplicateMap
This slightly reduces number of Maps in the system.
1 parent dfdf67b commit 11629de

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

lib/change_detection/dirty_checking_change_detector.dart

+14-9
Original file line numberDiff line numberDiff line change
@@ -872,10 +872,10 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
872872
int _length;
873873

874874
/// Keeps track of moved items.
875-
DuplicateMap _movedItems = new DuplicateMap();
875+
DuplicateMap _movedItems;
876876

877877
/// Keeps track of removed items.
878-
DuplicateMap _removedItems = new DuplicateMap();
878+
DuplicateMap _removedItems;
879879

880880
ItemRecord<V> _previousItHead;
881881
ItemRecord<V> _itHead, _itTail;
@@ -886,7 +886,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
886886
void _revertToPreviousState() {
887887
if (!isDirty) return;
888888

889-
_movedItems.clear();
889+
if (_movedItems != null) _movedItems.clear();
890890
ItemRecord<V> prev;
891891
int i = 0;
892892

@@ -896,6 +896,8 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
896896
record.currentIndex = record.previousIndex = i;
897897
record._prev = prev;
898898
if (prev != null) prev._next = prev._nextPrevious = record;
899+
900+
if (_movedItems == null) _movedItems = new DuplicateMap();
899901
_movedItems.put(record);
900902
}
901903

@@ -1060,13 +1062,13 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
10601062
}
10611063

10621064
// Attempt to see if we have seen the item before.
1063-
record = _movedItems.get(item, index);
1065+
record = _movedItems == null ? null : _movedItems.get(item, index);
10641066
if (record != null) {
10651067
// We have seen this before, we need to move it forward in the collection.
10661068
_moveAfter(record, previousRecord, index);
10671069
} else {
10681070
// Never seen it, check evicted list.
1069-
record = _removedItems.get(item);
1071+
record = _removedItems == null ? null : _removedItems.get(item);
10701072
if (record != null) {
10711073
// It is an item which we have evicted earlier: reinsert it back into the list.
10721074
_reinsertAfter(record, previousRecord, index);
@@ -1105,7 +1107,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
11051107
* of 'b' rather then switch 'a' with 'b' and then add 'a' at the end.
11061108
*/
11071109
ItemRecord<V> verifyReinsertion(ItemRecord record, item, int index) {
1108-
ItemRecord<V> reinsertRecord = _removedItems.get(item);
1110+
ItemRecord<V> reinsertRecord = _removedItems == null ? null : _removedItems.get(item);
11091111
if (reinsertRecord != null) {
11101112
record = _reinsertAfter(reinsertRecord, record._prev, index);
11111113
} else if (record.currentIndex != index) {
@@ -1127,7 +1129,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
11271129
_addToRemovals(_unlink(record));
11281130
record = nextRecord;
11291131
}
1130-
_removedItems.clear();
1132+
if (_removedItems != null) _removedItems.clear();
11311133

11321134
if (_additionsTail != null) _additionsTail._nextAdded = null;
11331135
if (_movesTail != null) _movesTail._nextMoved = null;
@@ -1136,7 +1138,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
11361138
}
11371139

11381140
ItemRecord<V> _reinsertAfter(ItemRecord<V> record, ItemRecord<V> prevRecord, int index) {
1139-
_removedItems.remove(record);
1141+
if (_removedItems != null) _removedItems.remove(record);
11401142
var prev = record._prevRemoved;
11411143
var next = record._nextRemoved;
11421144

@@ -1198,6 +1200,8 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
11981200
prevRecord._next = record;
11991201
}
12001202

1203+
if (_movedItems == null) _movedItems = new DuplicateMap();
1204+
12011205
_movedItems.put(record);
12021206
record.currentIndex = index;
12031207
return record;
@@ -1206,7 +1210,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
12061210
ItemRecord<V> _remove(ItemRecord record) => _addToRemovals(_unlink(record));
12071211

12081212
ItemRecord<V> _unlink(ItemRecord record) {
1209-
_movedItems.remove(record);
1213+
if (_movedItems != null) _movedItems.remove(record);
12101214

12111215
var prev = record._prev;
12121216
var next = record._next;
@@ -1245,6 +1249,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
12451249
}
12461250

12471251
ItemRecord<V> _addToRemovals(ItemRecord<V> record) {
1252+
if (_removedItems == null) _removedItems = new DuplicateMap();
12481253
_removedItems.put(record);
12491254
record.currentIndex = null;
12501255
record._nextRemoved = null;

0 commit comments

Comments
 (0)