I implemented a profiler to latest master, you can compile huggle by uncomenting PROFILING in definitions.hpp, it is written using C++ macros and its code is replaced with NOOP code in case it's not enabled.
Example output
Tue Jul 29 17:55:00 2014 DEBUG[1]: PROFILER: Core::Init() finished in 365ms Tue Jul 29 17:55:00 2014 DEBUG[1]: PROFILER: Login::Login(QWidget *parent) finished in 527ms Tue Jul 29 17:55:09 2014 DEBUG[1]: PROFILER: MainWindow::MainWindow(QWidget *parent)@layout finished in 303ms Tue Jul 29 17:55:09 2014 DEBUG[1]: PROFILER: MainWindow::MainWindow(QWidget *parent)@welcome finished in 0ms Tue Jul 29 17:55:09 2014 DEBUG[1]: PROFILER: MainWindow::MainWindow(QWidget *parent)@providers finished in 139ms Tue Jul 29 17:55:09 2014 DEBUG[1]: PROFILER: MainWindow::MainWindow(QWidget *parent)@layout finished in 54ms Tue Jul 29 17:55:09 2014 DEBUG[1]: PROFILER: MainWindow::MainWindow(QWidget *parent)@irc finished in 41ms Tue Jul 29 17:55:09 2014 DEBUG[1]: PROFILER: MainWindow::MainWindow(QWidget *parent)@hooks finished in 0ms
So, for example you can see that it took almost half a second for login form to render (which is quite a lot).
You can insert your own profiler checks using these macros:
HUGGLE_PROFILER_RESET; // will reset internal profiler timer, it's a good idea to do this before you start profiling some code
HUGGLE_PROFILER_PRINT_TIME ("name of function@id"); // will print a time it took computer to get from last profiler reset until the mark to debug log
have fun optimizing huggle!