analyzer: merge valgrind based tool plugins

It is hard to imagine there is a real use case that someone wants one but
absolutely not the other.

Change-Id: I58bb57912f2edeacf2d5a24e3b2eb5a81262eabd
Reviewed-on: http://codereview.qt.nokia.com/66
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
This commit is contained in:
hjk
2011-05-23 13:50:28 +02:00
committed by Friedemann Kleint
parent 84f60e5fda
commit 8bb99e4c75
70 changed files with 1228 additions and 1224 deletions

View File

@@ -1,22 +0,0 @@
<plugin name=\"Callgrind\" version=\"$$QTCREATOR_VERSION\" compatVersion=\"$$QTCREATOR_VERSION\">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2011 Nokia Corporation</copyright>
<license>
Commercial Usage
Licensees holding valid Qt Commercial licenses may use this plugin in accordance with the Qt Commercial License Agreement provided with the Software or, alternatively, in accordance with the terms contained in a written agreement between you and Nokia.
GNU Lesser General Public License Usage
Alternatively, this plugin may be used under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation. Please review the following information to ensure the GNU Lesser General Public License version 2.1 requirements will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
</license>
<category>Code Analyzer</category>
<description>Valgrind Callgrind Tool Plugin</description>
<url>http://qt.nokia.com</url>
<dependencyList>
<dependency name=\"Core\" version=\"$$QTCREATOR_VERSION\"/>
<dependency name=\"TextEditor\" version=\"$$QTCREATOR_VERSION\"/>
<dependency name=\"AnalyzerBase\" version=\"$$QTCREATOR_VERSION\"/>
<dependency name=\"ValgrindToolBase\" version=\"$$QTCREATOR_VERSION\"/>
</dependencyList>
</plugin>

View File

@@ -1,5 +0,0 @@
include(callgrind_dependencies.pri)
INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD
LIBS *= -l$$qtLibraryName(Callgrind)

View File

@@ -1,44 +0,0 @@
TEMPLATE = lib
TARGET = Callgrind
DEFINES += CALLGRIND_LIBRARY
include(../../qtcreatorplugin.pri)
include(callgrind_dependencies.pri)
# Callgrind files
HEADERS += \
callgrindplugin.h \
callgrind_global.h \
callgrindconfigwidget.h \
callgrindconstants.h \
callgrindcostdelegate.h \
callgrindcostview.h \
callgrindhelper.h \
callgrindnamedelegate.h \
callgrindsettings.h \
callgrindtool.h \
callgrindvisualisation.h \
callgrindwidgethandler.h \
callgrindengine.h \
workarounds.h \
callgrindtextmark.h
SOURCES += \
callgrindplugin.cpp \
callgrindconfigwidget.cpp \
callgrindcostdelegate.cpp \
callgrindcostview.cpp \
callgrindhelper.cpp \
callgrindnamedelegate.cpp \
callgrindsettings.cpp \
callgrindtool.cpp \
callgrindvisualisation.cpp \
callgrindwidgethandler.cpp \
callgrindengine.cpp \
workarounds.cpp \
callgrindtextmark.cpp
FORMS += \
callgrindconfigwidget.ui

View File

@@ -1,44 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (info@qt.nokia.com)
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
** If you have questions regarding the use of this file, please contact
** Nokia at info@qt.nokia.com.
**
**************************************************************************/
#ifndef CALLGRIND_GLOBAL_H
#define CALLGRIND_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(CALLGRIND_LIBRARY)
# define CALLGRINDSHARED_EXPORT Q_DECL_EXPORT
#else
# define CALLGRINDSHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // CALLGRIND_GLOBAL_H

View File

@@ -1,36 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (info@qt.nokia.com)
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
** If you have questions regarding the use of this file, please contact
** Nokia at info@qt.nokia.com.
**
**************************************************************************/
#ifndef CALLGRINDCONSTANTS_H
#define CALLGRINDCONSTANTS_H
#endif // CALLGRINDCONSTANTS_H

View File

@@ -1,74 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (info@qt.nokia.com)
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
** If you have questions regarding the use of this file, please contact
** Nokia at info@qt.nokia.com.
**
**************************************************************************/
#include "callgrindplugin.h"
#include "callgrindtool.h"
#include "callgrindsettings.h"
#include <analyzerbase/analyzermanager.h>
#include <QtCore/QStringList>
#include <QtCore/QtPlugin>
using namespace Analyzer;
namespace Callgrind {
namespace Internal {
static Analyzer::AbstractAnalyzerSubConfig *globalFactory()
{
return new CallgrindGlobalSettings();
}
static Analyzer::AbstractAnalyzerSubConfig *projectFactory()
{
return new CallgrindProjectSettings();
}
bool CallgrindPlugin::initialize(const QStringList &/*arguments*/, QString */*errorString*/)
{
AnalyzerGlobalSettings::instance()->registerSubConfigs(&globalFactory, &projectFactory);
AnalyzerManager::instance()->addTool(new CallgrindTool(this));
return true;
}
void CallgrindPlugin::extensionsInitialized()
{
}
} // namespace Internal
} // namespace Callgrind
Q_EXPORT_PLUGIN(Callgrind::Internal::CallgrindPlugin)

View File

