Skip to content
This repository has been archived by the owner on Feb 22, 2018. It is now read-only.

Commit

Permalink
perf(ChangeDetector): lazy initialize DuplicateMap
Browse files Browse the repository at this point in the history
This slightly reduces number of Maps in the system.
  • Loading branch information
IgorMinar committed Jun 12, 2014
1 parent dfdf67b commit 11629de
Showing 1 changed file with 14 additions and 9 deletions.
23 changes: 14 additions & 9 deletions lib/change_detection/dirty_checking_change_detector.dart
Original file line number Diff line number Diff line change
Expand Up @@ -872,10 +872,10 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
int _length;

/// Keeps track of moved items.
DuplicateMap _movedItems = new DuplicateMap();
DuplicateMap _movedItems;

/// Keeps track of removed items.
DuplicateMap _removedItems = new DuplicateMap();
DuplicateMap _removedItems;

ItemRecord<V> _previousItHead;
ItemRecord<V> _itHead, _itTail;
Expand All @@ -886,7 +886,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
void _revertToPreviousState() {
if (!isDirty) return;

_movedItems.clear();
if (_movedItems != null) _movedItems.clear();
ItemRecord<V> prev;
int i = 0;

Expand All @@ -896,6 +896,8 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
record.currentIndex = record.previousIndex = i;
record._prev = prev;
if (prev != null) prev._next = prev._nextPrevious = record;

if (_movedItems == null) _movedItems = new DuplicateMap();
_movedItems.put(record);
}

Expand Down Expand Up @@ -1060,13 +1062,13 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
}

// Attempt to see if we have seen the item before.
record = _movedItems.get(item, index);
record = _movedItems == null ? null : _movedItems.get(item, index);
if (record != null) {
// We have seen this before, we need to move it forward in the collection.
_moveAfter(record, previousRecord, index);
} else {
// Never seen it, check evicted list.
record = _removedItems.get(item);
record = _removedItems == null ? null : _removedItems.get(item);
if (record != null) {
// It is an item which we have evicted earlier: reinsert it back into the list.
_reinsertAfter(record, previousRecord, index);
Expand Down Expand Up @@ -1105,7 +1107,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
* of 'b' rather then switch 'a' with 'b' and then add 'a' at the end.
*/
ItemRecord<V> verifyReinsertion(ItemRecord record, item, int index) {
ItemRecord<V> reinsertRecord = _removedItems.get(item);
ItemRecord<V> reinsertRecord = _removedItems == null ? null : _removedItems.get(item);
if (reinsertRecord != null) {
record = _reinsertAfter(reinsertRecord, record._prev, index);
} else if (record.currentIndex != index) {
Expand All @@ -1127,7 +1129,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
_addToRemovals(_unlink(record));
record = nextRecord;
}
_removedItems.clear();
if (_removedItems != null) _removedItems.clear();

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

ItemRecord<V> _reinsertAfter(ItemRecord<V> record, ItemRecord<V> prevRecord, int index) {
_removedItems.remove(record);
if (_removedItems != null) _removedItems.remove(record);
var prev = record._prevRemoved;
var next = record._nextRemoved;

Expand Down Expand Up @@ -1198,6 +1200,8 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
prevRecord._next = record;
}

if (_movedItems == null) _movedItems = new DuplicateMap();

_movedItems.put(record);
record.currentIndex = index;
return record;
Expand All @@ -1206,7 +1210,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
ItemRecord<V> _remove(ItemRecord record) => _addToRemovals(_unlink(record));

ItemRecord<V> _unlink(ItemRecord record) {
_movedItems.remove(record);
if (_movedItems != null) _movedItems.remove(record);

var prev = record._prev;
var next = record._next;
Expand Down Expand Up @@ -1245,6 +1249,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
}

ItemRecord<V> _addToRemovals(ItemRecord<V> record) {
if (_removedItems == null) _removedItems = new DuplicateMap();
_removedItems.put(record);
record.currentIndex = null;
record._nextRemoved = null;
Expand Down

0 comments on commit 11629de

Please sign in to comment.