~mutse-young/ubuntu-docviewer-app/trunk

« back to all changes in this revision

Viewing changes to src/plugin/poppler-qml-plugin/pdfdocument.cpp

  • Committer: Stefano Verzegnassi
  • Date: 2015-01-30 19:02:22 UTC
  • mto: (63.3.3 30-new-header-style)
  • mto: This revision was merged to the branch mainline in revision 69.
  • Revision ID: stefano92.100@gmail.com-20150130190222-1c9cwcrdpgupi509
Multithread PDF pages provider

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
#include <QDebug>
26
26
#include <QQmlEngine>
27
27
#include <QQmlContext>
 
28
#include <QThread>
28
29
 
29
30
PdfDocument::PdfDocument(QAbstractListModel *parent):
30
31
    QAbstractListModel(parent)
163
164
 
164
165
void PdfDocument::loadProvider()
165
166
{
166
 
    qDebug() << "Loading image provider...";
 
167
    // WORKAROUND: QQuickImageProvider should create multiple threads to load more images at the same time.
 
168
    // [QTBUG-37998] QQuickImageProvider can block its separate thread with ForceAsynchronousImageLoading
 
169
    // Link: https://bugreports.qt.io/browse/QTBUG-37988
 
170
    int newProvidersNumber = QThread::idealThreadCount();
 
171
    if (newProvidersNumber != m_providersNumber) {
 
172
        m_providersNumber = newProvidersNumber;
 
173
        Q_EMIT providersNumberChanged();
 
174
    }
 
175
 
 
176
    qDebug() << "Ideal number of image providers is:" << m_providersNumber;
 
177
 
 
178
    qDebug() << "Loading image provider(s)...";
167
179
    QQmlEngine *engine = QQmlEngine::contextForObject(this)->engine();
168
180
 
169
 
    engine->addImageProvider(QLatin1String("poppler"), new PdfImageProvider(m_document));
 
181
    for (int i=0; i<m_providersNumber; i++)
 
182
        engine->addImageProvider(QLatin1String("poppler" + QByteArray::number(i)), new PdfImageProvider(m_document));
170
183
 
171
 
    qDebug() << "Image provider loaded successfully !";
 
184
    qDebug() << "Image provider(s) loaded successfully !";
172
185
}
173
186
 
174
187
PdfDocument::~PdfDocument()