Skip to content

Commit

Permalink
Optionally draw little rendering stats (switch on/off with S key)
Browse files Browse the repository at this point in the history
  • Loading branch information
wonder-sk committed Dec 11, 2013
1 parent d3b5fb0 commit 1074312
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/core/qgsmaprendererjob.cpp
Expand Up @@ -2,6 +2,7 @@
#include "qgsmaprendererjob.h"

#include <QPainter>
#include <QTime>
#include <QTimer>
#include <QtConcurrentMap>

Expand All @@ -18,6 +19,7 @@
QgsMapRendererJob::QgsMapRendererJob( const QgsMapSettings& settings )
: mSettings(settings)
, mCache( 0 )
, mRenderingTime( 0 )
{
}

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

mRenderingStart.start();

mErrors.clear();

qDebug("SEQUENTIAL START");
Expand Down Expand Up @@ -148,6 +152,8 @@ void QgsMapRendererSequentialJob::internalFinished()
mInternalJob->deleteLater();
mInternalJob = 0;

mRenderingTime = mRenderingStart.elapsed();

emit finished();
}

Expand Down Expand Up @@ -180,6 +186,8 @@ void QgsMapRendererCustomPainterJob::start()
if ( isActive() )
return;

mRenderingStart.start();

mActive = true;

mErrors.clear();
Expand Down Expand Up @@ -291,6 +299,7 @@ QgsLabelingResults* QgsMapRendererCustomPainterJob::takeLabelingResults()
void QgsMapRendererCustomPainterJob::futureFinished()
{
mActive = false;
mRenderingTime = mRenderingStart.elapsed();
qDebug("QPAINTER futureFinished");
emit finished();
}
Expand Down Expand Up @@ -693,6 +702,8 @@ void QgsMapRendererParallelJob::start()
if ( isActive() )
return;

mRenderingStart.start();

mStatus = RenderingLayers;

delete mLabelingEngine;
Expand Down Expand Up @@ -837,6 +848,8 @@ void QgsMapRendererParallelJob::renderingFinished()

mStatus = Idle;

mRenderingTime = mRenderingStart.elapsed();

emit finished();
}

Expand Down
7 changes: 7 additions & 0 deletions src/core/qgsmaprendererjob.h
Expand Up @@ -6,6 +6,7 @@
#include <QImage>
#include <QPainter>
#include <QObject>
#include <QTime>

#include "qgsrendercontext.h"

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


//! Find out how log it took to finish the job (in miliseconds)
int renderingTime() const { return mRenderingTime; }

signals:

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

QgsMapRendererCache* mCache;

QTime mRenderingStart;
int mRenderingTime;
};


Expand Down
23 changes: 23 additions & 0 deletions src/gui/qgsmapcanvas.cpp
Expand Up @@ -158,6 +158,7 @@ QgsMapCanvas::QgsMapCanvas( QWidget * parent, const char *name )
, mJobCancelled( false )
, mLabelingResults( 0 )
, mUseParallelRendering( false )
, mDrawRenderingStats( false )
, mCache( 0 )
{
setObjectName( name );
Expand Down Expand Up @@ -688,6 +689,23 @@ void QgsMapCanvas::rendererJobFinished()
// emit renderComplete to get our decorations drawn
QPainter p( &img );
emit renderComplete( &p );

if ( mDrawRenderingStats )
{
int w = img.width(), h = img.height();
QFont fnt = p.font();
fnt.setBold( true );
p.setFont( fnt );
int lh = p.fontMetrics().height()*2;
QRect r( 0, h - lh, w, lh );
p.setPen( Qt::NoPen );
p.setBrush( QColor( 0, 0, 0, 110 ) );
p.drawRect( r );
p.setPen( Qt::white );
QString msg = QString("%1 :: %2 ms").arg( mUseParallelRendering ? "PARALLEL" : "SEQUENTIAL" ).arg( mJob->renderingTime() );
p.drawText( r, msg, QTextOption( Qt::AlignCenter ) );
}

p.end();

mMap->setContent( img, mSettings.visibleExtent() );
Expand Down Expand Up @@ -1069,6 +1087,11 @@ void QgsMapCanvas::keyPressEvent( QKeyEvent * e )
refresh();
break;

case Qt::Key_S:
mDrawRenderingStats = !mDrawRenderingStats;
refresh();
break;

default:
// Pass it on
if ( mMapTool )
Expand Down
3 changes: 3 additions & 0 deletions src/gui/qgsmapcanvas.h
Expand Up @@ -577,6 +577,9 @@ class GUI_EXPORT QgsMapCanvas : public QGraphicsView
//! Whether layers are rendered sequentially or in parallel
bool mUseParallelRendering;

//! Whether to add rendering stats to the rendered image
bool mDrawRenderingStats;

//! Optionally use cache with rendered map layers for the current map settings
QgsMapRendererCache* mCache;

Expand Down

0 comments on commit 1074312

Please sign in to comment.