Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Possible infinite recursion during toolbar layout on macOS



  • Recently started getting reports from a Qt 5.6 application I help maintain about performance/responsiveness issues on MacOS. I've advised to get samples (via Activity Monitor / Sample Process), I see what looks like cycle in the hierarchy. I wanted to write to ask here to see if that is indeed a reasonable read of the involved frames:

    ... everything above here is just normal runloop source notification stuff...
        +   2383 QLayout::widgetEvent(QEvent*)  (in QtWidgets) + 81  [0x10a675521]
        +     2383 QLayout::activate()  (in QtWidgets) + 106  [0x10a6755ba]
        +       2383 QLayout::activateRecursiveHelper(QLayoutItem*)  (in QtWidgets) + 86  [0x10a676776]
        +         2383 QMainWindowLayout::itemAt(int) const  (in QtWidgets) + 40  [0x10a79ea28]
        +           2383 QToolBarAreaLayout::itemAt(int*, int) const  (in QtWidgets) + 380,384,...  [0x10a82f85c,0x10a82f860,...]
    

    The numbers 2383 are the sample count, 1ms between samples. From my research so far, activateRecursiveHelper appears to exist to help avoid blowing the stack for deep hierarchies.

    Does any one have any advice for digging into a matter such as this?


  • Lifetime Qt Champion

    Hi and welcome to devnet,

    What version of Qt exactly ?
    On what version of macOS ?



  • Hi thank you for the welcome! :)

    Using Qt 5.6.1 and seen on macOS 10.15.3


  • Lifetime Qt Champion

    Qt 5.6.1 is really old. Can you update at least the latest version of that series ?
    If possible, Qt 5.14 would be better but if you want to stay on LTS then the 5.12 series.



  • Indeed it is! :( It is something that we are looking into doing for certain this FY.