@@ -1,487 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (info@qt.nokia.com)
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
** If you have questions regarding the use of this file, please contact
** Nokia at info@qt.nokia.com.
**
**************************************************************************/
#include "callgrindtool.h"
#include "callgrindconstants.h"
#include "callgrindcostview.h"
#include "callgrindengine.h"
#include "callgrindwidgethandler.h"
#include "callgrindtextmark.h"
#include "callgrindvisualisation.h"
#include "callgrindsettings.h"
#include <analyzerbase/analyzermanager.h>
#include <analyzerbase/analyzersettings.h>
#include <analyzerbase/analyzerutils.h>
#include <coreplugin/coreconstants.h>
#include <coreplugin/icontext.h>
#include <coreplugin/icore.h>
#include <coreplugin/actionmanager/actioncontainer.h>
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h>
#include <cplusplus/LookupContext.h>
#include <cplusplus/Overview.h>
#include <cppeditor/cppeditorconstants.h>
#include <extensionsystem/iplugin.h>
#include <texteditor/basetexteditor.h>
#include <utils/qtcassert.h>
#include <utils/fancymainwindow.h>
#include <utils/styledbar.h>
#include <valgrind/callgrind/callgrinddatamodel.h>
#include <valgrind/callgrind/callgrindparsedata.h>
#include <valgrind/callgrind/callgrindcostitem.h>
#include <valgrind/callgrind/callgrindproxymodel.h>
#include <valgrind/callgrind/callgrindfunction.h>
#include <valgrind/callgrind/callgrindstackbrowser.h>
#include <QtGui/QDockWidget>
#include <QtGui/QHBoxLayout>
#include <QtGui/QCheckBox>
#include <QtGui/QGraphicsItem>
#include <QtGui/QMenu>
#include <QtGui/QToolButton>
#include <QtGui/QAction>
#include <QtGui/QLineEdit>
#include <QtGui/QToolBar>
#include <QtCore/QFile>
#include <QtCore/QFileInfo>
// shared/cplusplus includes
#include <Symbols.h>
using namespace Analyzer;
using namespace Core;
using namespace Valgrind::Callgrind;
namespace Callgrind {
namespace Internal {
static QToolButton *createToolButton(QAction *action)
{
QToolButton *button = new QToolButton;
button->setDefaultAction(action);
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
return button;
}
CallgrindTool::CallgrindTool(QObject *parent)
: Analyzer::IAnalyzerTool(parent)
, m_callgrindWidgetHandler(0)
, m_dumpAction(0)
, m_resetAction(0)
, m_pauseAction(0)
, m_showCostsOfFunctionAction(0)
, m_toolbarWidget(0)
{
Core::ICore *core = Core::ICore::instance();
// EditorManager
QObject *editorManager = core->editorManager();
connect(editorManager, SIGNAL(editorOpened(Core::IEditor*)),
SLOT(editorOpened(Core::IEditor*)));
}
CallgrindTool::~CallgrindTool()
{
qDeleteAll(m_textMarks);
}
QString CallgrindTool::id() const
{
return "Callgrind";
}
QString CallgrindTool::displayName() const
{
return tr("Profile");
}
IAnalyzerTool::ToolMode CallgrindTool::mode() const
{
return ReleaseMode;
}
void CallgrindTool::initialize()
{
AnalyzerManager *am = AnalyzerManager::instance();
CallgrindWidgetHandler *handler = new CallgrindWidgetHandler(am->mainWindow());
m_callgrindWidgetHandler = handler;
connect(m_callgrindWidgetHandler, SIGNAL(functionSelected(const Valgrind::Callgrind::Function*)),
this, SLOT(slotFunctionSelected(const Valgrind::Callgrind::Function*)));
}
void CallgrindTool::initializeDockWidgets()
{
AnalyzerManager *am = AnalyzerManager::instance();
//QDockWidget *callersDock =
am->createDockWidget(this, tr("Callers"),
m_callgrindWidgetHandler->callersView(),
Qt::BottomDockWidgetArea);
QDockWidget *flatDock =
am->createDockWidget(this, tr("Functions"),
m_callgrindWidgetHandler->flatView(),
Qt::LeftDockWidgetArea);
QDockWidget *calleesDock =
am->createDockWidget(this, tr("Callees"),
m_callgrindWidgetHandler->calleesView(),
Qt::BottomDockWidgetArea);
//QDockWidget *visDock =
am->createDockWidget(this, tr("Visualization"),
m_callgrindWidgetHandler->visualisation(),
Qt::LeftDockWidgetArea);
am->mainWindow()->splitDockWidget(flatDock, calleesDock, Qt::Vertical);
am->mainWindow()->tabifyDockWidget(flatDock, calleesDock);
m_toolbarWidget = new QWidget;
m_toolbarWidget->setObjectName("CallgrindToolBarWidget");
QHBoxLayout *layout = new QHBoxLayout;
layout->setMargin(0);
layout->setSpacing(0);
m_toolbarWidget->setLayout(layout);
m_callgrindWidgetHandler->populateActions(layout);
CallgrindGlobalSettings *settings = AnalyzerGlobalSettings::instance()->subConfig<CallgrindGlobalSettings>();
m_callgrindWidgetHandler->setCostFormat(settings->costFormat());
m_callgrindWidgetHandler->enableCycleDetection(settings->detectCycles());
connect(m_callgrindWidgetHandler, SIGNAL(costFormatChanged(Callgrind::Internal::CostDelegate::CostFormat)),
settings, SLOT(setCostFormat(Callgrind::Internal::CostDelegate::CostFormat)));
connect(m_callgrindWidgetHandler, SIGNAL(cycleDetectionEnabled(bool)),
settings, SLOT(setDetectCycles(bool)));
}
void CallgrindTool::extensionsInitialized()
{
Core::ICore *core = Core::ICore::instance();
Core::ActionManager *actionManager = core->actionManager();
Core::Context analyzerContext = Core::Context(Analyzer::Constants::C_ANALYZEMODE);
// check if there is a CppEditor context menu, if true, add our own context menu actions
if (Core::ActionContainer *editorContextMenu =
actionManager->actionContainer(CppEditor::Constants::M_CONTEXT)) {
QAction *action = 0;
Core::Command *cmd = 0;
action = new QAction(this);
action->setSeparator(true);
cmd = actionManager->registerAction(action, "Analyzer.Callgrind.ContextMenu.Sep",
analyzerContext);
editorContextMenu->addAction(cmd);
action = new QAction(tr("Profile Costs of this Function and its Callees"), this);
action->setIcon(QIcon(Analyzer::Constants::ANALYZER_CONTROL_START_ICON));
connect(action, SIGNAL(triggered()), SLOT(handleShowCostsOfFunction()));
cmd = actionManager->registerAction(action, "Analyzer.Callgrind.ShowCostsOfFunction",
analyzerContext);
editorContextMenu->addAction(cmd);
cmd->setAttribute(Core::Command::CA_Hide);
cmd->setAttribute(Core::Command::CA_NonConfigurable);
m_showCostsOfFunctionAction = action;
}
}
IAnalyzerEngine *CallgrindTool::createEngine(const AnalyzerStartParameters &sp,
ProjectExplorer::RunConfiguration *runConfiguration)
{
CallgrindEngine *engine = new CallgrindEngine(sp, runConfiguration);
connect(engine, SIGNAL(parserDataReady(CallgrindEngine *)),
SLOT(takeParserData(CallgrindEngine *)));
connect(engine, SIGNAL(starting(const Analyzer::IAnalyzerEngine*)),
SLOT(engineStarting(const Analyzer::IAnalyzerEngine*)));
connect(engine, SIGNAL(finished()),
SLOT(engineFinished()));
connect(this, SIGNAL(dumpRequested()), engine, SLOT(dump()));
connect(this, SIGNAL(resetRequested()), engine, SLOT(reset()));
connect(this, SIGNAL(pauseToggled(bool)), engine, SLOT(setPaused(bool)));
// initialize engine
engine->setPaused(m_pauseAction->isChecked());
// we may want to toggle collect for one function only in this run
engine->setToggleCollectFunction(m_toggleCollectFunction);
m_toggleCollectFunction.clear();
AnalyzerManager::instance()->showStatusMessage(AnalyzerManager::msgToolStarted(displayName()));
// apply project settings
AnalyzerProjectSettings *analyzerSettings = runConfiguration->extraAspect<AnalyzerProjectSettings>();
CallgrindProjectSettings *settings = analyzerSettings->subConfig<CallgrindProjectSettings>();
QTC_ASSERT(settings, return engine)
m_callgrindWidgetHandler->visualisation()->setMinimumInclusiveCostRatio(settings->visualisationMinimumInclusiveCostRatio() / 100.0);
m_callgrindWidgetHandler->proxyModel()->setMinimumInclusiveCostRatio(settings->minimumInclusiveCostRatio() / 100.0);
m_callgrindWidgetHandler->dataModel()->setVerboseToolTipsEnabled(settings->enableEventToolTips());
return engine;
}
QWidget *CallgrindTool::createControlWidget()
{
QWidget *widget = new QWidget;
QHBoxLayout *layout = new QHBoxLayout;
layout->setMargin(0);
layout->setSpacing(0);
widget->setLayout(layout);
// dump action
m_dumpAction = new QAction(this);
m_dumpAction->setDisabled(true);
m_dumpAction->setIcon(QIcon(QLatin1String(Core::Constants::ICON_REDO)));
m_dumpAction->setText(tr("Dump"));
m_dumpAction->setToolTip(tr("Request the dumping of profile information. This will update the callgrind visualization."));
connect(m_dumpAction, SIGNAL(triggered()), this, SLOT(slotRequestDump()));
layout->addWidget(createToolButton(m_dumpAction));
// reset action
m_resetAction = new QAction(this);
m_resetAction->setDisabled(true);
m_resetAction->setIcon(QIcon(QLatin1String(Core::Constants::ICON_CLEAR)));
m_resetAction->setText(tr("Reset"));
m_resetAction->setToolTip(tr("Zero all event counters."));
connect(m_resetAction, SIGNAL(triggered()), this, SIGNAL(resetRequested()));
layout->addWidget(createToolButton(m_resetAction));
// pause action
m_pauseAction = new QAction(this);
m_pauseAction->setCheckable(true);
m_pauseAction->setIcon(QIcon(QLatin1String(":/qml/images/pause-small.png")));
m_pauseAction->setText(tr("Ignore"));
m_pauseAction->setToolTip(tr("If enabled, no events are counted which will speed up program execution during profiling."));
connect(m_pauseAction, SIGNAL(toggled(bool)), this, SIGNAL(pauseToggled(bool)));
layout->addWidget(createToolButton(m_pauseAction));
layout->addWidget(new Utils::StyledSeparator);
layout->addStretch();
return widget;
}
void CallgrindTool::clearErrorView()
{
clearTextMarks();
m_callgrindWidgetHandler->slotClear();
}
void CallgrindTool::clearTextMarks()
{
qDeleteAll(m_textMarks);
m_textMarks.clear();
}
void CallgrindTool::engineStarting(const Analyzer::IAnalyzerEngine *)
{
// enable/disable actions
m_resetAction->setEnabled(true);
m_dumpAction->setEnabled(true);
clearErrorView();
}
void CallgrindTool::engineFinished()
{
// enable/disable actions
m_resetAction->setEnabled(false);
m_dumpAction->setEnabled(false);
const ParseData *data = m_callgrindWidgetHandler->dataModel()->parseData();
if (data)
showParserResults(data);
else
AnalyzerManager::instance()->showStatusMessage(tr("Profiling aborted."));
}
void CallgrindTool::showParserResults(const ParseData *data)
{
QString msg;
if (data) {
// be careful, the list of events might be empty
if (data->events().isEmpty()) {
msg = tr("Parsing finished, no data.");
}
else {
const QString costStr = QString("%1 %2").arg(QString::number(data->totalCost(0)), data->events().first());
msg = tr("Parsing finished, total cost of %1 reported.").arg(costStr);
}
} else {
msg = tr("Parsing failed.");
}
AnalyzerManager::instance()->showStatusMessage(msg);
}
void CallgrindTool::editorOpened(Core::IEditor *editor)
{
TextEditor::ITextEditor *textEditor = qobject_cast<TextEditor::ITextEditor *>(editor);
if (!textEditor)
return;
connect(textEditor,
SIGNAL(markContextMenuRequested(TextEditor::ITextEditor*,int,QMenu*)),
SLOT(requestContextMenu(TextEditor::ITextEditor*,int,QMenu*)));
}
void CallgrindTool::requestContextMenu(TextEditor::ITextEditor *editor, int line, QMenu *menu)
{
// find callgrind text mark that corresponds to this editor's file and line number
const Function *func = 0;
foreach (CallgrindTextMark *textMark, m_textMarks) {
if (textMark->fileName() == editor->file()->fileName() && textMark->lineNumber() == line) {
func = textMark->function();
break;
}
}
if (!func)
return; // no callgrind text mark under cursor, return
// add our action to the context menu
QAction *action = new QAction(tr("Select this Function in the Analyzer Output"), menu);
connect(action, SIGNAL(triggered()), this, SLOT(handleShowCostsAction()));
action->setData(QVariant::fromValue<const Function *>(func));
menu->addAction(action);
}
void CallgrindTool::handleShowCostsAction()
{
const QAction *action = qobject_cast<QAction *>(sender());
QTC_ASSERT(action, return)
const Function *func = action->data().value<const Function *>();
QTC_ASSERT(func, return)
m_callgrindWidgetHandler->selectFunction(func);
}
void CallgrindTool::handleShowCostsOfFunction()
{
CPlusPlus::Symbol *symbol = AnalyzerUtils::findSymbolUnderCursor();
if (!symbol)
return;
if (!symbol->isFunction())
return;
CPlusPlus::Overview view;
const QString qualifiedFunctionName = view.prettyName(CPlusPlus::LookupContext::fullyQualifiedName(symbol));
m_toggleCollectFunction = QString("%1()").arg(qualifiedFunctionName);
AnalyzerManager::instance()->selectTool(this);
AnalyzerManager::instance()->startTool();
}
void CallgrindTool::slotRequestDump()
{
m_callgrindWidgetHandler->slotRequestDump();
emit dumpRequested();
}
void CallgrindTool::slotFunctionSelected(const Function *func)
{
if (func && QFile::exists(func->file())) {
///TODO: custom position support?
int line = func->lineNumber();
TextEditor::BaseTextEditorWidget::openEditorAt(func->file(), qMax(line, 0));
}
}
void CallgrindTool::takeParserData(CallgrindEngine *engine)
{
ParseData *data = engine->takeParserData();
showParserResults(data);
if (!data)
return;
// clear first
clearErrorView();
m_callgrindWidgetHandler->setParseData(data);
createTextMarks();
}
void CallgrindTool::createTextMarks()
{
DataModel *model = m_callgrindWidgetHandler->dataModel();
QTC_ASSERT(model, return)
QList<QString> locations;
for (int row = 0; row < model->rowCount(); ++row)
{
const QModelIndex index = model->index(row, DataModel::InclusiveCostColumn);
QString fileName = index.data(DataModel::FileNameRole).toString();
if (fileName.isEmpty() || fileName == "???")
continue;
bool ok = false;
const int lineNumber = index.data(DataModel::LineNumberRole).toInt(&ok);
QTC_ASSERT(ok, continue);
// sanitize filename, text marks need a canonical (i.e. no ".."s) path
// BaseTextMark::editorOpened(Core::IEditor *editor) compares file names on string basis
QFileInfo info(fileName);
fileName = info.canonicalFilePath();
if (fileName.isEmpty())
continue; // isEmpty == true => file does not exist, continue then
// create only one text mark per location
const QString location = QString("%1:%2").arg(fileName, QString::number(lineNumber));
if (locations.contains(location))
continue;
locations << location;
CallgrindTextMark *mark = new CallgrindTextMark(index, fileName, lineNumber);
m_textMarks << mark;
}
}
bool CallgrindTool::canRunRemotely() const
{
return true;
}
} // namespace Internal
} // namespace Callgrind

