vcl/qa/cppunit/complextext.cxx | 45 ++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 16 deletions(-)
New commits: commit 13762c1ec222b6235bbef39eed9bb1037e082a1e Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Wed May 25 12:14:12 2022 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Thu May 26 07:08:16 2022 +0200 test also SalLayoutGlyphsCache in glyphs caching unittest Change-Id: Ic0e5ea44525e7cf76a6de1f64f77b943b8347dfc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134948 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lu...@collabora.com> diff --git a/vcl/qa/cppunit/complextext.cxx b/vcl/qa/cppunit/complextext.cxx index aaea5785c2c4..6a37ed1713ad 100644 --- a/vcl/qa/cppunit/complextext.cxx +++ b/vcl/qa/cppunit/complextext.cxx @@ -13,6 +13,7 @@ #include <ostream> #include <vector> #include <tools/long.hxx> +#include <vcl/glyphitemcache.hxx> #if HAVE_MORE_FONTS // must be declared before inclusion of test/bootstrapfixture.hxx @@ -160,23 +161,9 @@ void VclComplexTextTest::testTdf95650() pOutDev->ImplLayout(aTxt, 9, 1, Point(), 0, {}, SalLayoutFlags::BiDiRtl); } -static void testCachedGlyphs( const OUString& aText, const OUString& aFontName = OUString()) +static void checkCompareGlyphs( const SalLayoutGlyphs& aGlyphs1, const SalLayoutGlyphs& aGlyphs2, + const std::string& message ) { - const std::string message = OUString("Font: " + aFontName + ", text: '" + aText + "'").toUtf8().getStr(); - ScopedVclPtrInstance<VirtualDevice> pOutputDevice; - if(!aFontName.isEmpty()) - { - vcl::Font aFont( aFontName, Size(0, 12)); - pOutputDevice->SetFont( aFont ); - } - // Get the glyphs for the text. - std::unique_ptr<SalLayout> pLayout1 = pOutputDevice->ImplLayout( - aText, 0, aText.getLength(), Point(0, 0), 0, {}, SalLayoutFlags::GlyphItemsOnly); - SalLayoutGlyphs aGlyphs1 = pLayout1->GetGlyphs(); - // Reuse the cached glyphs to get glyphs again. - std::unique_ptr<SalLayout> pLayout2 = pOutputDevice->ImplLayout( - aText, 0, aText.getLength(), Point(0, 0), 0, {}, SalLayoutFlags::GlyphItemsOnly, nullptr, &aGlyphs1); - SalLayoutGlyphs aGlyphs2 = pLayout2->GetGlyphs(); CPPUNIT_ASSERT_EQUAL_MESSAGE(message, aGlyphs1.IsValid(), aGlyphs2.IsValid()); // And check it's the same. for( int level = 0; level < MAX_FALLBACK; ++level ) @@ -200,6 +187,32 @@ static void testCachedGlyphs( const OUString& aText, const OUString& aFontName = } } +static void testCachedGlyphs( const OUString& aText, const OUString& aFontName = OUString()) +{ + const std::string message = OUString("Font: " + aFontName + ", text: '" + aText + "'").toUtf8().getStr(); + ScopedVclPtrInstance<VirtualDevice> pOutputDevice; + if(!aFontName.isEmpty()) + { + vcl::Font aFont( aFontName, Size(0, 12)); + pOutputDevice->SetFont( aFont ); + } + SalLayoutGlyphsCache::self()->clear(); + // Get the glyphs for the text. + std::unique_ptr<SalLayout> pLayout1 = pOutputDevice->ImplLayout( + aText, 0, aText.getLength(), Point(0, 0), 0, {}, SalLayoutFlags::GlyphItemsOnly); + SalLayoutGlyphs aGlyphs1 = pLayout1->GetGlyphs(); + // Reuse the cached glyphs to get glyphs again. + std::unique_ptr<SalLayout> pLayout2 = pOutputDevice->ImplLayout( + aText, 0, aText.getLength(), Point(0, 0), 0, {}, SalLayoutFlags::GlyphItemsOnly, nullptr, &aGlyphs1); + SalLayoutGlyphs aGlyphs2 = pLayout2->GetGlyphs(); + checkCompareGlyphs(aGlyphs1, aGlyphs2, message + " (reuse)"); + // Get cached glyphs from SalLayoutGlyphsCache. + const SalLayoutGlyphs* aGlyphs3 = SalLayoutGlyphsCache::self()->GetLayoutGlyphs( + pOutputDevice, aText, 0, aText.getLength(), 0); + CPPUNIT_ASSERT_MESSAGE(message, aGlyphs3 != nullptr); + checkCompareGlyphs(aGlyphs1, *aGlyphs3, message + " (cache)"); +} + // Check that caching using SalLayoutGlyphs gives same results as without caching. // This should preferably use fonts that come with LO. void VclComplexTextTest::testCaching()