Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
QmlProfiler: Make sure there's minimal overhead when not enabled
Do expensive operations directly in the constructor, guarded by
and if (enabled). Also assert if the methods where this isn't feasible
are called altough debugging hasn't been enabled.

Change-Id: Ieaa3c71730042a88af2270203ea747af42ba5c58
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
  • Loading branch information
Kai Koehne authored and Qt by Nokia committed Mar 19, 2012
1 parent 587a1ce commit c975f80
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 36 deletions.
52 changes: 23 additions & 29 deletions src/qml/debugger/qqmlprofilerservice_p.h
Expand Up @@ -54,12 +54,15 @@
//

#include <private/qqmldebugservice_p.h>
#include <QtQml/qtqmlglobal.h>
#include "qqmlexpression.h"

#include <QtCore/qelapsedtimer.h>
#include <QtCore/qmetaobject.h>
#include <QtCore/qmutex.h>
#include <QtCore/qvector.h>
#include <QtCore/qstringbuilder.h>


QT_BEGIN_HEADER

QT_BEGIN_NAMESPACE
Expand Down Expand Up @@ -198,36 +201,26 @@ struct QQmlBindingProfiler {
};

struct QQmlHandlingSignalProfiler {
QQmlHandlingSignalProfiler()
QQmlHandlingSignalProfiler(const QMetaMethod &signal, QQmlExpression *expression)
{
enabled = QQmlProfilerService::instance
? QQmlProfilerService::instance->profilingEnabled() : false;
if (enabled) {
QQmlProfilerService::instance->startRange(
QQmlProfilerService::HandlingSignal);
}
}

void setSignalInfo(const QString &name, const QString &expression)
{
if (enabled)
QQmlProfilerService::instance->rangeData(
QQmlProfilerService::HandlingSignal,
name % QLatin1String(": ") % expression);
QQmlProfilerService *service = QQmlProfilerService::instance;
service->startRange(QQmlProfilerService::HandlingSignal);
service->rangeData(QQmlProfilerService::HandlingSignal,
QLatin1String(signal.signature()) + QLatin1String(": ")
+ expression->expression());
service->rangeLocation(QQmlProfilerService::HandlingSignal,
expression->sourceFile(), expression->lineNumber(),
expression->columnNumber());
}

void setLocation(const QString &file, int line, int column)
{
if (enabled)
QQmlProfilerService::instance->rangeLocation(
QQmlProfilerService::HandlingSignal, file, line, column);
}

~QQmlHandlingSignalProfiler()
{
if (enabled)
QQmlProfilerService::instance->endRange(
QQmlProfilerService::HandlingSignal);
QQmlProfilerService::instance->endRange(QQmlProfilerService::HandlingSignal);
}

bool enabled;
Expand All @@ -236,22 +229,23 @@ struct QQmlHandlingSignalProfiler {
struct QQmlObjectCreatingProfiler {
QQmlObjectCreatingProfiler()
{
QQmlProfilerService *instance = QQmlProfilerService::instance;
enabled = instance ?
instance->profilingEnabled() : false;
if (enabled)
instance->startRange(QQmlProfilerService::Creating);
enabled = QQmlProfilerService::instance
? QQmlProfilerService::instance->profilingEnabled() : false;
if (enabled) {
QQmlProfilerService *service = QQmlProfilerService::instance;
service->startRange(QQmlProfilerService::Creating);
}
}

void setTypeName(const QString &typeName)
{
if (enabled)
QQmlProfilerService::instance->rangeData(
QQmlProfilerService::Creating, typeName);
Q_ASSERT_X(enabled, Q_FUNC_INFO, "method called although profiler is not enabled.");
QQmlProfilerService::instance->rangeData(QQmlProfilerService::Creating, typeName);
}

void setLocation(const QUrl &url, int line, int column)
{
Q_ASSERT_X(enabled, Q_FUNC_INFO, "method called although profiler is not enabled.");
if (enabled)
QQmlProfilerService::instance->rangeLocation(
QQmlProfilerService::Creating, url, line, column);
Expand Down
8 changes: 1 addition & 7 deletions src/qml/qml/qqmlboundsignal.cpp
Expand Up @@ -174,13 +174,7 @@ int QQmlBoundSignal::qt_metacall(QMetaObject::Call c, int id, void **a)
if (QQmlDebugService::isDebuggingEnabled())
QV8DebugService::instance()->signalEmitted(QString::fromAscii(m_signal.signature()));

QQmlHandlingSignalProfiler prof;
if (prof.enabled) {
prof.setSignalInfo(QString::fromLatin1(m_signal.signature()),
m_expression->expression());
prof.setLocation(m_expression->sourceFile(), m_expression->lineNumber(),
m_expression->columnNumber());
}
QQmlHandlingSignalProfiler prof(m_signal, m_expression);

m_isEvaluating = true;
if (!m_paramsValid) {
Expand Down

0 comments on commit c975f80

Please sign in to comment.