View File

@@ -1,141 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (info@qt.nokia.com)
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
** If you have questions regarding the use of this file, please contact
** Nokia at info@qt.nokia.com.
**
**************************************************************************/
#ifndef CALLGRINDTOOL_H
#define CALLGRINDTOOL_H
#include <analyzerbase/ianalyzertool.h>
#include <QtCore/QVector>
QT_BEGIN_NAMESPACE
class QAction;
class QMenu;
QT_END_NAMESPACE
namespace Valgrind {
namespace Callgrind {
class Function;
class ParseData;
}
}
namespace TextEditor {
class ITextEditor;
}
namespace Core {
class IEditor;
}
namespace Callgrind {
namespace Internal {
class CallgrindEngine;
class CallgrindWidgetHandler;
class CallgrindTextMark;
class CallgrindTool : public Analyzer::IAnalyzerTool
{
Q_OBJECT
public:
explicit CallgrindTool(QObject *parent = 0);
virtual ~CallgrindTool();
virtual QString id() const;
virtual QString displayName() const;
virtual ToolMode mode() const;
virtual void initialize();
virtual void extensionsInitialized();
virtual void initializeDockWidgets();
virtual Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp,
ProjectExplorer::RunConfiguration *runConfiguration = 0);
virtual QWidget *createControlWidget();
// For the output pane adapter.
void clearErrorView();
virtual bool canRunRemotely() const;
bool needsOutputPane() const { return false; }
signals:
void dumpRequested();
void resetRequested();
void pauseToggled(bool checked);
void profilingStartRequested(const QString &toggleCollectFunction);
private slots:
void showParserResults(const Valgrind::Callgrind::ParseData *data);
void slotRequestDump();
void slotFunctionSelected(const Valgrind::Callgrind::Function *);
void editorOpened(Core::IEditor *);
void requestContextMenu(TextEditor::ITextEditor *editor, int line, QMenu *menu);
void handleShowCostsAction();
void handleShowCostsOfFunction();
void takeParserData(CallgrindEngine *engine);
void engineStarting(const Analyzer::IAnalyzerEngine *);
void engineFinished();
private:
/// This function will add custom text marks to the editor
/// \note Call this after the data model has been populated
void createTextMarks();
/// This function will clear all text marks from the editor
void clearTextMarks();
CallgrindWidgetHandler *m_callgrindWidgetHandler;
QVector<CallgrindTextMark *> m_textMarks;
QAction *m_dumpAction;
QAction *m_resetAction;
QAction *m_pauseAction;
QAction *m_showCostsOfFunctionAction;
QWidget *m_toolbarWidget;
QString m_toggleCollectFunction;
};
} // namespace Internal
} // namespace Callgrind
#endif // CALLGRINDTOOL_H

