Don't constantly clear child node list on ChildrenUpdateMask
authorRobin Burchell <robin.burchell@viroteck.net>
Fri, 17 Oct 2014 21:21:50 +0000 (23:21 +0200)
committerRobin Burchell <robin.burchell@viroteck.net>
Wed, 29 Oct 2014 17:21:39 +0000 (18:21 +0100)
commiteacb331dcc9b95e1c00bb95fe5f0ce9fd4f80449
treecc84861913e9d23bb0c485255af2a980c673ba51
parenta3a44fc16417edfe09fca757f4ab1fb8fdaff00d
Don't constantly clear child node list on ChildrenUpdateMask

This is pretty inefficient. We can do a better job with some effort,
incrementally. This should help cases like list panning quite a bit.

To accomplish this, we split the child update into two phases. First, we build a
list of desired nodes (this step is necessary for clarity's sake, thanks to the
need to insert an arbitrary painter node).

Second, we make sure that the current reality matches the desired state by
adding & removing nodes as necessary: no more full rebuild each time.

On extremetable, with logging on the ChildrenUpdateMask handling if time taken
was > 0ms, the time taken for me (on a recent rMBP) went from regularly hitting
7-10ms per frame to _occasionally_ (~5 times in a few seconds of panning)
spiking above 0, usually only hitting 1ms, and twice hitting 3 and 4ms.

Task-number: QTBUG-34255
Change-Id: I9fb4fb4cf39ffff3b8035f0d6de3bd7da6fcc51c
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
src/quick/items/qquickwindow.cpp