Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-76239

QFontconfigDatabase::addApplicationFont is called twice for the same font

    XMLWordPrintable

Details

    • Linux/X11, QNX
    • 9520ba5a73cd9d6cb8ef47f10837b92494c8221e

    Description

      Run the attached application and place a breakpoint into Qt/5.12.1/Src/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp , QFontconfigDatabase::addApplicationFont method.
      It is going to be called twice for the same font using addApplicationFont directly or QML FontLoader.
      The behavior is causing performance issues with large CJK fonts.

      Callstacks with FontLoader:

      1   QFontconfigDatabase::addApplicationFont  qfontconfigdatabase.cpp    822  0x7fffeed288c4 
      2   registerFont                             qfontdatabase.cpp          1042 0x7ffff77cce62 
      3   QFontDatabasePrivate::addAppFont         qfontdatabase.cpp          2458 0x7ffff77cce62 
      4   QFontDatabase::addApplicationFont        qfontdatabase.cpp          2507 0x7ffff77cfa3e 
      5   QQuickFontLoader::setSource              qquickfontloader.cpp       253  0x7fffc7aa5c88 
      6   QQuickFontLoader::qt_static_metacall     moc_qquickfontloader_p.cpp 161  0x7fffc7aa6105 
      7   QQmlPropertyData::writeProperty          qqmlpropertycache_p.h      346  0x7ffff717f4ba 
      8   QQmlObjectCreator::setPropertyValue      qqmlobjectcreator.cpp      450  0x7ffff71fb676 
      9   QQmlObjectCreator::setPropertyBinding    qqmlobjectcreator.cpp      1086 0x7ffff71fd9df 
      10  QQmlObjectCreator::setupBindings         qqmlobjectcreator.cpp      777  0x7ffff71ff96e 
      11  QQmlObjectCreator::populateInstance      qqmlobjectcreator.cpp      1463 0x7ffff71fc986 
      12  QQmlObjectCreator::createInstance        qqmlobjectcreator.cpp      1301 0x7ffff71fd05e 
      13  QQmlObjectCreator::setPropertyBinding    qqmlobjectcreator.cpp      825  0x7ffff71ff110 
      14  QQmlObjectCreator::setupBindings         qqmlobjectcreator.cpp      777  0x7ffff71ff96e 
      15  QQmlObjectCreator::populateInstance      qqmlobjectcreator.cpp      1463 0x7ffff71fc986 
      16  QQmlObjectCreator::createInstance        qqmlobjectcreator.cpp      1301 0x7ffff71fd05e 
      17  QQmlObjectCreator::create                qqmlobjectcreator.cpp      203  0x7ffff720038e 
      18  QQmlComponentPrivate::beginCreate        qqmlcomponent.cpp          871  0x7ffff7182f2b 
      19  QQmlComponent::create                    qqmlcomponent.cpp          783  0x7ffff7180a89 
      20  QQmlApplicationEnginePrivate::finishLoad qqmlapplicationengine.cpp  134  0x7ffff71f20eb 
      ... <More>                                                                                  
      
      
      1   QFontconfigDatabase::addApplicationFont qfontconfigdatabase.cpp 822  0x7fffeed288c4 
      2   registerFont                            qfontdatabase.cpp       1042 0x7ffff77c9f9c 
      3   initializeDb                            qfontdatabase.cpp       910  0x7ffff77c9f9c 
      4   QFontDatabase::findFont                 qfontdatabase.cpp       2664 0x7ffff77cde15 
      5   QFontDatabase::load                     qfontdatabase.cpp       2829 0x7ffff77ce926 
      6   QFontPrivate::engineForScript           qfont.cpp               217  0x7ffff77a5c1a 
      7   QTextEngine::fontEngine                 qtextengine.cpp         2530 0x7ffff77d63e3 
      8   QTextEngine::shapeText                  qtextengine.cpp         1392 0x7ffff77d7e7f 
      9   QTextEngine::shape                      qtextengine.cpp         1988 0x7ffff77d8cdc 
      10  QTextLine::layout_helper                qtextlayout.cpp         1836 0x7ffff77eafc7 
      11  QTextLine::setLineWidth                 qtextlayout.cpp         1596 0x7ffff77ebc9b 
      12  QQuickTextPrivate::setLineGeometry      qquicktext.cpp          1165 0x7fffc7bb377b 
      13  QQuickTextPrivate::setupTextLayout      qquicktext.cpp          792  0x7fffc7bb4bbd 
      14  QQuickTextPrivate::updateSize           qquicktext.cpp          408  0x7fffc7bb67bc 
      15  QQuickTextPrivate::updateLayout         qquicktext.cpp          290  0x7fffc7bb7875 
      16  QQuickText::componentComplete           qquicktext.cpp          2694 0x7fffc7bb8b93 
      17  QQmlObjectCreator::finalize             qqmlobjectcreator.cpp   1366 0x7ffff71fa962 
      18  QQmlComponentPrivate::complete          qqmlcomponent.cpp       923  0x7ffff7180b87 
      19  QQmlComponentPrivate::completeCreate    qqmlcomponent.cpp       959  0x7ffff7180ca2 
      20  QQmlComponent::create                   qqmlcomponent.cpp       785  0x7ffff7180a9a 
      ... <More>  
      

      Attachments

        1. qml2fontloadertest.zip
          7.09 MB
          Karim Pinter
        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            esabraha Eskil Abrahamsen Blomfeldt
            karimpinter Karim Pinter
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes