forked from qt-creator/qt-creator
qmlprofiler: use dockwidgets instead of tabs in the output pane
Change-Id: I2c33c4309e6568a34517fae2bb37f5e70320cfbe Reviewed-on: http://codereview.qt.nokia.com/35 Reviewed-by: hjk
This commit is contained in:
@@ -41,7 +41,8 @@
|
|||||||
|
|
||||||
using namespace QmlProfiler::Internal;
|
using namespace QmlProfiler::Internal;
|
||||||
|
|
||||||
struct BindingData {
|
struct BindingData
|
||||||
|
{
|
||||||
QString displayname;
|
QString displayname;
|
||||||
QString filename;
|
QString filename;
|
||||||
int line;
|
int line;
|
||||||
@@ -56,7 +57,7 @@ struct BindingData {
|
|||||||
class QmlProfilerSummaryView::QmlProfilerSummaryViewPrivate
|
class QmlProfilerSummaryView::QmlProfilerSummaryViewPrivate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QmlProfilerSummaryViewPrivate(QmlProfilerSummaryView *qq):q(qq) {}
|
QmlProfilerSummaryViewPrivate(QmlProfilerSummaryView *qq) : q(qq) {}
|
||||||
~QmlProfilerSummaryViewPrivate() {}
|
~QmlProfilerSummaryViewPrivate() {}
|
||||||
|
|
||||||
QmlProfilerSummaryView *q;
|
QmlProfilerSummaryView *q;
|
||||||
@@ -96,6 +97,7 @@ public:
|
|||||||
QmlProfilerSummaryView::QmlProfilerSummaryView(QWidget *parent) :
|
QmlProfilerSummaryView::QmlProfilerSummaryView(QWidget *parent) :
|
||||||
QTreeView(parent), d(new QmlProfilerSummaryViewPrivate(this))
|
QTreeView(parent), d(new QmlProfilerSummaryViewPrivate(this))
|
||||||
{
|
{
|
||||||
|
setObjectName("QmlProfilerSummaryView");
|
||||||
setRootIsDecorated(false);
|
setRootIsDecorated(false);
|
||||||
header()->setResizeMode(QHeaderView::Interactive);
|
header()->setResizeMode(QHeaderView::Interactive);
|
||||||
header()->setMinimumSectionSize(100);
|
header()->setMinimumSectionSize(100);
|
||||||
|
@@ -42,6 +42,7 @@ namespace Internal {
|
|||||||
class QmlProfilerSummaryView : public QTreeView
|
class QmlProfilerSummaryView : public QTreeView
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit QmlProfilerSummaryView(QWidget *parent = 0);
|
explicit QmlProfilerSummaryView(QWidget *parent = 0);
|
||||||
~QmlProfilerSummaryView();
|
~QmlProfilerSummaryView();
|
||||||
@@ -51,7 +52,8 @@ signals:
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void clean();
|
void clean();
|
||||||
void addRangedEvent(int type, qint64 startTime, qint64 length, const QStringList &data, const QString &fileName, int line);
|
void addRangedEvent(int type, qint64 startTime, qint64 length,
|
||||||
|
const QStringList &data, const QString &fileName, int line);
|
||||||
void complete();
|
void complete();
|
||||||
void jumpToItem(const QModelIndex &index);
|
void jumpToItem(const QModelIndex &index);
|
||||||
|
|
||||||
@@ -70,10 +72,9 @@ private:
|
|||||||
double mintime);
|
double mintime);
|
||||||
void setHeaderLabels();
|
void setHeaderLabels();
|
||||||
QString displayTime(double time) const;
|
QString displayTime(double time) const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
} // namespace Internal
|
||||||
}
|
} // namespace QmlProfiler
|
||||||
|
|
||||||
#endif // QMLPROFILERSUMMARYVIEW_H
|
#endif // QMLPROFILERSUMMARYVIEW_H
|
||||||
|
@@ -45,13 +45,13 @@
|
|||||||
|
|
||||||
#include <analyzerbase/analyzermanager.h>
|
#include <analyzerbase/analyzermanager.h>
|
||||||
#include <analyzerbase/analyzerconstants.h>
|
#include <analyzerbase/analyzerconstants.h>
|
||||||
#include <analyzerbase/ianalyzeroutputpaneadapter.h>
|
|
||||||
|
|
||||||
#include "canvas/qdeclarativecanvas_p.h"
|
#include "canvas/qdeclarativecanvas_p.h"
|
||||||
#include "canvas/qdeclarativecontext2d_p.h"
|
#include "canvas/qdeclarativecontext2d_p.h"
|
||||||
#include "canvas/qdeclarativetiledcanvas_p.h"
|
#include "canvas/qdeclarativetiledcanvas_p.h"
|
||||||
|
|
||||||
#include <qmlprojectmanager/qmlprojectrunconfiguration.h>
|
#include <qmlprojectmanager/qmlprojectrunconfiguration.h>
|
||||||
|
#include <utils/fancymainwindow.h>
|
||||||
#include <utils/fileinprojectfinder.h>
|
#include <utils/fileinprojectfinder.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
#include <projectexplorer/projectexplorer.h>
|
#include <projectexplorer/projectexplorer.h>
|
||||||
@@ -76,29 +76,6 @@
|
|||||||
using namespace Analyzer;
|
using namespace Analyzer;
|
||||||
using namespace QmlProfiler::Internal;
|
using namespace QmlProfiler::Internal;
|
||||||
|
|
||||||
// Adapter for output pane.
|
|
||||||
class QmlProfilerOutputPaneAdapter : public Analyzer::IAnalyzerOutputPaneAdapter
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
explicit QmlProfilerOutputPaneAdapter(QmlProfilerTool *mct) :
|
|
||||||
IAnalyzerOutputPaneAdapter(mct), m_tool(mct) {}
|
|
||||||
|
|
||||||
virtual QWidget *toolBarWidget() { return m_tool->createToolBarWidget(); }
|
|
||||||
virtual QWidget *paneWidget() { return m_tool->createTimeLineWidget(); }
|
|
||||||
virtual void clearContents() { m_tool->clearDisplay(); }
|
|
||||||
virtual void setFocus() { /*TODO*/ }
|
|
||||||
virtual bool hasFocus() const { return false; /*TODO*/ }
|
|
||||||
virtual bool canFocus() const { return false; /*TODO*/ }
|
|
||||||
virtual bool canNavigate() const { return false; /*TODO*/ }
|
|
||||||
virtual bool canNext() const { return false; /*TODO*/ }
|
|
||||||
virtual bool canPrevious() const { return false; /*TODO*/ }
|
|
||||||
virtual void goToNext() { /*TODO*/ }
|
|
||||||
virtual void goToPrev() { /*TODO*/ }
|
|
||||||
|
|
||||||
private:
|
|
||||||
QmlProfilerTool *m_tool;
|
|
||||||
};
|
|
||||||
|
|
||||||
class QmlProfilerTool::QmlProfilerToolPrivate
|
class QmlProfilerTool::QmlProfilerToolPrivate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -111,9 +88,7 @@ public:
|
|||||||
QTimer m_connectionTimer;
|
QTimer m_connectionTimer;
|
||||||
int m_connectionAttempts;
|
int m_connectionAttempts;
|
||||||
TraceWindow *m_traceWindow;
|
TraceWindow *m_traceWindow;
|
||||||
QTabWidget *m_tabbed;
|
|
||||||
QmlProfilerSummaryView *m_summary;
|
QmlProfilerSummaryView *m_summary;
|
||||||
QmlProfilerOutputPaneAdapter *m_outputPaneAdapter;
|
|
||||||
ProjectExplorer::Project *m_project;
|
ProjectExplorer::Project *m_project;
|
||||||
Utils::FileInProjectFinder m_projectFinder;
|
Utils::FileInProjectFinder m_projectFinder;
|
||||||
ProjectExplorer::RunConfiguration *m_runConfiguration;
|
ProjectExplorer::RunConfiguration *m_runConfiguration;
|
||||||
@@ -131,7 +106,6 @@ QmlProfilerTool::QmlProfilerTool(QObject *parent)
|
|||||||
d->m_client = 0;
|
d->m_client = 0;
|
||||||
d->m_connectionAttempts = 0;
|
d->m_connectionAttempts = 0;
|
||||||
d->m_traceWindow = 0;
|
d->m_traceWindow = 0;
|
||||||
d->m_outputPaneAdapter = 0;
|
|
||||||
d->m_project = 0;
|
d->m_project = 0;
|
||||||
d->m_runConfiguration = 0;
|
d->m_runConfiguration = 0;
|
||||||
d->m_isAttached = false;
|
d->m_isAttached = false;
|
||||||
@@ -144,11 +118,7 @@ QmlProfilerTool::QmlProfilerTool(QObject *parent)
|
|||||||
|
|
||||||
QmlProfilerTool::~QmlProfilerTool()
|
QmlProfilerTool::~QmlProfilerTool()
|
||||||
{
|
{
|
||||||
if (d->m_client)
|
delete d->m_client;
|
||||||
delete d->m_client;
|
|
||||||
delete d->m_tabbed;
|
|
||||||
|
|
||||||
delete d->m_outputPaneAdapter;
|
|
||||||
delete d;
|
delete d;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,25 +171,32 @@ void QmlProfilerTool::initialize()
|
|||||||
qmlRegisterType<Context2D>();
|
qmlRegisterType<Context2D>();
|
||||||
qmlRegisterType<CanvasImage>();
|
qmlRegisterType<CanvasImage>();
|
||||||
qmlRegisterType<CanvasGradient>();
|
qmlRegisterType<CanvasGradient>();
|
||||||
|
|
||||||
qmlRegisterType<TimelineView>("Monitor", 1, 0,"TimelineView");
|
qmlRegisterType<TimelineView>("Monitor", 1, 0,"TimelineView");
|
||||||
|
}
|
||||||
|
|
||||||
d->m_tabbed = new QTabWidget();
|
void QmlProfilerTool::extensionsInitialized()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
d->m_traceWindow = new TraceWindow(d->m_tabbed);
|
void QmlProfilerTool::initializeDockWidgets()
|
||||||
|
{
|
||||||
|
Analyzer::AnalyzerManager *analyzerMgr = Analyzer::AnalyzerManager::instance();
|
||||||
|
QMainWindow *mw = analyzerMgr->mainWindow();
|
||||||
|
|
||||||
|
d->m_traceWindow = new TraceWindow(mw);
|
||||||
d->m_traceWindow->reset(d->m_client);
|
d->m_traceWindow->reset(d->m_client);
|
||||||
|
|
||||||
connect(d->m_traceWindow, SIGNAL(gotoSourceLocation(QString,int)), this, SLOT(gotoSourceLocation(QString,int)));
|
connect(d->m_traceWindow, SIGNAL(gotoSourceLocation(QString,int)),this, SLOT(gotoSourceLocation(QString,int)));
|
||||||
connect(d->m_traceWindow, SIGNAL(timeChanged(qreal)), this, SLOT(updateTimer(qreal)));
|
connect(d->m_traceWindow, SIGNAL(timeChanged(qreal)), this, SLOT(updateTimer(qreal)));
|
||||||
|
|
||||||
d->m_summary = new QmlProfilerSummaryView(d->m_tabbed);
|
d->m_summary = new QmlProfilerSummaryView(mw);
|
||||||
d->m_tabbed->addTab(d->m_traceWindow, "timeline");
|
|
||||||
d->m_tabbed->addTab(d->m_summary, "summary");
|
|
||||||
|
|
||||||
connect(d->m_traceWindow,SIGNAL(range(int,qint64,qint64,QStringList,QString,int)),
|
connect(d->m_traceWindow, SIGNAL(range(int,qint64,qint64,QStringList,QString,int)),
|
||||||
d->m_summary,SLOT(addRangedEvent(int,qint64,qint64,QStringList,QString,int)));
|
d->m_summary, SLOT(addRangedEvent(int,qint64,qint64,QStringList,QString,int)));
|
||||||
connect(d->m_traceWindow,SIGNAL(viewUpdated()), d->m_summary, SLOT(complete()));
|
connect(d->m_traceWindow, SIGNAL(viewUpdated()),
|
||||||
connect(d->m_summary,SIGNAL(gotoSourceLocation(QString,int)), this, SLOT(gotoSourceLocation(QString,int)));
|
d->m_summary, SLOT(complete()));
|
||||||
|
connect(d->m_summary, SIGNAL(gotoSourceLocation(QString,int)),
|
||||||
|
this, SLOT(gotoSourceLocation(QString,int)));
|
||||||
|
|
||||||
Core::ICore *core = Core::ICore::instance();
|
Core::ICore *core = Core::ICore::instance();
|
||||||
Core::ActionManager *am = core->actionManager();
|
Core::ActionManager *am = core->actionManager();
|
||||||
@@ -233,25 +210,25 @@ void QmlProfilerTool::initialize()
|
|||||||
manalyzer->addAction(command, Analyzer::Constants::G_ANALYZER_STARTSTOP);
|
manalyzer->addAction(command, Analyzer::Constants::G_ANALYZER_STARTSTOP);
|
||||||
connect(d->m_attachAction, SIGNAL(triggered()), this, SLOT(attach()));
|
connect(d->m_attachAction, SIGNAL(triggered()), this, SLOT(attach()));
|
||||||
|
|
||||||
Analyzer::AnalyzerManager *analyzerMgr = Analyzer::AnalyzerManager::instance();
|
|
||||||
connect(analyzerMgr, SIGNAL(currentToolChanged(Analyzer::IAnalyzerTool*)),
|
connect(analyzerMgr, SIGNAL(currentToolChanged(Analyzer::IAnalyzerTool*)),
|
||||||
this, SLOT(updateAttachAction()));
|
this, SLOT(updateAttachAction()));
|
||||||
|
|
||||||
updateAttachAction();
|
updateAttachAction();
|
||||||
|
|
||||||
|
QDockWidget *summaryDock =
|
||||||
|
analyzerMgr->createDockWidget(this, tr("Summary"),
|
||||||
|
d->m_summary, Qt::BottomDockWidgetArea);
|
||||||
|
|
||||||
|
QDockWidget *timelineDock =
|
||||||
|
analyzerMgr->createDockWidget(this, tr("Timeline"),
|
||||||
|
d->m_traceWindow, Qt::BottomDockWidgetArea);
|
||||||
|
|
||||||
|
//mw->splitDockWidget(flatDock, calleesDock, Qt::Vertical);
|
||||||
|
mw->tabifyDockWidget(summaryDock, timelineDock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlProfilerTool::extensionsInitialized()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
IAnalyzerOutputPaneAdapter *QmlProfilerTool::outputPaneAdapter()
|
QWidget *QmlProfilerTool::createControlWidget()
|
||||||
{
|
|
||||||
if (!d->m_outputPaneAdapter)
|
|
||||||
d->m_outputPaneAdapter = new QmlProfilerOutputPaneAdapter(this);
|
|
||||||
return d->m_outputPaneAdapter;
|
|
||||||
}
|
|
||||||
|
|
||||||
QWidget *QmlProfilerTool::createToolBarWidget()
|
|
||||||
{
|
{
|
||||||
// custom toolbar (TODO)
|
// custom toolbar (TODO)
|
||||||
QWidget *toolbarWidget = new QWidget;
|
QWidget *toolbarWidget = new QWidget;
|
||||||
@@ -282,11 +259,6 @@ QWidget *QmlProfilerTool::createToolBarWidget()
|
|||||||
return toolbarWidget;
|
return toolbarWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget *QmlProfilerTool::createTimeLineWidget()
|
|
||||||
{
|
|
||||||
return d->m_tabbed;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QmlProfilerTool::connectClient()
|
void QmlProfilerTool::connectClient()
|
||||||
{
|
{
|
||||||
QTC_ASSERT(!d->m_client, return;)
|
QTC_ASSERT(!d->m_client, return;)
|
||||||
@@ -304,7 +276,6 @@ void QmlProfilerTool::connectToClient()
|
|||||||
if (QmlProfilerPlugin::debugOutput)
|
if (QmlProfilerPlugin::debugOutput)
|
||||||
qWarning("QmlProfiler: Connecting to %s:%lld ...", qPrintable(d->m_host), d->m_port);
|
qWarning("QmlProfiler: Connecting to %s:%lld ...", qPrintable(d->m_host), d->m_port);
|
||||||
|
|
||||||
|
|
||||||
d->m_client->connectToHost(d->m_host, d->m_port);
|
d->m_client->connectToHost(d->m_host, d->m_port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -54,13 +54,12 @@ public:
|
|||||||
|
|
||||||
void initialize();
|
void initialize();
|
||||||
void extensionsInitialized();
|
void extensionsInitialized();
|
||||||
|
void initializeDockWidgets();
|
||||||
|
|
||||||
Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp,
|
Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp,
|
||||||
ProjectExplorer::RunConfiguration *runConfiguration = 0);
|
ProjectExplorer::RunConfiguration *runConfiguration = 0);
|
||||||
|
|
||||||
Analyzer::IAnalyzerOutputPaneAdapter *outputPaneAdapter();
|
QWidget *createControlWidget();
|
||||||
QWidget *createToolBarWidget();
|
|
||||||
QWidget *createTimeLineWidget();
|
|
||||||
|
|
||||||
bool canRunRemotely() const;
|
bool canRunRemotely() const;
|
||||||
bool needsOutputPane() const { return false; }
|
bool needsOutputPane() const { return false; }
|
||||||
|
@@ -73,6 +73,7 @@ class TracePlugin : public QDeclarativeDebugClient
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(bool recording READ recording WRITE setRecording NOTIFY recordingChanged)
|
Q_PROPERTY(bool recording READ recording WRITE setRecording NOTIFY recordingChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TracePlugin(QDeclarativeDebugConnection *client);
|
TracePlugin(QDeclarativeDebugConnection *client);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user