From 1df5fb40b5417995f4121c15392f56a7bb19e0c2 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Wed, 4 Jan 2017 13:26:01 +0100 Subject: Improve SimpleArrayData::markObjects Avoid an expensive modulo operation per Value to be marked. Change-Id: Ibe0adcf0fce73ff760a6adf983c746e66f183332 Reviewed-by: Simon Hausmann --- src/qml/jsruntime/qv4arraydata.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/qml/jsruntime/qv4arraydata.cpp') 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(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) -- cgit v1.2.3