From 06a055a3eaa7cc60cc453615d6dc03a106198551 Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Mon, 15 Dec 2014 19:20:01 +0100 Subject: pdfviewer example: add rendering stats --- .../widgets/pdfviewer/sequentialpagewidget.cpp | 22 +++++++++++++++++++++- examples/widgets/pdfviewer/sequentialpagewidget.h | 6 ++++++ 2 files changed, 27 insertions(+), 1 deletion(-) (limited to 'examples') diff --git a/examples/widgets/pdfviewer/sequentialpagewidget.cpp b/examples/widgets/pdfviewer/sequentialpagewidget.cpp index a9d5c42..5bac32c 100644 --- a/examples/widgets/pdfviewer/sequentialpagewidget.cpp +++ b/examples/widgets/pdfviewer/sequentialpagewidget.cpp @@ -5,6 +5,7 @@ #include #include #include +#include Q_DECLARE_LOGGING_CATEGORY(lcExample) @@ -16,6 +17,10 @@ SequentialPageWidget::SequentialPageWidget(QWidget *parent) , m_topPageShowing(0) , m_zoom(1.) , m_screenResolution(QGuiApplication::primaryScreen()->logicalDotsPerInch() / 72.0) + , m_minRenderTime(1000000000.) + , m_maxRenderTime(0.) + , m_totalRenderTime(0.) + , m_totalPagesRendered(0) { } @@ -83,13 +88,23 @@ void SequentialPageWidget::paintEvent(QPaintEvent * event) } y += m_pageSpacing; m_topPageShowing = page; + int previousRendered = m_totalPagesRendered; // Actually render pages while (y < event->rect().bottom() && page < m_doc->pageCount()) { if (!m_pageCache.contains(page)) { QSizeF size = pageSize(page); qCDebug(lcExample) << "rendering page" << page << "to size" << size; - m_pageCache.insert(page, QPixmap::fromImage(m_doc->render(page, size))); + QElapsedTimer timer; timer.start(); + const QImage &img = m_doc->render(page, size); + qreal secs = timer.nsecsElapsed() / 1000000000.0; + if (secs < m_minRenderTime) + m_minRenderTime = secs; + if (secs > m_maxRenderTime) + m_maxRenderTime = secs; + m_totalRenderTime += secs; + ++m_totalPagesRendered; + m_pageCache.insert(page, QPixmap::fromImage(img)); } const QPixmap &pm = m_pageCache[page]; painter.drawPixmap((width() - pm.width()) / 2, y, pm); @@ -98,6 +113,11 @@ void SequentialPageWidget::paintEvent(QPaintEvent * event) } m_bottomPageShowing = page - 1; emit showingPageRange(m_topPageShowing, m_bottomPageShowing); + + if (m_totalPagesRendered != previousRendered) + qCDebug(lcExample) << "rendering time: min" << m_minRenderTime << + "avg" << m_totalRenderTime / m_totalPagesRendered << + "max" << m_maxRenderTime; } qreal SequentialPageWidget::yForPage(int endPage) diff --git a/examples/widgets/pdfviewer/sequentialpagewidget.h b/examples/widgets/pdfviewer/sequentialpagewidget.h index 07fef47..3d91279 100644 --- a/examples/widgets/pdfviewer/sequentialpagewidget.h +++ b/examples/widgets/pdfviewer/sequentialpagewidget.h @@ -41,6 +41,12 @@ private: QSize m_totalSize; qreal m_zoom; qreal m_screenResolution; // pixels per point + + // performance statistics + qreal m_minRenderTime; + qreal m_maxRenderTime; + qreal m_totalRenderTime; + int m_totalPagesRendered; }; #endif // SEQUENTIALPAGEWIDGET_H -- cgit v1.2.3