Reduce number of allocations when constructing text nodes
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
Mon, 2 Mar 2015 08:51:44 +0000 (09:51 +0100)
committerEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
Mon, 9 Mar 2015 08:29:51 +0000 (08:29 +0000)
commit11a595e30615943cd6c63f08cc44cde7861112eb
tree536e57c5ea097b95346d9bd5f8ab844297d98e0b
parent2a28bebdc8548c1171a3f255651edafe685da003
Reduce number of allocations when constructing text nodes

In cases where you have a huge number of text elements that
can be merged, we would do a lot of reallocations (one per
node that would be merged into another). As the number of
merges grew, this seemed to converge at about 50% of the time
spent in updatePaintNode() in the text classes.

We can almost eliminate this cost by only doing one realloc
per node that will actually end up in the scene graph.

This patch does a first pass where it simply bundles together
nodes that can be merged. Then it does a second pass where it
actually merges the nodes. In this second pass it can easily
precount the required size of the arrays and we can limit
it to a single realloc.

Task-number: QTBUG-37365
Change-Id: I4e44c01cd83df39304cbbce34f3b8f773763e091
Reviewed-by: Michael Brasser <michael.brasser@live.com>
src/quick/items/qquicktextnodeengine.cpp
src/quick/items/qquicktextnodeengine_p.h