Skip to content

Commit 1074312

Browse files
committed
Optionally draw little rendering stats (switch on/off with S key)
1 parent d3b5fb0 commit 1074312

File tree

4 files changed

+46
-0
lines changed

4 files changed

+46
-0
lines changed

src/core/qgsmaprendererjob.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "qgsmaprendererjob.h"
33

44
#include <QPainter>
5+
#include <QTime>
56
#include <QTimer>
67
#include <QtConcurrentMap>
78

@@ -18,6 +19,7 @@
1819
QgsMapRendererJob::QgsMapRendererJob( const QgsMapSettings& settings )
1920
: mSettings(settings)
2021
, mCache( 0 )
22+
, mRenderingTime( 0 )
2123
{
2224
}
2325

@@ -71,6 +73,8 @@ void QgsMapRendererSequentialJob::start()
7173
if ( isActive() )
7274
return; // do nothing if we are already running
7375

76+
mRenderingStart.start();
77+
7478
mErrors.clear();
7579

7680
qDebug("SEQUENTIAL START");
@@ -148,6 +152,8 @@ void QgsMapRendererSequentialJob::internalFinished()
148152
mInternalJob->deleteLater();
149153
mInternalJob = 0;
150154

155+
mRenderingTime = mRenderingStart.elapsed();
156+
151157
emit finished();
152158
}
153159

@@ -180,6 +186,8 @@ void QgsMapRendererCustomPainterJob::start()
180186
if ( isActive() )
181187
return;
182188

189+
mRenderingStart.start();
190+
183191
mActive = true;
184192

185193
mErrors.clear();
@@ -291,6 +299,7 @@ QgsLabelingResults* QgsMapRendererCustomPainterJob::takeLabelingResults()
291299
void QgsMapRendererCustomPainterJob::futureFinished()
292300
{
293301
mActive = false;
302+
mRenderingTime = mRenderingStart.elapsed();
294303
qDebug("QPAINTER futureFinished");
295304
emit finished();
296305
}
@@ -693,6 +702,8 @@ void QgsMapRendererParallelJob::start()
693702
if ( isActive() )
694703
return;
695704

705+
mRenderingStart.start();
706+
696707
mStatus = RenderingLayers;
697708

698709
delete mLabelingEngine;
@@ -837,6 +848,8 @@ void QgsMapRendererParallelJob::renderingFinished()
837848

838849
mStatus = Idle;
839850

851+
mRenderingTime = mRenderingStart.elapsed();
852+
840853
emit finished();
841854
}
842855

src/core/qgsmaprendererjob.h

+7
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <QImage>
77
#include <QPainter>
88
#include <QObject>
9+
#include <QTime>
910

1011
#include "qgsrendercontext.h"
1112

@@ -77,6 +78,9 @@ class CORE_EXPORT QgsMapRendererJob : public QObject
7778
void setCache( QgsMapRendererCache* cache );
7879

7980

81+
//! Find out how log it took to finish the job (in miliseconds)
82+
int renderingTime() const { return mRenderingTime; }
83+
8084
signals:
8185

8286
//! emitted when asynchronous rendering is finished (or canceled).
@@ -108,6 +112,9 @@ class CORE_EXPORT QgsMapRendererJob : public QObject
108112
Errors mErrors;
109113

110114
QgsMapRendererCache* mCache;
115+
116+
QTime mRenderingStart;
117+
int mRenderingTime;
111118
};
112119

113120

src/gui/qgsmapcanvas.cpp

+23
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ QgsMapCanvas::QgsMapCanvas( QWidget * parent, const char *name )
158158
, mJobCancelled( false )
159159
, mLabelingResults( 0 )
160160
, mUseParallelRendering( false )
161+
, mDrawRenderingStats( false )
161162
, mCache( 0 )
162163
{
163164
setObjectName( name );
@@ -688,6 +689,23 @@ void QgsMapCanvas::rendererJobFinished()
688689
// emit renderComplete to get our decorations drawn
689690
QPainter p( &img );
690691
emit renderComplete( &p );
692+
693+
if ( mDrawRenderingStats )
694+
{
695+
int w = img.width(), h = img.height();
696+
QFont fnt = p.font();
697+
fnt.setBold( true );
698+
p.setFont( fnt );
699+
int lh = p.fontMetrics().height()*2;
700+
QRect r( 0, h - lh, w, lh );
701+
p.setPen( Qt::NoPen );
702+
p.setBrush( QColor( 0, 0, 0, 110 ) );
703+
p.drawRect( r );
704+
p.setPen( Qt::white );
705+
QString msg = QString("%1 :: %2 ms").arg( mUseParallelRendering ? "PARALLEL" : "SEQUENTIAL" ).arg( mJob->renderingTime() );
706+
p.drawText( r, msg, QTextOption( Qt::AlignCenter ) );
707+
}
708+
691709
p.end();
692710

693711
mMap->setContent( img, mSettings.visibleExtent() );
@@ -1069,6 +1087,11 @@ void QgsMapCanvas::keyPressEvent( QKeyEvent * e )
10691087
refresh();
10701088
break;
10711089

1090+
case Qt::Key_S:
1091+
mDrawRenderingStats = !mDrawRenderingStats;
1092+
refresh();
1093+
break;
1094+
10721095
default:
10731096
// Pass it on
10741097
if ( mMapTool )

src/gui/qgsmapcanvas.h

+3
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,9 @@ class GUI_EXPORT QgsMapCanvas : public QGraphicsView
577577
//! Whether layers are rendered sequentially or in parallel
578578
bool mUseParallelRendering;
579579

580+
//! Whether to add rendering stats to the rendered image
581+
bool mDrawRenderingStats;
582+
580583
//! Optionally use cache with rendered map layers for the current map settings
581584
QgsMapRendererCache* mCache;
582585

0 commit comments

Comments
 (0)