View File

@@ -1,21 +0,0 @@
<plugin name=\"Memcheck\" version=\"$$QTCREATOR_VERSION\" compatVersion=\"$$QTCREATOR_VERSION\">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2011 Nokia Corporation</copyright>
<license>
Commercial Usage
Licensees holding valid Qt Commercial licenses may use this plugin in accordance with the Qt Commercial License Agreement provided with the Software or, alternatively, in accordance with the terms contained in a written agreement between you and Nokia.
GNU Lesser General Public License Usage
Alternatively, this plugin may be used under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation. Please review the following information to ensure the GNU Lesser General Public License version 2.1 requirements will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
</license>
<category>Code Analyzer</category>
<description>Valgrind Memcheck Tool Plugin</description>
<url>http://qt.nokia.com</url>
<dependencyList>
<dependency name=\"Core\" version=\"$$QTCREATOR_VERSION\"/>
<dependency name=\"AnalyzerBase\" version=\"$$QTCREATOR_VERSION\"/>
<dependency name=\"ValgrindToolBase\" version=\"$$QTCREATOR_VERSION\"/>
</dependencyList>
</plugin>

View File

@@ -1,4 +0,0 @@
include(memcheck_dependencies.pri)
INCLUDEPATH += $$PWD
LIBS *= -l$$qtLibraryName(Memcheck)

View File

@@ -1,3 +0,0 @@
include(../../plugins/coreplugin/coreplugin.pri)
include(../../plugins/analyzerbase/analyzerbase.pri)
include(../../plugins/valgrindtoolbase/valgrindtoolbase.pri)

View File

@@ -1,46 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
**
** Author: Nicolas Arnaud-Cormos, KDAB (nicolas.arnaud-cormos@kdab.com)
**
** Contact: Nokia Corporation (info@qt.nokia.com)
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
** If you have questions regarding the use of this file, please contact
** Nokia at info@qt.nokia.com.
**
**************************************************************************/
#ifndef MEMCHECK_GLOBAL_H
#define MEMCHECK_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(MEMCHECK_LIBRARY)
# define MEMCHECKSHARED_EXPORT Q_DECL_EXPORT
#else
# define MEMCHECKSHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // MEMCHECK_GLOBAL_H

View File

@@ -1,57 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
**
** Author: Milian Wolff, KDAB (milian.wolff@kdab.com)
**
** Contact: Nokia Corporation (info@qt.nokia.com)
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
** If you have questions regarding the use of this file, please contact
** Nokia at info@qt.nokia.com.
**
**************************************************************************/
#ifndef MEMCHECKPLUGIN_H
#define MEMCHECKPLUGIN_H
#include <extensionsystem/iplugin.h>
namespace Memcheck {
namespace Internal {
class MemcheckPlugin : public ExtensionSystem::IPlugin
{
Q_OBJECT
public:
MemcheckPlugin() {}
virtual bool initialize(const QStringList &arguments, QString *errorString);
virtual void extensionsInitialized();
};
} // namespace Internal
} // namespace Memcheck
#endif // MEMCHECKPLUGIN_H

View File

