Mitigate performance regression in isExpandedEntityValueTooLarge().
authorMitch Curtis <mitch.curtis@digia.com>
Fri, 10 Jan 2014 10:19:08 +0000 (11:19 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Fri, 10 Jan 2014 23:03:01 +0000 (00:03 +0100)
commit718fae50a4509c2cfc07552e6b1187ed2502f9b9
tree4fe5fa8cda37355bd0027998200f791af3637ef7
parentf6002697ece87a99c52b32872194fc8217579e17
Mitigate performance regression in isExpandedEntityValueTooLarge().

512a1ce0698d370c313bb561bbf078935fa0342e fixed a security issue [1],
but also caused a large performance regression. This patch improves
the performance from ~196 seconds to ~.23 seconds for 1000 entities,
using the benchmark in the bug report:

"0": 0 msecs per iteration (total: 0, iterations: 1)
"250": 2,952 msecs per iteration (total: 2,952, iterations: 1)
"500": 23,418 msecs per iteration (total: 23,418, iterations: 1)
"750": 79,913 msecs per iteration (total: 79,913, iterations: 1)
"1000": 196,335 msecs per iteration (total: 196,335, iterations: 1)

"0": 0 msecs per iteration (total: 0, iterations: 1)
"250": 16 msecs per iteration (total: 16, iterations: 1)
"500": 59 msecs per iteration (total: 59, iterations: 1)
"750": 132 msecs per iteration (total: 132, iterations: 1)
"1000": 232 msecs per iteration (total: 232, iterations: 1)

This is a cherry-pick of 62c4e288a11769bde45c9c74d731ed8628303f19.

[1] http://lists.qt-project.org/pipermail/announce/2013-December/000036.html

Task-number: QTBUG-35919

Change-Id: Ibc2fc94dc0d88b227b9510e15bac9c07f4600591
Reviewed-by: Richard J. Moore <rich@kde.org>
src/xml/sax/qxml.cpp