diff options
author | Michael Stahl <mstahl@redhat.com> | 2015-02-24 21:32:54 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2015-02-26 00:06:31 +0100 |
commit | 7fde44c85620f8079bc4863fe3f7ea1f69a0f88c (patch) | |
tree | 7aea72fc34409d320bebd342937cb7ee8c0a7c4e | |
parent | 88d4b2fb08b983531b1e0abc71b07f4bdecdc925 (diff) |
tdf#89666: vcl: speed up HbLayoutEngine line layout for large paragraphs
When formatting a 180k char Writer paragraph, most of the time is spent
in vcl::ScriptRun::next(), which is called twice per line from
SwTxtGuess::Guess(), once via GetTxtBreak() and once via GetTxtSize().
In the second call, from GetTxtSize(), the end position of the line is
known, and passed to vcl, and iterating beyond that position seems
pointless.
This reduces vcl::ScriptRun::next() from 24 to 11 billion callgrind
cycles when built with GCC 4.9.2 -m32 -Os.
Change-Id: Ia23fcccaf5ef9c9ecdcb54bfc8f0f8a043c8711e
-rw-r--r-- | vcl/generic/glyphs/gcach_layout.cxx | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/vcl/generic/glyphs/gcach_layout.cxx b/vcl/generic/glyphs/gcach_layout.cxx index c6dfd48303c7..5010423c03be 100644 --- a/vcl/generic/glyphs/gcach_layout.cxx +++ b/vcl/generic/glyphs/gcach_layout.cxx @@ -370,7 +370,7 @@ bool HbLayoutEngine::Layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs) rLayout.Reserve(nGlyphCapacity); - vcl::ScriptRun aScriptRun(reinterpret_cast<const UChar *>(rArgs.mpStr), rArgs.mnLength); + vcl::ScriptRun aScriptRun(reinterpret_cast<const UChar *>(rArgs.mpStr), rArgs.mnEndCharPos); Point aCurrPos(0, 0); while (true) |