diff --git a/src/libs/valgrind/callgrind/callgrindcallmodel.cpp b/src/libs/valgrind/callgrind/callgrindcallmodel.cpp index 987a60371fe..7e75ce7985b 100644 --- a/src/libs/valgrind/callgrind/callgrindcallmodel.cpp +++ b/src/libs/valgrind/callgrind/callgrindcallmodel.cpp @@ -208,11 +208,21 @@ QVariant CallModel::data(const QModelIndex &index, int role) const QVariant CallModel::headerData(int section, Qt::Orientation orientation, int role) const { - if (orientation == Qt::Vertical || role != Qt::DisplayRole) + if (orientation == Qt::Vertical || (role != Qt::DisplayRole && role != Qt::ToolTipRole)) return QVariant(); QTC_ASSERT(section >= 0 && section < columnCount(), return QVariant()); + if (role == Qt::ToolTipRole) { + if (section == CostColumn) { + if (!d->m_data) + return QVariant(); + + return ParseData::prettyStringForEvent(d->m_data->events().at(d->m_event)); + } + return QVariant(); + } + if (section == CalleeColumn) return tr("Callee"); else if (section == CallerColumn) diff --git a/src/libs/valgrind/callgrind/callgrindcontroller.cpp b/src/libs/valgrind/callgrind/callgrindcontroller.cpp index ffcb4e85226..481d5dd2ccf 100644 --- a/src/libs/valgrind/callgrind/callgrindcontroller.cpp +++ b/src/libs/valgrind/callgrind/callgrindcontroller.cpp @@ -80,7 +80,7 @@ QString toOptionString(CallgrindController::Option option) -w= Specify the startup directory of an active Callgrind run */ - switch(option) { + switch (option) { case CallgrindController::Dump: return "--dump"; case CallgrindController::ResetEventCounters: @@ -118,7 +118,7 @@ void CallgrindController::run(Option option) const QString optionString = toOptionString(option); - switch(option) { + switch (option) { case CallgrindController::Dump: emit statusMessage(tr("Dumping profile data...")); break; @@ -167,7 +167,7 @@ void CallgrindController::processFinished(int rc, QProcess::ExitStatus status) } // this call went fine, we might run another task after this - switch(m_lastOption) { + switch (m_lastOption) { case ResetEventCounters: // lets dump the new reset profiling info run(Dump); diff --git a/src/libs/valgrind/callgrind/callgrindcontroller.h b/src/libs/valgrind/callgrind/callgrindcontroller.h index adefdfb4d33..c739e11c2df 100644 --- a/src/libs/valgrind/callgrind/callgrindcontroller.h +++ b/src/libs/valgrind/callgrind/callgrindcontroller.h @@ -36,7 +36,6 @@ #include #include -#include #include #include @@ -69,6 +68,7 @@ public: void run(Valgrind::Callgrind::CallgrindController::Option option); void setValgrindProcess(ValgrindProcess *process); + inline ValgrindProcess *valgrindProcess() { return m_valgrindProc; } /** * Make data file available locally, triggers @c localParseDataAvailable. @@ -96,7 +96,7 @@ private Q_SLOTS: private: void cleanupTempFile(); - // callgrind_controll process + // callgrind_control process Valgrind::ValgrindProcess *m_process; // valgrind process Valgrind::ValgrindProcess *m_valgrindProc; diff --git a/src/libs/valgrind/callgrind/callgrindcycledetection.cpp b/src/libs/valgrind/callgrind/callgrindcycledetection.cpp index db4c7cd95a0..2922747fc9b 100644 --- a/src/libs/valgrind/callgrind/callgrindcycledetection.cpp +++ b/src/libs/valgrind/callgrind/callgrindcycledetection.cpp @@ -55,14 +55,14 @@ CycleDetection::CycleDetection(ParseData *data) QVector CycleDetection::run(const QVector &input) { - foreach(const Function *function, input) { + foreach (const Function *function, input) { Node *node = new Node; node->function = function; node->dfs = -1; node->lowlink = -1; m_nodes.insert(function, node); } - foreach(Node *node, m_nodes) { + foreach (Node *node, m_nodes) { if (node->dfs == -1) tarjan(node); } @@ -79,7 +79,7 @@ void CycleDetection::tarjan(Node *node) m_depth++; m_stack.push(node); - foreach(const FunctionCall *call, node->function->outgoingCalls()) + foreach (const FunctionCall *call, node->function->outgoingCalls()) tarjanForChildNode(node, m_nodes.value(call->callee())); if (node->dfs == node->lowlink) { @@ -88,7 +88,7 @@ void CycleDetection::tarjan(Node *node) do { n = m_stack.pop(); functions << n->function; - } while(n != node); + } while (n != node); if (functions.size() == 1) { // not a real cycle diff --git a/src/libs/valgrind/callgrind/callgrinddatamodel.cpp b/src/libs/valgrind/callgrind/callgrinddatamodel.cpp index f146b10e8a6..0cd2587a7ab 100644 --- a/src/libs/valgrind/callgrind/callgrinddatamodel.cpp +++ b/src/libs/valgrind/callgrind/callgrinddatamodel.cpp @@ -65,6 +65,7 @@ public: Private() : m_data(0) , m_event(0) + , m_verboseToolTips(true) , m_cycleDetection(false) { } @@ -77,6 +78,7 @@ public: const ParseData *m_data; int m_event; + bool m_verboseToolTips; bool m_cycleDetection; QVector m_functions; }; @@ -128,6 +130,16 @@ void DataModel::setParseData(const ParseData *data) endResetModel(); } +void DataModel::setVerboseToolTipsEnabled(bool enabled) +{ + d->m_verboseToolTips = enabled; +} + +bool DataModel::verboseToolTipsEnabled() const +{ + return d->m_verboseToolTips; +} + const ParseData *DataModel::parseData() const { return d->m_data; @@ -254,6 +266,9 @@ QVariant DataModel::data(const QModelIndex &index, int role) const else if (index.column() == InclusiveCostColumn) return inclusiveCost; } else if (role == Qt::ToolTipRole) { + if (!d->m_verboseToolTips) + return data(index, Qt::DisplayRole); + QString ret = "