I think it's a very cool technique - instrument your code and than inspect the result as a graphic! On Linux we have flame graph support in the standard tooling integrated with Qt Creator.
On Windows, however, we do not have such a thing! And because I decided to use Windows as the deveolpment platform for my book, we have a kind of problem here, so creative solutions are needed!
And I already came up with an idea for that in the book - we can use libraries (like minitrace, the library we are using in this example ) to generate profiling output in a format that the Chrome's** trace viewer will understand! You didn't know that Google's Chrome had a built-in profiler? Some people assume it’s only for profiling “web stuff” like JavaScript and DOM, but we can use it as a really nice frontend for our own profiling data.
However, due to lack of time I couldn't try it out when I was writing the book 😞, but with the new example I added I was able to generate output you see visualizedin the figure below:
Here is the code example I used - as you can see, you have only to insert some MTR_() macros here and there:
int main(int argc, char *argv[]) { mtr_init("trace.json"); MTR_META_PROCESS_NAME("QmlWithModel"); MTR_META_THREAD_NAME("Main GUI tread"); MTR_BEGIN("main", "main()"); QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); QStringList countryList; countryList << "Thinking..."; MTR_BEGIN("main", "load QML View"); QQuickView view; QQmlContext *ctxt = view.rootContext(); ctxt->setContextProperty("myModel", QVariant::fromValue(countryList)); view.setSource(QUrl("qrc:/main.qml")); view.show(); MTR_END("main", "load QML View"); // get country names from network MTR_BEGIN("main", "init NetworkMgr"); QNetworkAccessManager networkManager; MTR_END("main", "init NetworkMgr"); ....
PS: heob-3 (i.e the new version of the heob memory profiler we discussed in the book) has a sampling profiler with optional flame graph output!!! I think I have to try it out in the near future!
--
* you can find the new example here, and the generated JSON file here
** Chrome browser's about:tracing tool. You can use it like this:
- go to chrome://tracing in Chrome
- click “Load” and open your JSON file (or alternatively drag the file into Chrome)
- that's all