summaryrefslogtreecommitdiffstats
path: root/tools/qmldebugger/standalone/canvasframerate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/qmldebugger/standalone/canvasframerate.cpp')
-rw-r--r--tools/qmldebugger/standalone/canvasframerate.cpp581
1 files changed, 0 insertions, 581 deletions
diff --git a/tools/qmldebugger/standalone/canvasframerate.cpp b/tools/qmldebugger/standalone/canvasframerate.cpp
deleted file mode 100644
index 1bf7bf6..0000000
--- a/tools/qmldebugger/standalone/canvasframerate.cpp
+++ /dev/null
@@ -1,581 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt QML Debugger of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, 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.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <QtCore/qdebug.h>
-#include <QtCore/qstringlist.h>
-#include <QtCore/qdatastream.h>
-#include <QtCore/qmargins.h>
-
-#include <QtGui/qapplication.h>
-#include <QtGui/qpainter.h>
-#include <QtGui/qtooltip.h>
-#include <QtGui/qslider.h>
-#include <QtGui/qscrollbar.h>
-#include <QtGui/qspinbox.h>
-#include <QtGui/qgroupbox.h>
-#include <QtGui/qboxlayout.h>
-#include <QtGui/qlabel.h>
-#include <QtGui/qlineedit.h>
-#include <QtGui/qpushbutton.h>
-#include <QtGui/qtabwidget.h>
-
-#include <QResizeEvent>
-#include <QShowEvent>
-
-#include <private/qmldebugclient_p.h>
-#include "canvasframerate.h"
-
-QT_BEGIN_NAMESPACE
-
-class QLineGraph : public QWidget
-{
-Q_OBJECT
-public:
- QLineGraph(QAbstractSlider *slider, QWidget * = 0);
-
- void setPosition(int);
-
-public slots:
- void addSample(int, int, int, bool);
- void setResolutionForHeight(int);
- void clear();
-
-protected:
- virtual void paintEvent(QPaintEvent *);
- virtual void mouseMoveEvent(QMouseEvent *);
- virtual void leaveEvent(QEvent *);
- virtual void wheelEvent(QWheelEvent *event);
-
-private slots:
- void sliderChanged(int);
-
-private:
- void updateSlider();
- void drawSample(QPainter *, int, const QRect &, QList<QRect> *);
- void drawTime(QPainter *, const QRect &);
- QRect findContainingRect(const QList<QRect> &rects, const QPoint &pos) const;
- struct Sample {
- int sample[3];
- bool isBreak;
- };
- QList<Sample> _samples;
-
- QAbstractSlider *slider;
- int position;
- int samplesPerWidth;
- int resolutionForHeight;
- bool ignoreScroll;
- QMargins graphMargins;
-
- QList<QRect> rectsPaintTime; // time to do a paintEvent()
- QList<QRect> rectsTimeBetween; // time between frames
- QRect highlightedBar;
-};
-
-QLineGraph::QLineGraph(QAbstractSlider *slider, QWidget *parent)
-: QWidget(parent), slider(slider), position(-1), samplesPerWidth(99), resolutionForHeight(50),
- ignoreScroll(false), graphMargins(65, 10, 71, 35)
-{
- setMouseTracking(true);
-
- slider->setMaximum(0);
- slider->setMinimum(0);
- slider->setSingleStep(1);
-
- connect(slider, SIGNAL(valueChanged(int)), this, SLOT(sliderChanged(int)));
-}
-
-void QLineGraph::sliderChanged(int v)
-{
- if(ignoreScroll)
- return;
-
- if (v == slider->maximum())
- position = -1;
- else
- position = v;
-
- update();
-
- // update highlightedRect
- QPoint pos = mapFromGlobal(QCursor::pos());
- if (geometry().contains(pos)) {
- QMouseEvent *me = new QMouseEvent(QEvent::MouseMove, pos,
- Qt::NoButton, Qt::NoButton, Qt::NoModifier);
- QApplication::postEvent(this, me);
- }
-}
-
-void QLineGraph::clear()
-{
- _samples.clear();
- rectsPaintTime.clear();
- rectsTimeBetween.clear();
- highlightedBar = QRect();
- position = -1;
-
- updateSlider();
- update();
-}
-
-void QLineGraph::updateSlider()
-{
- ignoreScroll = true;
- slider->setMaximum(qMax(0, _samples.count() - samplesPerWidth - 1));
-
- if(position == -1) {
- slider->setValue(slider->maximum());
- } else {
- slider->setValue(position);
- }
- ignoreScroll = false;
-}
-
-void QLineGraph::addSample(int a, int b, int d, bool isBreak)
-{
- Sample s;
- s.isBreak = isBreak;
- s.sample[0] = a;
- s.sample[1] = b;
- s.sample[2] = d;
- _samples << s;
- updateSlider();
- update();
-}
-
-void QLineGraph::setPosition(int p)
-{
- sliderChanged(p);
-}
-
-void QLineGraph::drawTime(QPainter *p, const QRect &rect)
-{
- if(_samples.isEmpty())
- return;
-
- int first = position;
- if(first == -1)
- first = qMax(0, _samples.count() - samplesPerWidth - 1);
- int last = qMin(_samples.count() - 1, first + samplesPerWidth);
-
- qreal scaleX = qreal(rect.width()) / qreal(samplesPerWidth);
-
- int t = 0;
-
- for(int ii = first; ii <= last; ++ii) {
- int sampleTime = _samples.at(ii).sample[2] / 1000;
- if(sampleTime != t) {
-
- int xEnd = rect.left() + scaleX * (ii - first);
- p->drawLine(xEnd, rect.bottom(), xEnd, rect.bottom() + 7);
-
- QRect text(xEnd - 30, rect.bottom() + 10, 60, 30);
-
- p->drawText(text, Qt::AlignHCenter | Qt::AlignTop, QString::number(_samples.at(ii).sample[2]));
-
- t = sampleTime;
- }
- }
-
-}
-
-void QLineGraph::drawSample(QPainter *p, int s, const QRect &rect, QList<QRect> *record)
-{
- if(_samples.isEmpty())
- return;
-
- int first = position;
- if(first == -1)
- first = qMax(0, _samples.count() - samplesPerWidth - 1);
- int last = qMin(_samples.count() - 1, first + samplesPerWidth);
-
- qreal scaleY = qreal(rect.height()) / resolutionForHeight;
- qreal scaleX = qreal(rect.width()) / qreal(samplesPerWidth);
-
- int xEnd;
- int lastXEnd = rect.left();
-
- p->save();
- p->setPen(Qt::NoPen);
- for(int ii = first + 1; ii <= last; ++ii) {
-
- xEnd = rect.left() + scaleX * (ii - first);
- int yEnd = rect.bottom() - _samples.at(ii).sample[s] * scaleY;
-
- if (!(s == 0 && _samples.at(ii).isBreak)) {
- QRect bar(lastXEnd, yEnd, scaleX, _samples.at(ii).sample[s] * scaleY);
- record->append(bar);
- p->drawRect(bar);
- }
-
- lastXEnd = xEnd;
- }
- p->restore();
-}
-
-void QLineGraph::paintEvent(QPaintEvent *)
-{
- QPainter p(this);
- p.setRenderHint(QPainter::Antialiasing);
-
- QRect r(graphMargins.left(), graphMargins.top(),
- width() - graphMargins.right(), height() - graphMargins.bottom());
-
- p.save();
- p.rotate(-90);
- p.translate(-r.height()/2 - r.width()/2 - graphMargins.right(), -r.height()/2);
- p.drawText(r, Qt::AlignCenter, tr("Frame rate"));
- p.restore();
-
- p.setBrush(QColor("lightsteelblue"));
- rectsTimeBetween.clear();
- drawSample(&p, 0, r, &rectsTimeBetween);
-
- p.setBrush(QColor("pink"));
- rectsPaintTime.clear();
- drawSample(&p, 1, r, &rectsPaintTime);
-
- if (!highlightedBar.isNull()) {
- p.setBrush(Qt::darkGreen);
- p.drawRect(highlightedBar);
- }
-
- p.setBrush(Qt::NoBrush);
- p.drawRect(r);
-
- slider->setGeometry(x() + r.x(), slider->y(), r.width(), slider->height());
-
- for(int ii = 0; ii <= resolutionForHeight; ++ii) {
- int y = 1 + r.bottom() - ii * r.height() / resolutionForHeight;
-
- if((ii % 10) == 0) {
- p.drawLine(r.left() - 20, y, r.left(), y);
- QRect text(r.left() - 20 - 53, y - 10, 50, 20);
- p.drawText(text, Qt::AlignRight | Qt::AlignVCenter, QString::number(ii));
- } else {
- p.drawLine(r.left() - 7, y, r.left(), y);
- }
- }
-
- drawTime(&p, r);
-}
-
-void QLineGraph::mouseMoveEvent(QMouseEvent *event)
-{
- QPoint pos = event->pos();
-
- QRect rect = findContainingRect(rectsPaintTime, pos);
- if (rect.isNull())
- rect = findContainingRect(rectsTimeBetween, pos);
-
- if (!highlightedBar.isNull())
- update(highlightedBar.adjusted(-1, -1, 1, 1));
- highlightedBar = rect;
-
- if (!rect.isNull()) {
- QRect graph(graphMargins.left(), graphMargins.top(),
- width() - graphMargins.right(), height() - graphMargins.bottom());
- qreal scaleY = qreal(graph.height()) / resolutionForHeight;
- QToolTip::showText(event->globalPos(), QString::number(qRound(rect.height() / scaleY)), this, rect);
- update(rect.adjusted(-1, -1, 1, 1));
- }
-}
-
-void QLineGraph::leaveEvent(QEvent *)
-{
- if (!highlightedBar.isNull()) {
- QRect bar = highlightedBar.adjusted(-1, -1, 1, 1);
- highlightedBar = QRect();
- update(bar);
- }
-}
-
-void QLineGraph::wheelEvent(QWheelEvent *event)
-{
- QWheelEvent we(QPoint(0,0), event->delta(), event->buttons(), event->modifiers(), event->orientation());
- QApplication::sendEvent(slider, &we);
-}
-
-void QLineGraph::setResolutionForHeight(int resolution)
-{
- resolutionForHeight = resolution;
- update();
-}
-
-QRect QLineGraph::findContainingRect(const QList<QRect> &rects, const QPoint &pos) const
-{
- for (int i=0; i<rects.count(); i++) {
- if (rects[i].contains(pos))
- return rects[i];
- }
- return QRect();
-}
-
-
-class GraphWindow : public QWidget
-{
- Q_OBJECT
-public:
- GraphWindow(QWidget *parent = 0);
-
- virtual QSize sizeHint() const;
-
-public slots:
- void addSample(int, int, int, bool);
- void setResolutionForHeight(int);
- void clear();
-
-private:
- QLineGraph *m_graph;
-};
-
-GraphWindow::GraphWindow(QWidget *parent)
- : QWidget(parent)
-{
- QSlider *scroll = new QSlider(Qt::Horizontal);
- scroll->setFocusPolicy(Qt::WheelFocus);
- m_graph = new QLineGraph(scroll);
-
- setFocusPolicy(Qt::WheelFocus);
- setFocusProxy(scroll);
-
- QVBoxLayout *layout = new QVBoxLayout(this);
- layout->setContentsMargins(0, 0, 5, 0);
- layout->setSpacing(0);
- layout->addWidget(m_graph, 2);
- layout->addWidget(new QLabel(tr("Total time elapsed (ms)")), 0, Qt::AlignHCenter);
- layout->addWidget(scroll);
-}
-
-void GraphWindow::addSample(int a, int b, int d, bool isBreak)
-{
- m_graph->addSample(a, b, d, isBreak);
-}
-
-void GraphWindow::setResolutionForHeight(int res)
-{
- m_graph->setResolutionForHeight(res);
-}
-
-void GraphWindow::clear()
-{
- m_graph->clear();
-}
-
-QSize GraphWindow::sizeHint() const
-{
- return QSize(400, 220);
-}
-
-
-class CanvasFrameRatePlugin : public QmlDebugClient
-{
- Q_OBJECT
-public:
- CanvasFrameRatePlugin(QmlDebugConnection *client);
-
-signals:
- void sample(int, int, int, bool);
-
-protected:
- virtual void messageReceived(const QByteArray &);
-
-private:
- int lb;
- int ld;
-};
-
-CanvasFrameRatePlugin::CanvasFrameRatePlugin(QmlDebugConnection *client)
-: QmlDebugClient(QLatin1String("CanvasFrameRate"), client), lb(-1)
-{
-}
-
-void CanvasFrameRatePlugin::messageReceived(const QByteArray &data)
-{
- QByteArray rwData = data;
- QDataStream stream(&rwData, QIODevice::ReadOnly);
-
- int b; int c; int d; bool isBreak;
- stream >> b >> c >> d >> isBreak;
-
- if (lb != -1)
- emit sample(c, lb, ld, isBreak);
-
- lb = b;
- ld = d;
-}
-
-CanvasFrameRate::CanvasFrameRate(QWidget *parent)
-: QWidget(parent),
- m_plugin(0)
-{
- m_tabs = new QTabWidget(this);
-
- QHBoxLayout *bottom = new QHBoxLayout;
- bottom->setMargin(0);
- bottom->setSpacing(10);
-
- m_res = new QSpinBox;
- m_res->setRange(30, 200);
- m_res->setValue(m_res->minimum());
- m_res->setSingleStep(10);
- m_res->setSuffix(QLatin1String("ms"));
- bottom->addWidget(new QLabel(tr("Resolution:")));
- bottom->addWidget(m_res);
-
- bottom->addStretch();
-
- m_clearButton = new QPushButton(tr("Clear"));
- connect(m_clearButton, SIGNAL(clicked()), SLOT(clearGraph()));
- bottom->addWidget(m_clearButton);
-
- QPushButton *pb = new QPushButton(tr("New Graph"), this);
- connect(pb, SIGNAL(clicked()), this, SLOT(newTab()));
- bottom->addWidget(pb);
-
- m_group = new QGroupBox(tr("Enabled"));
- m_group->setCheckable(true);
- m_group->setChecked(false);
- connect(m_group, SIGNAL(toggled(bool)), SLOT(enabledToggled(bool)));
-
- QVBoxLayout *groupLayout = new QVBoxLayout(m_group);
- groupLayout->setContentsMargins(5, 0, 5, 0);
- groupLayout->setSpacing(2);
- groupLayout->addWidget(m_tabs);
- groupLayout->addLayout(bottom);
-
- QVBoxLayout *layout = new QVBoxLayout;
- layout->setContentsMargins(0, 10, 0, 0);
- layout->setSpacing(0);
- layout->addWidget(m_group);
- setLayout(layout);
-}
-
-void CanvasFrameRate::reset(QmlDebugConnection *conn)
-{
- delete m_plugin;
- m_plugin = 0;
-
- QWidget *w;
- for (int i=0; i<m_tabs->count(); i++) {
- w = m_tabs->widget(i);
- m_tabs->removeTab(i);
- delete w;
- }
-
- if (conn) {
- connect(conn, SIGNAL(stateChanged(QAbstractSocket::SocketState)),
- SLOT(connectionStateChanged(QAbstractSocket::SocketState)));
- if (conn->state() == QAbstractSocket::ConnectedState)
- handleConnected(conn);
- }
-}
-
-void CanvasFrameRate::connectionStateChanged(QAbstractSocket::SocketState state)
-{
- if (state == QAbstractSocket::UnconnectedState) {
- delete m_plugin;
- m_plugin = 0;
- } else if (state == QAbstractSocket::ConnectedState) {
- handleConnected(qobject_cast<QmlDebugConnection*>(sender()));
- }
-}
-
-void CanvasFrameRate::handleConnected(QmlDebugConnection *conn)
-{
- delete m_plugin;
- m_plugin = new CanvasFrameRatePlugin(conn);
- enabledToggled(m_group->isChecked());
- newTab();
-}
-
-void CanvasFrameRate::setSizeHint(const QSize &size)
-{
- m_sizeHint = size;
-}
-
-QSize CanvasFrameRate::sizeHint() const
-{
- return m_sizeHint;
-}
-
-void CanvasFrameRate::clearGraph()
-{
- if (m_tabs->count()) {
- GraphWindow *w = qobject_cast<GraphWindow*>(m_tabs->currentWidget());
- if (w)
- w->clear();
- }
-}
-
-void CanvasFrameRate::newTab()
-{
- if (!m_plugin)
- return;
-
- if (m_tabs->count()) {
- QWidget *w = m_tabs->widget(m_tabs->count() - 1);
- QObject::disconnect(m_plugin, SIGNAL(sample(int,int,int,bool)),
- w, SLOT(addSample(int,int,int,bool)));
- }
-
- int count = m_tabs->count();
-
- GraphWindow *graph = new GraphWindow;
- graph->setResolutionForHeight(m_res->value());
- connect(m_plugin, SIGNAL(sample(int,int,int,bool)),
- graph, SLOT(addSample(int,int,int,bool)));
- connect(m_res, SIGNAL(valueChanged(int)),
- graph, SLOT(setResolutionForHeight(int)));
-
- QString name = QLatin1String("Graph ") + QString::number(count + 1);
- m_tabs->addTab(graph, name);
- m_tabs->setCurrentIndex(count);
-}
-
-void CanvasFrameRate::enabledToggled(bool checked)
-{
- if (m_plugin)
- static_cast<QmlDebugClient *>(m_plugin)->setEnabled(checked);
-}
-
-QT_END_NAMESPACE
-
-#include "canvasframerate.moc"