vcl/unx/generic/glyphs/gcach_layout.cxx |    8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

New commits:
commit f688acfdae00ebdd891737e533d54368810185e1
Author: Khaled Hosny <khaledho...@eglug.org>
Date:   Tue May 17 22:49:40 2016 +0200

    Try to fix perf regression in HbLayoutEngine::Layout()
    
    Regression from 1da9b4c24e806ad2447b4a656e2a7192755bb6a8. We should
    cache the break iterator as creating it is pretty expensive.
    
    Change-Id: Id9bbe9aa9835d1b38bc7c8219464ee9c62335325
    Reviewed-on: https://gerrit.libreoffice.org/25073
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com>

diff --git a/vcl/unx/generic/glyphs/gcach_layout.cxx 
b/vcl/unx/generic/glyphs/gcach_layout.cxx
index 61d1477..f2afa9a 100644
--- a/vcl/unx/generic/glyphs/gcach_layout.cxx
+++ b/vcl/unx/generic/glyphs/gcach_layout.cxx
@@ -326,6 +326,7 @@ private:
     hb_script_t             maHbScript;
     hb_face_t*              mpHbFace;
     int                     mnUnitsPerEM;
+    css::uno::Reference<css::i18n::XBreakIterator> mxBreak;
 
 public:
     explicit                HbLayoutEngine(ServerFont&);
@@ -514,7 +515,8 @@ bool HbLayoutEngine::Layout(ServerFontLayout& rLayout, 
ImplLayoutArgs& rArgs)
 
             sal_Int32 nGraphemeStartPos = 
std::numeric_limits<sal_Int32>::max();
             sal_Int32 nGraphemeEndPos = std::numeric_limits<sal_Int32>::min();
-            css::uno::Reference<css::i18n::XBreakIterator> xBreak = 
vcl::unohelper::CreateBreakIterator();
+            if (!mxBreak.is())
+                mxBreak = vcl::unohelper::CreateBreakIterator();
             com::sun::star::lang::Locale 
aLocale(rArgs.maLanguageTag.getLocale());
 
             for (int i = 0; i < nRunGlyphCount; ++i) {
@@ -539,13 +541,13 @@ bool HbLayoutEngine::Layout(ServerFontLayout& rLayout, 
ImplLayoutArgs& rArgs)
                 if(bRightToLeft && (nCharPos < nGraphemeStartPos))
                 {
                     sal_Int32 nDone;
-                    nGraphemeStartPos = 
xBreak->previousCharacters(rArgs.mrStr, nCharPos+1, aLocale,
+                    nGraphemeStartPos = 
mxBreak->previousCharacters(rArgs.mrStr, nCharPos+1, aLocale,
                                                   
com::sun::star::i18n::CharacterIteratorMode::SKIPCELL, 1, nDone);
                 }
                 else if(!bRightToLeft && (nCharPos >= nGraphemeEndPos))
                 {
                     sal_Int32 nDone;
-                    nGraphemeEndPos = xBreak->nextCharacters(rArgs.mrStr, 
nCharPos, aLocale,
+                    nGraphemeEndPos = mxBreak->nextCharacters(rArgs.mrStr, 
nCharPos, aLocale,
                                                   
com::sun::star::i18n::CharacterIteratorMode::SKIPCELL, 1, nDone);
                 }
                 else
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to