Uploaded image for project: 'Qt for Python'
  1. Qt for Python
  2. PYSIDE-2701

Reduce Qt for Python Binary Size

    XMLWordPrintable

Details

    • User Story
    • Resolution: Unresolved
    • P2: Important
    • None
    • None
    • PySide, Shiboken
    • None
    • 75ac345d6 (dev), 2aaafa0b5 (6.7), 1ac022a95 (dev), a9ed0cab4 (dev), a92e6c17d (dev), 590d537fd (6.7), 1d638416e (dev), 963628350 (dev), f495d4508 (dev), bf56c4b64 (tqtc/lts-6.5), bd8107e22 (tqtc/lts-6.2), 2cc38c87a (tqtc/5.15), cb6e61d6c (tqtc/lts-5.15)

    Description

      As we deploy your packages with each release, we have notice that adding a wrapper around the Qt binaries could be reduced, so this Story is to track the progress around it.

      For a final goal, the team aims to get a 30% reduction in most of our wrappers.

      Currente state 04.2024

      In the case of QtCore (Linux), we deploy the Qt binary, which is:

      6.8M    PySide6/Qt/lib/libQt6Core.so.6
      

      and on top of that our wrapper:

      4.4M    PySide6/QtCore.abi3.so
      

      Meaning that only for providing QtCore compatibility, we need more than 10MB, which when deploying applications, this becomes a problem.

      Ideas

      There has been a few ideas on how to reduce the size, but it's probable that other will appear as well, for example:

      • Identifying common bound methods signatures (say void(int)) and create library code to handle it instead of verbosely generating the code
      • Removal of the strings we have within the wrapper (signatures)
      • exporting only a few symbols when generating the wrapper
      • Reducing the generated code by some sections, or improving processes
      • etc

      Preliminary Exploration

      PySide's code generator does a good job in automatically creating wrappers and support functions for everything. The problem with that is that it creates lots of similar code.

      By identifying repeated patterns, it should be possible to build more general functions, which are called with the same arity but different parameter values.

      The first step before creating actual different code is to prepare some measurement how much the generated functions can be folded. This should give some estimate of the expected savings.

      Outline of an Analysis Function

      • Write a simple parser which can extract all functions that cppgenerator.cpp creates.
      • Ignore the function names.
      • Replace every constant in a function by its type name and a sequential number.

      The output should then be an abstraction of the generated functions, because the concrete
      constants are removed by a place holder.

      These nameless function bodies can then be reduced by uniq(). What remains are hopefully
      a lot less functions, which just have to be called with arguments that fill the place holders.

      If the result sounds promising, we can turn to the quite complex implementation.

      Attachments

        Issue Links

          For Gerrit Dashboard: PYSIDE-2701
          # Subject Branch Project Status CR V

          Activity

            People

              ctismer Christian Tismer
              crmaurei Cristian Maureira-Fredes
              Vladimir Minenko Vladimir Minenko
              Alex Blasche Alex Blasche
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:

                Gerrit Reviews

                  There are 2 open Gerrit changes