@@ -44,9 +44,7 @@ SUBDIRS = plugin_coreplugin \
plugin_qmlprofiler
!win32 {
SUBDIRS += plugin_valgrindtoolbase \
plugin_memcheck \
plugin_callgrind
SUBDIRS += plugin_valgrind
}
linux-* {
@@ -256,19 +254,9 @@ plugin_analyzerbase.depends = plugin_coreplugin
plugin_analyzerbase.depends += plugin_projectexplorer
!win32 {
plugin_valgrindtoolbase.subdir = valgrindtoolbase
plugin_valgrindtoolbase.depends = plugin_coreplugin
plugin_valgrindtoolbase.depends += plugin_analyzerbase
plugin_memcheck.subdir = memcheck
plugin_memcheck.depends = plugin_coreplugin
plugin_memcheck.depends += plugin_analyzerbase
plugin_memcheck.depends += plugin_valgrindtoolbase
plugin_callgrind.subdir = callgrind
plugin_callgrind.depends = plugin_coreplugin
plugin_callgrind.depends += plugin_analyzerbase
plugin_callgrind.depends += plugin_valgrindtoolbase
plugin_valgrind.subdir = valgrind
plugin_valgrind.depends = plugin_coreplugin
plugin_valgrind.depends += plugin_analyzerbase
}
plugin_qmlprofiler.subdir = qmlprofiler

View File

@@ -1,4 +1,4 @@
<plugin name=\"ValgrindToolBase\" version=\"$$QTCREATOR_VERSION\" compatVersion=\"$$QTCREATOR_VERSION\">
<plugin name=\"Valgrind\" version=\"$$QTCREATOR_VERSION\" compatVersion=\"$$QTCREATOR_VERSION\">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2011 Nokia Corporation</copyright>
<license>
@@ -11,7 +11,7 @@ GNU Lesser General Public License Usage
Alternatively, this plugin may be used under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation. Please review the following information to ensure the GNU Lesser General Public License version 2.1 requirements will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
</license>
<category>Code Analyzer</category>
<description>Valgrind Tool Base Plugin</description>
<description>Valgrind Plugin</description>
<url>http://qt.nokia.com</url>
<dependencyList>
<dependency name=\"Core\" version=\"$$QTCREATOR_VERSION\"/>

View File

@@ -36,7 +36,7 @@
#include "callgrindsettings.h"
using namespace Callgrind::Internal;
using namespace Valgrind::Internal;
CallgrindConfigWidget::CallgrindConfigWidget(AbstractCallgrindSettings *settings, QWidget *parent)
: QWidget(parent)

View File

@@ -35,7 +35,7 @@
#include <QtGui/QWidget>
namespace Callgrind {
namespace Valgrind {
namespace Internal {
namespace Ui {
@@ -56,6 +56,6 @@ private:
};
} // namespace Internal
} // namespace Callgrind
} // namespace Valgrind
#endif // ANALYZER_INTERNAL_CALLGRINDCONFIGWIDGET_H

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Callgrind::Internal::CallgrindConfigWidget</class>
<widget class="QWidget" name="Callgrind::Internal::CallgrindConfigWidget">
<class>Valgrind::Internal::CallgrindConfigWidget</class>
<widget class="QWidget" name="Valgrind::Internal::CallgrindConfigWidget">
<property name="geometry">
<rect>
<x>0</x>

View File

@@ -45,7 +45,7 @@
using namespace Valgrind::Callgrind;
namespace Callgrind {
namespace Valgrind {
namespace Internal {
class CostDelegate::Private
@@ -177,5 +177,5 @@ QSize CostDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelInd
return size;
}
} // Internal
} // Callgrind
} // namespace Internal
} // namespace Valgrind

View File

@@ -35,7 +35,7 @@
#include <QtGui/QStyledItemDelegate>
namespace Callgrind {
namespace Valgrind {
namespace Internal {
class CostDelegate : public QStyledItemDelegate
@@ -67,9 +67,9 @@ private:
Private *d;
};
} // Internal
} // Callgrind
} // namespace Internal
} // namespace Valgrind
Q_DECLARE_METATYPE(Callgrind::Internal::CostDelegate::CostFormat)
Q_DECLARE_METATYPE(Valgrind::Internal::CostDelegate::CostFormat)
#endif // CALLGRINDCOSTDELEGATE_H

View File

@@ -45,11 +45,9 @@
using namespace Valgrind::Callgrind;
namespace Callgrind {
namespace Valgrind {
namespace Internal {
//BEGIN CostView::Private
class CostView::Private
{
public:
@@ -64,9 +62,6 @@ CostView::Private::Private(CostView *qq)
, m_nameDelegate(new NameDelegate(qq))
{}
//END CostView::Private
//BEGIN CostView
CostView::CostView(QWidget *parent)
: QTreeView(parent)
@@ -135,7 +130,5 @@ CostDelegate::CostFormat CostView::costFormat() const
return d->m_costDelegate->format();
}
//END CostView
} // Internal
} // Callgrind
} // namespace Internal
} // namespace Valgrind

View File

@@ -37,7 +37,7 @@
#include "callgrindcostdelegate.h"
namespace Callgrind {
namespace Valgrind {
namespace Internal {
class CostView : public QTreeView
@@ -65,7 +65,7 @@ private:
Private *d;
};
} // Internal
} // Callgrind
} // namespace Internal
} // namespace Valgrind
#endif // CALLGRINDCOSTVIEW_H

View File

@@ -42,8 +42,8 @@
#include <utils/qtcassert.h>
using namespace Analyzer;
using namespace Callgrind;
using namespace Callgrind::Internal;
using namespace Valgrind;
using namespace Valgrind::Internal;
CallgrindEngine::CallgrindEngine(const AnalyzerStartParameters &sp,
ProjectExplorer::RunConfiguration *runConfiguration)

View File

@@ -33,12 +33,12 @@
#ifndef CALLGRINDENGINE_H
#define CALLGRINDENGINE_H
#include <valgrindtoolbase/valgrindengine.h>
#include <valgrind/valgrindengine.h>
#include <valgrind/callgrind/callgrindrunner.h>
#include <valgrind/callgrind/callgrindparsedata.h>
namespace Callgrind {
namespace Valgrind {
namespace Internal {
class CallgrindEngine : public Valgrind::Internal::ValgrindEngine
@@ -89,6 +89,6 @@ private slots:
};
} // namespace Internal
} // namespace Callgrind
} // namespace Valgrind
#endif // CALLGRINDENGINE_H

View File

@@ -38,7 +38,7 @@
#include <QtCore/QMap>
#include <QtCore/QString>
namespace Callgrind {
namespace Valgrind {
namespace Internal {
QColor CallgrindHelper::colorForString(const QString &text)
@@ -74,4 +74,4 @@ QString CallgrindHelper::toPercent(float costs, const QLocale &locale)
}
} // namespace Internal
} // namespace Callgrind
} // namespace Valgrind

View File

@@ -40,7 +40,7 @@ class QColor;
class QString;
QT_END_NAMESPACE
namespace Callgrind {
namespace Valgrind {
namespace Internal {
namespace CallgrindHelper
@@ -63,6 +63,6 @@ namespace CallgrindHelper
}
} // namespace Internal
} // namespace Callgrind
} // namespace Valgrind
#endif // CALLGRINDHELPER_H

View File

@@ -37,7 +37,7 @@
#include <QtGui/QApplication>
#include <QtGui/QPainter>
namespace Callgrind {
namespace Valgrind {
namespace Internal {
NameDelegate::NameDelegate(QObject *parent)
@@ -91,5 +91,5 @@ void NameDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
painter->restore();
}
} // Internal
} // Callgrind
} // namespace Internal
} // namespace Valgrind

View File

@@ -35,7 +35,7 @@
#include <QtGui/QStyledItemDelegate>
namespace Callgrind {
namespace Valgrind {
namespace Internal {
class NameDelegate : public QStyledItemDelegate
@@ -50,7 +50,7 @@ public:
const QModelIndex &index) const;
};
} // Internal
} // Callgrind
} // namespace Internal
} // namespace Valgrind
#endif // CALLGRINDNAMEDELEGATE_H

View File

