diff options
author | Jan-Arve Sæther <jan-arve.saether@nokia.com> | 2010-11-18 14:06:45 (GMT) |
---|---|---|
committer | Jan-Arve Sæther <jan-arve.saether@nokia.com> | 2010-11-19 08:27:03 (GMT) |
commit | a26d41fc2732e225dc9a1b5eb5224cc499ae87b4 (patch) | |
tree | 63cb1852413bd389a5d081d8976f0baba7ea3ffc /tests/auto/declarative/qmlvisual/qdeclarativemousearea/data | |
parent | 68fc0a299b9268007ae68f5d8a8dce40ed1e4e0c (diff) | |
download | Qt-a26d41fc2732e225dc9a1b5eb5224cc499ae87b4.zip Qt-a26d41fc2732e225dc9a1b5eb5224cc499ae87b4.tar.gz Qt-a26d41fc2732e225dc9a1b5eb5224cc499ae87b4.tar.bz2 |
Improve performance of hfw in qgridlayoutengine by adding more caching.
The previous code tried to do caching of queries with constraints too,
but it's usecase was rather limited.
The caching worked for the simple case of
effectiveSizeHint(Qt::PreferredSize, QSize(10, -1));
effectiveSizeHint(Qt::PreferredSize, QSize(10, -1)); // uses cache
The problem was that if somebody called this sequence:
effectiveSizeHint(Qt::PreferredSize, QSize(10, -1));
effectiveSizeHint(Qt::PreferredSize, QSize(-1, -1));
effectiveSizeHint(Qt::PreferredSize, QSize(10, -1));
Each call would disregard the cache because the constraint was
different.
Now the pattern is used in the qgridlayoutengine itself when we
calculate hfw: (yes, height-for-width).
First, we ask for the horizontal size hints with no constraints.
Then, we'll ask for the vertical size hints with constraints.
Since horizontal and vertical ultimately comes from the same function
(effectiveSizeHint) it will invalidate the cache each time.
The solution is to add another cache for the sizeHints with
constraints.
The most notable improvement is in the hfw, nested case. Result:
RESULT : tst_QGraphicsLinearLayout::heightForWidth():"hfw, nested":
546 msecs per iteration (total: 546, iterations: 1)
RESULT : tst_QGraphicsLinearLayout::heightForWidth():"hfw, nested":
0.000029 msecs per iteration (total: 62, iterations: 2097152)
Improvement: 18,827,586 times faster (!!)
Diffstat (limited to 'tests/auto/declarative/qmlvisual/qdeclarativemousearea/data')
0 files changed, 0 insertions, 0 deletions