Package: diffpdf
Version: 2.1.3-1+b1
Severity: wishlist
Tags: patch

Dear Maintainer,



   * What led up to the situation?

        Comparison of two testsuitereports lasts more then a minute

   * What exactly did you do

        I wrote a patch to minimize the time of comparison

   * What was the outcome of this action?

        Now it only takes  a few seconds to compare two testsuitereports





-- System Information:
Debian Release: 8.9
  APT prefers oldstable-updates
  APT policy: (500, 'oldstable-updates'), (500, 'oldstable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.16.0-4-amd64 (SMP w/16 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages diffpdf depends on:
ii  libc6             2.19-18+deb8u10
ii  libgcc1           1:4.9.2-10
ii  libpoppler-qt4-4  0.26.5-2+deb8u1
ii  libqtcore4        4:4.8.6+git64-g5dc8b2b+dfsg-3+deb8u1
ii  libqtgui4         4:4.8.6+git64-g5dc8b2b+dfsg-3+deb8u1
ii  libstdc++6        4.9.2-10

diffpdf recommends no packages.

diffpdf suggests no packages.

-- no debconf information
Index: diffpdf-2.1.3/mainwindow.cpp
===================================================================
--- diffpdf-2.1.3.orig/mainwindow.cpp	2017-10-04 15:30:55.579372153 +0200
+++ diffpdf-2.1.3/mainwindow.cpp	2017-10-04 15:46:18.675949547 +0200
@@ -44,6 +44,7 @@
 #include <QSettings>
 #include <QSpinBox>
 #include <QSplitter>
+#include <omp.h>
 
 
 MainWindow::MainWindow(const Debug debug,
@@ -1415,40 +1416,62 @@
     QList<int> pages1 = getPageList(1, pdf1);
     QList<int> pages2 = getPageList(2, pdf2);
     int total = qMin(pages1.count(), pages2.count());
-    int number = 0;
+
     int index = 0;
-    while (!pages1.isEmpty() && !pages2.isEmpty()) {
-        int p1 = pages1.takeFirst();
-        PdfPage page1(pdf1->page(p1));
-        if (!page1) {
-            writeError(tr("Failed to read page %1 from '%2'.")
-                          .arg(p1 + 1).arg(filename1));
-            continue;
-        }
-        int p2 = pages2.takeFirst();
-        PdfPage page2(pdf2->page(p2));
-        if (!page2) {
-            writeError(tr("Failed to read page %1 from '%2'.")
-                          .arg(p2 + 1).arg(filename2));
-            continue;
-        }
-        writeLine(tr("Comparing: %1 vs. %2.").arg(p1 + 1).arg(p2 + 1));
-        QApplication::processEvents();
-        if (cancel) {
-            writeError(tr("Cancelled."));
-            break;
-        }
-        Difference difference = getTheDifference(page1, page2);
-        if (difference != NoDifference) {
-            QVariant v;
-            v.setValue(PagePair(p1, p2, difference == VisualDifference));
-            viewDiffComboBox->addItem(tr("%1 vs. %2 %3 %4")
-                    .arg(p1 + 1).arg(p2 + 1).arg(QChar(0x2022))
-                    .arg(++index), v);
-        }
-        statusLabel->setText(tr("Comparing %1/%2").arg(++number)
-                                                  .arg(total));
+    int number = 0;
+    int processed = 0;
+
+    Difference difference[total];
+
+#pragma omp parallel for schedule(dynamic)
+    for (number = 0; number < total; number++) {
+
+      int p1 = pages1[number];
+      int p2 = pages2[number];
+
+#pragma omp critical
+      {
+	processed++;
+	statusLabel->setText(tr("Comparing %1/%2").arg(processed).arg(total));
+	writeLine(tr("Comparing: %1 vs. %2.").arg(p1 + 1).arg(p2 + 1));
+	QApplication::processEvents();
+      }
+
+      if (!cancel) {
+
+	PdfPage page1(pdf1->page(p1));
+	if (!page1) {
+#pragma omp critical
+	  writeError(tr("Failed to read page %1 from '%2'.").arg(p1 + 1).arg(filename1));
+	  continue;
+	}
+
+	PdfPage page2(pdf2->page(p2));
+	if (!page2) {
+#pragma omp critical
+	  writeError(tr("Failed to read page %1 from '%2'.").arg(p2 + 1).arg(filename2));
+	  continue;
+	}
+
+	difference[number] = getTheDifference(page1, page2);
+      }
     }
+
+    if (!cancel) {
+
+      for (number = 0; number < total; number++) {
+
+	int p1 = pages1.takeFirst();
+	int p2 = pages2.takeFirst();
+
+	if (difference[number] != NoDifference) {
+	  QVariant v;
+	  v.setValue(PagePair(p1, p2, difference[number] == VisualDifference));
+	  viewDiffComboBox->addItem(tr("%1 vs. %2 %3 %4").arg(p1 + 1).arg(p2 + 1).arg(QChar(0x2022)).arg(++index), v);
+	}
+      }
+    }
+
     return qMakePair(number, total);
 }
 
Index: diffpdf-2.1.3/diffpdf.pro
===================================================================
--- diffpdf-2.1.3.orig/diffpdf.pro	2013-10-15 09:01:22.000000000 +0200
+++ diffpdf-2.1.3/diffpdf.pro	2017-10-04 15:35:13.152649399 +0200
@@ -32,6 +32,9 @@
 TRANSLATIONS += diffpdf_es.ts
 CODECFORTR    = UTF-8
 LIBS	     += -lpoppler-qt4
+QMAKE_CFLAGS += -fopenmp
+QMAKE_CXXFLAGS += -fopenmp
+QMAKE_LFLAGS += -fopenmp
 win32 {
     CONFIG += release
 }

Reply via email to