@@ -49,7 +49,7 @@ static const char callgrindVisualisationMinimumCostRatioC[] = "Analyzer.Valgrind
static const char callgrindCycleDetectionC[] = "Analyzer.Valgrind.Callgrind.CycleDetection";
static const char callgrindCostFormatC[] = "Analyzer.Valgrind.Callgrind.CostFormat";
namespace Callgrind {
namespace Valgrind {
namespace Internal {
void AbstractCallgrindSettings::setEnableCacheSim(bool enable)
@@ -223,4 +223,4 @@ void CallgrindGlobalSettings::setDetectCycles(bool detect)
}
} // namespace Internal
} // namespace Callgrind
} // namespace Valgrind

View File

@@ -39,7 +39,7 @@
#include <QtCore/QString>
namespace Callgrind {
namespace Valgrind {
namespace Internal {
/**
@@ -125,7 +125,7 @@ public:
bool detectCycles() const;
public slots:
void setCostFormat(Callgrind::Internal::CostDelegate::CostFormat format);
void setCostFormat(Valgrind::Internal::CostDelegate::CostFormat format);
void setDetectCycles(bool detect);
protected:
@@ -148,6 +148,6 @@ public:
};
} // namespace Internal
} // namespace Callgrind
} // namespace Valgrind
#endif // ANALYZER_INTERNAL_CALLGRINDSETTINGS_H

View File

@@ -42,7 +42,7 @@
#include <utils/qtcassert.h>
using namespace Callgrind::Internal;
using namespace Valgrind::Internal;
using namespace Valgrind::Callgrind;
CallgrindTextMark::CallgrindTextMark(const QPersistentModelIndex &index,

View File

@@ -38,12 +38,11 @@
#include <QtCore/QPersistentModelIndex>
namespace Valgrind {
namespace Callgrind {
class Function;
}
}
namespace Callgrind {
namespace Internal {
class CallgrindTextMark : public TextEditor::BaseTextMark
@@ -70,6 +69,6 @@ private:
};
} // namespace Internal
} // namespace Callgrind
} // namespace Valgrind
#endif // CALLGRINDTEXTMARK_H

File diff suppressed because it is too large Load Diff

View File

@@ -30,26 +30,44 @@
**
**************************************************************************/
#ifndef CALLGRINDPLUGIN_H
#define CALLGRINDPLUGIN_H
#ifndef CALLGRINDTOOL_H
#define CALLGRINDTOOL_H
#include <extensionsystem/iplugin.h>
#include <analyzerbase/ianalyzertool.h>
namespace Callgrind {
namespace Valgrind {
namespace Internal {
class CallgrindPlugin : public ExtensionSystem::IPlugin
class CallgrindToolPrivate;
class CallgrindTool : public Analyzer::IAnalyzerTool
{
Q_OBJECT
public:
CallgrindPlugin() {}
explicit CallgrindTool(QObject *parent = 0);
~CallgrindTool();
virtual bool initialize(const QStringList &arguments, QString *errorString);
virtual void extensionsInitialized();
QString id() const;
QString displayName() const;
ToolMode mode() const;
void initialize();
void extensionsInitialized();
void initializeDockWidgets();
Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp,
ProjectExplorer::RunConfiguration *runConfiguration = 0);
QWidget *createControlWidget();
bool canRunRemotely() const { return true; }
bool needsOutputPane() const { return false; }
private:
CallgrindToolPrivate *d;
};
} // namespace Internal
} // namespace Callgrind
} // namespace Valgrind
#endif // CALLGRINDPLUGIN_H
#endif // CALLGRINDTOOL_H

View File

@@ -61,7 +61,7 @@ static const int FIT_IN_VIEW_MARGIN = 2;
using namespace Valgrind::Callgrind;
namespace Callgrind {
namespace Valgrind {
namespace Internal {
class FunctionGraphicsTextItem : public QAbstractGraphicsShapeItem
@@ -461,4 +461,4 @@ void Visualisation::resizeEvent(QResizeEvent *event)
}
} // namespace Internal
} // namespace Callgrind
} // namespace Valgrind

View File

@@ -46,7 +46,7 @@ class Function;
}
}
namespace Callgrind {
namespace Valgrind {
namespace Internal {
class Visualisation : public QGraphicsView
@@ -89,6 +89,6 @@ private:
};
} // namespace Internal
} // namespace Callgrind
} // namespace Valgrind
#endif // VALGRIND_CALLGRIND_CALLGRINDVISUALISATION_H

View File

@@ -44,7 +44,7 @@
#include <QtGui/QFileDialog>
#include <QtCore/QDebug>
namespace Memcheck {
namespace Valgrind {
namespace Internal {
MemcheckConfigWidget::MemcheckConfigWidget(AbstractMemcheckSettings *settings, QWidget *parent)
@@ -179,4 +179,4 @@ void MemcheckConfigWidget::slotSuppressionSelectionChanged()
}
} // namespace Internal
} // namespace Memcheck
} // namespace Valgrind

View File

@@ -41,7 +41,7 @@ QT_BEGIN_NAMESPACE
class QStandardItemModel;
QT_END_NAMESPACE
namespace Memcheck {
namespace Valgrind {
namespace Internal {
namespace Ui {
@@ -75,6 +75,6 @@ private:
};
} // namespace Internal
} // namespace Memcheck
} // namespace Valgrind
#endif // ANALYZER_INTERNAL_MEMCHECKCONFIGWIDGET_H

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Memcheck::Internal::MemcheckConfigWidget</class>
<widget class="QWidget" name="Memcheck::Internal::MemcheckConfigWidget">
<class>Valgrind::Internal::MemcheckConfigWidget</class>
<widget class="QWidget" name="Valgrind::Internal::MemcheckConfigWidget">
<property name="geometry">
<rect>
<x>0</x>

View File

@@ -46,7 +46,7 @@
using namespace Analyzer;
using namespace Valgrind::XmlProtocol;
namespace Memcheck {
namespace Valgrind {
namespace Internal {
MemcheckEngine::MemcheckEngine(const Analyzer::AnalyzerStartParameters &sp,
@@ -145,4 +145,4 @@ void MemcheckEngine::receiveLogMessage(const QByteArray &b)
}
} // namespace Internal
} // namespace Memcheck
} // namespace Valgrind

View File

@@ -35,15 +35,15 @@
#ifndef MEMCHECKENGINE_H
#define MEMCHECKENGINE_H
#include "valgrindengine.h"
#include <valgrind/memcheck/memcheckrunner.h>
#include <valgrind/xmlprotocol/threadedparser.h>
#include <valgrindtoolbase/valgrindengine.h>
namespace Memcheck {
namespace Valgrind {
namespace Internal {
class MemcheckEngine : public Valgrind::Internal::ValgrindEngine
class MemcheckEngine : public ValgrindEngine
{
Q_OBJECT
public:
@@ -75,6 +75,6 @@ private:
};
} // namespace Internal
} // namespace Memcheck
} // namespace Valgrind
#endif // MEMCHECKENGINE_H

View File

