diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2016-05-17 16:58:01 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2016-05-18 10:10:15 +0000 |
commit | c78a4dcb610de48d6d339ca61b38bd1394e11995 (patch) | |
tree | 1fd6c273b479a66045c40965da9ab8de90af5ae2 /src/qml/jsruntime/qv4profiling.cpp | |
parent | 709f6370884b110def2e4665df8fa7bbf5fae734 (diff) |
V4 profiling: Don't needlessly resolve locations
Resolving locations is fairly expensive and we only need to do it once
per location.
Change-Id: I8716858f45da9c085e50527ada0611531641dafe
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Diffstat (limited to 'src/qml/jsruntime/qv4profiling.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4profiling.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/qml/jsruntime/qv4profiling.cpp b/src/qml/jsruntime/qv4profiling.cpp index a59190b846..72475c5416 100644 --- a/src/qml/jsruntime/qv4profiling.cpp +++ b/src/qml/jsruntime/qv4profiling.cpp @@ -48,13 +48,10 @@ namespace Profiling { FunctionLocation FunctionCall::resolveLocation() const { - FunctionLocation location = { - m_function->name()->toQString(), - m_function->compilationUnit->fileName(), - m_function->compiledFunction->location.line, - m_function->compiledFunction->location.column - }; - return location; + return FunctionLocation(m_function->name()->toQString(), + m_function->compilationUnit->fileName(), + m_function->compiledFunction->location.line, + m_function->compiledFunction->location.column); } FunctionCallProperties FunctionCall::properties() const @@ -95,12 +92,14 @@ void Profiler::reportData() { std::sort(m_data.begin(), m_data.end()); QVector<FunctionCallProperties> properties; - QHash<qint64, FunctionLocation> locations; + FunctionLocationHash locations; properties.reserve(m_data.size()); foreach (const FunctionCall &call, m_data) { properties.append(call.properties()); - locations[properties.constLast().id] = call.resolveLocation(); + FunctionLocation &location = locations[properties.constLast().id]; + if (!location.isValid()) + location = call.resolveLocation(); } emit dataReady(locations, properties, m_memory_data); |