Skip to content

Commit 7e0139e

Browse files
alexmarkovcommit-bot@chromium.org
authored andcommitted
[vm/corelib] Improve performance of list copying
With NNBD core libraries: ListCopy.toList.100(RunTime) 4129 -> 2376 us. With default core libraries: ListCopy.toList.100(RunTime) 3006 -> 2140 us. Issue: dart-lang/sdk#40917 Change-Id: I7a319b6a150eeb5c4765c299dd45638bed2b4406 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138720 Commit-Queue: Alexander Markov <[email protected]> Reviewed-by: Martin Kustermann <[email protected]>
1 parent ec8941b commit 7e0139e

File tree

2 files changed

+40
-20
lines changed

2 files changed

+40
-20
lines changed

sdk/lib/_internal/vm/lib/growable_array.dart

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -373,18 +373,28 @@ class _GrowableList<T> extends ListBase<T> {
373373
}
374374

375375
List<T> toList({bool growable: true}) {
376-
var length = this.length;
377-
if (length > 0) {
378-
List list = growable ? new _List(length) : new _List<T>(length);
379-
for (int i = 0; i < length; i++) {
380-
list[i] = this[i];
376+
final length = this.length;
377+
if (growable) {
378+
if (length > 0) {
379+
final list = new _List(length);
380+
for (int i = 0; i < length; i++) {
381+
list[i] = this[i];
382+
}
383+
final result = new _GrowableList<T>._withData(list);
384+
result._setLength(length);
385+
return result;
381386
}
382-
if (!growable) return list;
383-
var result = new _GrowableList<T>._withData(list);
384-
result._setLength(length);
385-
return result;
387+
return <T>[];
388+
} else {
389+
if (length > 0) {
390+
final list = new _List<T>(length);
391+
for (int i = 0; i < length; i++) {
392+
list[i] = this[i];
393+
}
394+
return list;
395+
}
396+
return new List<T>(0);
386397
}
387-
return growable ? <T>[] : new List<T>(0);
388398
}
389399

390400
Set<T> toSet() {

sdk_nnbd/lib/_internal/vm/lib/growable_array.dart

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -373,18 +373,28 @@ class _GrowableList<T> extends ListBase<T> {
373373
}
374374

375375
List<T> toList({bool growable: true}) {
376-
var length = this.length;
377-
if (length > 0) {
378-
final list = new _List<T>(length);
379-
for (int i = 0; i < length; i++) {
380-
list[i] = this[i];
376+
final length = this.length;
377+
if (growable) {
378+
if (length > 0) {
379+
final list = new _List(length);
380+
for (int i = 0; i < length; i++) {
381+
list[i] = this[i];
382+
}
383+
final result = new _GrowableList<T>._withData(list);
384+
result._setLength(length);
385+
return result;
381386
}
382-
if (!growable) return list;
383-
final result = new _GrowableList<T>._withData(list);
384-
result._setLength(length);
385-
return result;
387+
return <T>[];
388+
} else {
389+
if (length > 0) {
390+
final list = new _List<T>(length);
391+
for (int i = 0; i < length; i++) {
392+
list[i] = this[i];
393+
}
394+
return list;
395+
}
396+
return List<T>.empty(growable: false);
386397
}
387-
return growable ? <T>[] : List<T>.empty(growable: growable);
388398
}
389399

390400
Set<T> toSet() {

0 commit comments

Comments
 (0)