aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4profiling.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2016-05-17 16:58:01 +0200
committerUlf Hermann <ulf.hermann@qt.io>2016-05-18 10:10:15 +0000
commitc78a4dcb610de48d6d339ca61b38bd1394e11995 (patch)
tree1fd6c273b479a66045c40965da9ab8de90af5ae2 /src/qml/jsruntime/qv4profiling.cpp
parent709f6370884b110def2e4665df8fa7bbf5fae734 (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.cpp17
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);