diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp index 1266e944334..fd554be5857 100644 --- a/src/libs/extensionsystem/pluginmanager.cpp +++ b/src/libs/extensionsystem/pluginmanager.cpp @@ -47,6 +47,7 @@ #include #include +#include #include #include #include @@ -1559,6 +1560,13 @@ void PluginManagerPrivate::profilingReport(const char *what, const PluginSpec *s qDebug("%-22s %-22s %8dms (%8dms)", what, qPrintable(spec->name()), absoluteElapsedMS, elapsedMS); else qDebug("%-45s %8dms (%8dms)", what, absoluteElapsedMS, elapsedMS); + if (what && *what == '<') { + QString tc; + if (spec) + tc = spec->name() + '_'; + tc += QString::fromUtf8(QByteArray(what + 1)); + Utils::Benchmarker::report("loadPlugins", tc, elapsedMS); + } } } @@ -1579,6 +1587,7 @@ void PluginManagerPrivate::profilingSummary() const qDebug("%-22s %8dms ( %5.2f%% )", qPrintable(it.value()->name()), it.key(), 100.0 * it.key() / total); qDebug("Total: %8dms", total); + Utils::Benchmarker::report("loadPlugins", "Total", total); } } diff --git a/src/libs/utils/benchmarker.cpp b/src/libs/utils/benchmarker.cpp new file mode 100644 index 00000000000..61f4f37d190 --- /dev/null +++ b/src/libs/utils/benchmarker.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#include "benchmarker.h" + +#include + +static Q_LOGGING_CATEGORY(benchmarksLog, "qtc.benchmark"); + +namespace Utils { + +Benchmarker::Benchmarker(const QString &testsuite, const QString &testcase, + const QString &tagData) : + m_tagData(tagData), + m_testsuite(testsuite), + m_testcase(testcase) +{ + m_timer.start(); +} + +Benchmarker::~Benchmarker() +{ + if (m_timer.isValid()) + report(m_timer.elapsed()); +} + +void Benchmarker::report(qint64 ms) +{ + m_timer.invalidate(); + report(m_testsuite, m_testcase, ms, m_tagData); +} + +void Benchmarker::report(const QString &testsuite, const QString &testcase, qint64 ms, + const QString &tags) +{ + QString t = "unit=ms"; + if (!tags.isEmpty()) + t += "," + tags; + + qCDebug(benchmarksLog, "%s::%s: %lld { %s }", + testsuite.toUtf8().data(), testcase.toUtf8().data(), ms, t.toUtf8().data()); +} + + +} // namespace Utils diff --git a/src/libs/utils/benchmarker.h b/src/libs/utils/benchmarker.h new file mode 100644 index 00000000000..bcff6d341c7 --- /dev/null +++ b/src/libs/utils/benchmarker.h @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#pragma once + +#include "utils_global.h" + +#include +#include + +namespace Utils { + +class QTCREATOR_UTILS_EXPORT Benchmarker +{ +public: + Benchmarker(const QString &testsuite, const QString &testcase, + const QString &tags = QString()); + ~Benchmarker(); + + void report(qint64 ms); + static void report(const QString &testsuite, const QString &testcase, qint64 ms, + const QString &tags = QString()); + +private: + QElapsedTimer m_timer; + QString m_tagData; + QString m_testsuite; + QString m_testcase; +}; + +} // namespace Utils diff --git a/src/libs/utils/utils-lib.pri b/src/libs/utils/utils-lib.pri index c181a8e25ae..822d247e903 100644 --- a/src/libs/utils/utils-lib.pri +++ b/src/libs/utils/utils-lib.pri @@ -21,7 +21,9 @@ win32: LIBS += -luser32 -lshell32 # PortsGatherer win32: LIBS += -liphlpapi -lws2_32 -SOURCES += $$PWD/environment.cpp \ +SOURCES += \ + $$PWD/benchmarker.cpp \ + $$PWD/environment.cpp \ $$PWD/environmentmodel.cpp \ $$PWD/environmentdialog.cpp \ $$PWD/qtcprocess.cpp \ @@ -122,6 +124,7 @@ win32:SOURCES += $$PWD/consoleprocess_win.cpp else:SOURCES += $$PWD/consoleprocess_unix.cpp HEADERS += \ + $$PWD/benchmarker.h \ $$PWD/environment.h \ $$PWD/environmentmodel.h \ $$PWD/environmentdialog.h \ diff --git a/src/libs/utils/utils.qbs b/src/libs/utils/utils.qbs index 56b1b31e608..d761c668900 100644 --- a/src/libs/utils/utils.qbs +++ b/src/libs/utils/utils.qbs @@ -48,6 +48,8 @@ Project { "appmainwindow.h", "basetreeview.cpp", "basetreeview.h", + "benchmarker.cpp", + "benchmarker.h", "bracematcher.cpp", "bracematcher.h", "buildablehelperlibrary.cpp",