@@ -35,6 +35,7 @@
#include "memcheckerrorview.h"
#include "suppressiondialog.h"
#include "valgrindsettings.h"
#include <valgrind/xmlprotocol/error.h>
#include <valgrind/xmlprotocol/errorlistmodel.h>
@@ -43,8 +44,6 @@
#include <valgrind/xmlprotocol/modelhelpers.h>
#include <valgrind/xmlprotocol/suppression.h>
#include <valgrindtoolbase/valgrindsettings.h>
#include <texteditor/basetexteditor.h>
#include <projectexplorer/projectexplorer.h>
@@ -69,7 +68,7 @@
using namespace Valgrind::XmlProtocol;
namespace Memcheck {
namespace Valgrind {
namespace Internal {
MemcheckErrorDelegate::MemcheckErrorDelegate(QListView *parent)
@@ -148,7 +147,7 @@ static QString makeFrameName(const Frame &frame, const QString &relativeTo,
}
if (!fn.isEmpty())
return QCoreApplication::translate("Memcheck::Internal", "%1 in %2").arg(Qt::escape(fn), path);
return QCoreApplication::translate("Valgrind::Internal", "%1 in %2").arg(Qt::escape(fn), path);
if (!path.isEmpty())
return path;
return QString("0x%1").arg(frame.instructionPointer(), 0, 16);
@@ -178,7 +177,7 @@ QString errorLocation(const QModelIndex &index, const Error &error,
}
QTC_ASSERT(model, return QString());
return QCoreApplication::translate("Memcheck::Internal", "in %1").
return QCoreApplication::translate("Valgrind::Internal", "in %1").
arg(makeFrameName(model->findRelevantFrame(error), relativeToPath(),
link, linkAttr));
}
@@ -509,4 +508,4 @@ void MemcheckErrorView::suppressError()
}
} // namespace Internal
} // namespace Memcheck
} // namespace Valgrind

View File

@@ -47,7 +47,7 @@ namespace ProjectExplorer {
class Project;
}
namespace Memcheck {
namespace Valgrind {
namespace Internal {
class MemcheckErrorDelegate : public QStyledItemDelegate
@@ -120,6 +120,6 @@ private:
};
} // namespace Internal
} // namespace Memcheck
} // namespace Valgrind
#endif // MEMCHECKERRORVIEW_H

View File

@@ -52,7 +52,7 @@ static const char visibleErrorKindsC[] = "Analyzer.Valgrind.VisibleErrorKinds";
static const char lastSuppressionDirectoryC[] = "Analyzer.Valgrind.LastSuppressionDirectory";
static const char lastSuppressionHistoryC[] = "Analyzer.Valgrind.LastSuppressionHistory";
namespace Memcheck {
namespace Valgrind {
namespace Internal {
QVariantMap AbstractMemcheckSettings::defaults() const
@@ -277,4 +277,4 @@ QStringList MemcheckProjectSettings::suppressionFiles() const
}
} // namespace Internal
} // namespace Memcheck
} // namespace Valgrind

View File

