diff options
author | Lars Knoll <[email protected]> | 2017-01-04 13:26:01 +0100 |
---|---|---|
committer | Lars Knoll <[email protected]> | 2017-01-25 08:31:03 +0000 |
commit | 1df5fb40b5417995f4121c15392f56a7bb19e0c2 (patch) | |
tree | 489ccf125482055d22c1bae66f92ca8be0ae6bf0 /src/qml/jsruntime/qv4arraydata.cpp | |
parent | a56809dcfda21363d3c96c39c6075d5d65e116a6 (diff) |
Improve SimpleArrayData::markObjects
Avoid an expensive modulo operation per Value to be marked.
Change-Id: Ibe0adcf0fce73ff760a6adf983c746e66f183332
Reviewed-by: Simon Hausmann <[email protected]>
Diffstat (limited to 'src/qml/jsruntime/qv4arraydata.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4arraydata.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/qml/jsruntime/qv4arraydata.cpp b/src/qml/jsruntime/qv4arraydata.cpp index bfeb3d4699..d8a7de5466 100644 --- a/src/qml/jsruntime/qv4arraydata.cpp +++ b/src/qml/jsruntime/qv4arraydata.cpp @@ -237,8 +237,14 @@ void ArrayData::ensureAttributes(Object *o) void SimpleArrayData::markObjects(Heap::Base *d, ExecutionEngine *e) { Heap::SimpleArrayData *dd = static_cast<Heap::SimpleArrayData *>(d); - for (uint i = 0; i < dd->len; ++i) - dd->arrayData[dd->mappedIndex(i)].mark(e); + uint end = dd->offset + dd->len; + if (end > dd->alloc) { + for (uint i = 0; i < end - dd->alloc; ++i) + dd->arrayData[i].mark(e); + end = dd->alloc; + } + for (uint i = dd->offset; i < end; ++i) + dd->arrayData[i].mark(e); } ReturnedValue SimpleArrayData::get(const Heap::ArrayData *d, uint index) |