@@ -37,7 +37,7 @@
#include <analyzerbase/analyzersettings.h>
namespace Memcheck {
namespace Valgrind {
namespace Internal {
/**
@@ -147,6 +147,6 @@ private:
};
} // namespace Internal
} // namespace Memcheck
} // namespace Valgrind
#endif // ANALYZER_INTERNAL_MEMCHECKSETTINGS_H

View File

@@ -36,6 +36,7 @@
#include "memcheckengine.h"
#include "memcheckerrorview.h"
#include "memchecksettings.h"
#include "valgrindsettings.h"
#include <analyzerbase/analyzermanager.h>
#include <analyzerbase/analyzerconstants.h>
@@ -48,8 +49,6 @@
#include <valgrind/xmlprotocol/stack.h>
#include <valgrind/xmlprotocol/suppression.h>
#include <valgrindtoolbase/valgrindsettings.h>
#include <extensionsystem/iplugin.h>
#include <extensionsystem/pluginmanager.h>
@@ -94,7 +93,7 @@
using namespace Analyzer;
using namespace Valgrind::XmlProtocol;
namespace Memcheck {
namespace Valgrind {
namespace Internal {
// Adapter for output pane.
@@ -547,4 +546,4 @@ bool MemcheckTool::canRunRemotely() const
}
} // namespace Internal
} // namespace Memcheck
} // namespace Valgrind

View File

@@ -62,7 +62,7 @@ namespace Analyzer
class AnalyzerSettings;
}
namespace Memcheck {
namespace Valgrind {
namespace Internal {
class MemCheckOutputPaneAdapter;
@@ -144,6 +144,6 @@ private:
};
} // namespace Internal
} // namespace Memcheck
} // namespace Valgrind
#endif // MEMCHECKTOOL_H

View File

@@ -126,7 +126,7 @@ bool sortIndizesReverse(const QModelIndex &l, const QModelIndex &r)
} // namespace anoe
namespace Memcheck {
namespace Valgrind {
namespace Internal {
SuppressionDialog::SuppressionDialog(MemcheckErrorView *view, QWidget *parent, Qt::WindowFlags f)
@@ -256,4 +256,4 @@ void SuppressionDialog::validate()
}
} // namespace Internal
} // namespace Memcheck
} // namespace Valgrind

View File

@@ -43,7 +43,7 @@ namespace Analyzer {
class AnalyzerSettings;
}
namespace Memcheck {
namespace Valgrind {
namespace Internal {
namespace Ui {
@@ -76,6 +76,6 @@ private:
};
} // namespace Internal
} // namespace Memcheck
} // namespace Valgrind
#endif // ANALYZER_VALGRIND_INTERNAL_SUPPRESSIONDIALOG_H

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Memcheck::Internal::SuppressionDialog</class>
<widget class="QDialog" name="Memcheck::Internal::SuppressionDialog">
<class>Valgrind::Internal::SuppressionDialog</class>
<widget class="QDialog" name="Valgrind::Internal::SuppressionDialog">
<property name="geometry">
<rect>
<x>0</x>

View File

@@ -0,0 +1,4 @@
include(valgrind_dependencies.pri)
INCLUDEPATH += $$PWD
LIBS *= -l$$qtLibraryName(Valgrind)

View File

@@ -0,0 +1,67 @@
TEMPLATE = lib
TARGET = Valgrind
DEFINES += VALGRIND_LIBRARY
include(../../qtcreatorplugin.pri)
include(valgrind.pri)
QT += network
HEADERS += \
valgrindplugin.h \
valgrind_global.h \
valgrindengine.h \
valgrindconfigwidget.h \
valgrindsettings.h \
\
callgrindconfigwidget.h \
callgrindcostdelegate.h \
callgrindcostview.h \
callgrindhelper.h \
callgrindnamedelegate.h \
callgrindsettings.h \
callgrindtool.h \
callgrindvisualisation.h \
callgrindengine.h \
workarounds.h \
callgrindtextmark.h \
\
memchecktool.h \
memcheckengine.h \
memcheckerrorview.h \
memchecksettings.h \
memcheckconfigwidget.h \
suppressiondialog.h
SOURCES += \
valgrindplugin.cpp \
valgrindengine.cpp \
valgrindconfigwidget.cpp \
valgrindsettings.cpp \
\
callgrindconfigwidget.cpp \
callgrindcostdelegate.cpp \
callgrindcostview.cpp \
callgrindhelper.cpp \
callgrindnamedelegate.cpp \
callgrindsettings.cpp \
callgrindtool.cpp \
callgrindvisualisation.cpp \
callgrindengine.cpp \
workarounds.cpp \
callgrindtextmark.cpp \
\
memchecktool.cpp \
memcheckengine.cpp \
memcheckerrorview.cpp \
memchecksettings.cpp \
memcheckconfigwidget.cpp \
suppressiondialog.cpp
FORMS += \
valgrindconfigwidget.ui \
callgrindconfigwidget.ui \
suppressiondialog.ui \
memcheckconfigwidget.ui

View File

@@ -1,5 +1,4 @@
include(../../libs/cplusplus/cplusplus.pri)
include(../../plugins/analyzerbase/analyzerbase.pri)
include(../../plugins/coreplugin/coreplugin.pri)
include(../../plugins/texteditor/texteditor.pri)
include(../../plugins/analyzerbase/analyzerbase.pri)
include(../../plugins/valgrindtoolbase/valgrindtoolbase.pri)
include(../../libs/cplusplus/cplusplus.pri)

View File

@@ -35,10 +35,9 @@
#ifndef VALGRINDENGINE_H
#define VALGRINDENGINE_H
#include "valgrind_global.h"
#include <analyzerbase/ianalyzerengine.h>
#include "valgrindtoolbase_global.h"
#include <analyzerbase/ianalyzerengine.h>
#include <utils/environment.h>

View File

@@ -32,43 +32,62 @@
**
**************************************************************************/
#include "memcheckplugin.h"
#include <analyzerbase/analyzermanager.h>
#include <analyzerbase/analyzersettings.h>
#include "valgrindplugin.h"
#include "valgrindsettings.h"
#include "callgrindtool.h"
#include "callgrindsettings.h"
#include "memchecktool.h"
#include "memchecksettings.h"
#include <analyzerbase/analyzersettings.h>
#include <analyzerbase/analyzermanager.h>
#include <QtCore/QStringList>
#include <QtCore/QtPlugin>
using namespace Analyzer;
using namespace Memcheck;
using namespace Valgrind::Internal;
using namespace Memcheck::Internal;
static Analyzer::AbstractAnalyzerSubConfig *globalFactory()
static AbstractAnalyzerSubConfig *valgrindConfigFactory()
{
return new ValgrindSettings();
}
static AbstractAnalyzerSubConfig *globalCallgrindFactory()
{
return new CallgrindGlobalSettings();
}
static AbstractAnalyzerSubConfig *projectCallgrindFactory()
{
return new CallgrindProjectSettings();
}
static AbstractAnalyzerSubConfig *globalMemcheckFactory()
{
return new MemcheckGlobalSettings();
}
static Analyzer::AbstractAnalyzerSubConfig *projectFactory()
static AbstractAnalyzerSubConfig *projectMemcheckFactory()
{
return new MemcheckProjectSettings();
}
bool MemcheckPlugin::initialize(const QStringList &/*arguments*/, QString */*errorString*/)
bool ValgrindPlugin::initialize(const QStringList &, QString *)
{
AnalyzerGlobalSettings::instance()->registerSubConfigs(&globalFactory, &projectFactory);
AnalyzerGlobalSettings::instance()->registerSubConfigs(&valgrindConfigFactory, &valgrindConfigFactory);
AnalyzerGlobalSettings::instance()->registerSubConfigs(&globalCallgrindFactory, &projectCallgrindFactory);
AnalyzerGlobalSettings::instance()->registerSubConfigs(&globalMemcheckFactory, &projectMemcheckFactory);
AnalyzerManager::instance()->addTool(new MemcheckTool(this));
AnalyzerManager::instance()->addTool(new CallgrindTool(this));
return true;
}
void MemcheckPlugin::extensionsInitialized()
void ValgrindPlugin::extensionsInitialized()
{
}
Q_EXPORT_PLUGIN(MemcheckPlugin)
Q_EXPORT_PLUGIN(Valgrind::Internal::ValgrindPlugin)

View File

@@ -40,12 +40,12 @@
namespace Valgrind {
namespace Internal {
class ValgrindToolbasePlugin : public ExtensionSystem::IPlugin
class ValgrindPlugin : public ExtensionSystem::IPlugin
{
Q_OBJECT
public:
ValgrindToolbasePlugin() {}
ValgrindPlugin() {}
virtual bool initialize(const QStringList &arguments, QString *errorString);
virtual void extensionsInitialized();

View File

@@ -35,9 +35,9 @@
#ifndef ANALYZER_INTERNAL_VALGRINDSETTINGS_H
#define ANALYZER_INTERNAL_VALGRINDSETTINGS_H
#include <analyzerbase/analyzersettings.h>
#include "valgrind_global.h"
#include "valgrindtoolbase_global.h"
#include <analyzerbase/analyzersettings.h>
#include <QtCore/QObject>
#include <QtCore/QVariant>

View File

@@ -1,4 +0,0 @@
include(valgrindtoolbase_dependencies.pri)
INCLUDEPATH += $$PWD
LIBS *= -l$$qtLibraryName(ValgrindToolBase)

View File

@@ -1,27 +0,0 @@
TEMPLATE = lib
TARGET = ValgrindToolBase
DEFINES += VALGRINDTOOLBASE_LIBRARY
include(../../qtcreatorplugin.pri)
include(valgrindtoolbase_dependencies.pri)
QT += network
# Valgrind Tool Base files
HEADERS += \
valgrindtoolbaseplugin.h \
valgrindtoolbase_global.h \
valgrindengine.h \
valgrindconfigwidget.h \
valgrindsettings.h
SOURCES += \
valgrindtoolbaseplugin.cpp \
valgrindengine.cpp \
valgrindconfigwidget.cpp \
valgrindsettings.cpp
FORMS += \
valgrindconfigwidget.ui

View File

@@ -1,3 +0,0 @@
include(../../plugins/coreplugin/coreplugin.pri)
include(../../plugins/analyzerbase/analyzerbase.pri)
include(../../libs/valgrind/valgrind.pri)

View File

@@ -1,65 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
**
** Author: Milian Wolff, KDAB (milian.wolff@kdab.com)
**
** Contact: Nokia Corporation (info@qt.nokia.com)
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
** If you have questions regarding the use of this file, please contact
** Nokia at info@qt.nokia.com.
**
**************************************************************************/
#include "valgrindtoolbaseplugin.h"
#include "valgrindsettings.h"
#include <analyzerbase/analyzersettings.h>
#include <QtCore/QStringList>
#include <QtCore/QtPlugin>
using namespace Analyzer;
using namespace Valgrind::Internal;
static AbstractAnalyzerSubConfig *configFactory()
{
return new ValgrindSettings();
}
bool ValgrindToolbasePlugin::initialize(const QStringList &/*arguments*/, QString */*errorString*/)
{
AnalyzerGlobalSettings::instance()->registerSubConfigs(&configFactory, &configFactory);
return true;
}
void ValgrindToolbasePlugin::extensionsInitialized()
{
}
Q_EXPORT_PLUGIN(ValgrindToolbasePlugin)