[poppler] 3 commits - poppler/Function.cc qt4/tests

Albert Astals Cid aacid at kemper.freedesktop.org
Sat Jun 6 16:35:20 PDT 2009


 poppler/Function.cc            |  181 +++++++++++++++++++----------------------
 qt4/tests/test-poppler-qt4.cpp |    2 
 2 files changed, 87 insertions(+), 96 deletions(-)

New commits:
commit d09478fcc44b5c594f1803fc24654af5e10fa129
Author: Albert Astals Cid <aacid at kde.org>
Date:   Sun Jun 7 01:34:01 2009 +0200

    Move index and pop to class definition too

diff --git a/poppler/Function.cc b/poppler/Function.cc
index 071d052..b538f5f 100644
--- a/poppler/Function.cc
+++ b/poppler/Function.cc
@@ -922,8 +922,21 @@ public:
 	     (stack[sp+1].type == psInt || stack[sp+1].type == psReal); }
   void copy(int n);
   void roll(int n, int j);
-  void index(int i);
-  void pop();
+  void index(int i)
+  {
+    if (!checkOverflow()) {
+      return;
+    }
+    --sp;
+    stack[sp] = stack[sp + 1 + i];
+  }
+  void pop()
+  {
+    if (!checkUnderflow()) {
+      return;
+    }
+    ++sp;
+  }
 
 private:
 
@@ -996,21 +1009,6 @@ void PSStack::roll(int n, int j) {
   }
 }
 
-void PSStack::index(int i) {
-  if (!checkOverflow()) {
-    return;
-  }
-  --sp;
-  stack[sp] = stack[sp + 1 + i];
-}
-
-void PSStack::pop() {
-  if (!checkUnderflow()) {
-    return;
-  }
-  ++sp;
-}
-
 PostScriptFunction::PostScriptFunction(Object *funcObj, Dict *dict) {
   Stream *str;
   int codePtr;
commit 2083264e8ab0fd9976294de08a18de615d5a1168
Author: Albert Astals Cid <aacid at kde.org>
Date:   Sun Jun 7 01:21:19 2009 +0200

    Move the implementations to the class definition
    
    Make gcc inline the functions and time to render a heavy PSFunction doc goes from 28 to 20 secs

diff --git a/poppler/Function.cc b/poppler/Function.cc
index 4159140..071d052 100644
--- a/poppler/Function.cc
+++ b/poppler/Function.cc
@@ -861,14 +861,54 @@ struct PSObject {
 class PSStack {
 public:
 
-  PSStack() { sp = psStackSize; }
+  PSStack() {sp = psStackSize; }
   void clear() { sp = psStackSize; }
-  void pushBool(GBool booln);
-  void pushInt(int intg);
-  void pushReal(double real);
-  GBool popBool();
-  int popInt();
-  double popNum();
+  void pushBool(GBool booln)
+  {
+    if (checkOverflow()) {
+      stack[--sp].type = psBool;
+      stack[sp].booln = booln;
+    }
+  }
+  void pushInt(int intg)
+  {
+    if (checkOverflow()) {
+      stack[--sp].type = psInt;
+      stack[sp].intg = intg;
+    }
+  }
+  void pushReal(double real)
+  {
+    if (checkOverflow()) {
+      stack[--sp].type = psReal;
+      stack[sp].real = real;
+    }
+  }
+  GBool popBool()
+  {
+    if (checkUnderflow() && checkType(psBool, psBool)) {
+      return stack[sp++].booln;
+    }
+    return gFalse;
+  }
+  int popInt()
+  {
+    if (checkUnderflow() && checkType(psInt, psInt)) {
+      return stack[sp++].intg;
+    }
+    return 0;
+  }
+  double popNum()
+  {
+    double ret;
+
+    if (checkUnderflow() && checkType(psInt, psReal)) {
+      ret = (stack[sp].type == psInt) ? (double)stack[sp].intg : stack[sp].real;
+      ++sp;
+      return ret;
+    }
+    return 0;
+  }
   GBool empty() { return sp == psStackSize; }
   GBool topIsInt() { return sp < psStackSize && stack[sp].type == psInt; }
   GBool topTwoAreInts()
@@ -887,83 +927,34 @@ public:
 
 private:
 
-  GBool checkOverflow(int n = 1);
-  GBool checkUnderflow();
-  GBool checkType(PSObjectType t1, PSObjectType t2);
-
-  PSObject stack[psStackSize];
-  int sp;
-};
-
-GBool PSStack::checkOverflow(int n) {
-  if (sp - n < 0) {
-    error(-1, "Stack overflow in PostScript function");
-    return gFalse;
-  }
-  return gTrue;
-}
-
-GBool PSStack::checkUnderflow() {
-  if (sp == psStackSize) {
-    error(-1, "Stack underflow in PostScript function");
-    return gFalse;
-  }
-  return gTrue;
-}
-
-GBool PSStack::checkType(PSObjectType t1, PSObjectType t2) {
-  if (stack[sp].type != t1 && stack[sp].type != t2) {
-    error(-1, "Type mismatch in PostScript function");
-    return gFalse;
-  }
-  return gTrue;
-}
-
-void PSStack::pushBool(GBool booln) {
-  if (checkOverflow()) {
-    stack[--sp].type = psBool;
-    stack[sp].booln = booln;
-  }
-}
-
-void PSStack::pushInt(int intg) {
-  if (checkOverflow()) {
-    stack[--sp].type = psInt;
-    stack[sp].intg = intg;
-  }
-}
-
-void PSStack::pushReal(double real) {
-  if (checkOverflow()) {
-    stack[--sp].type = psReal;
-    stack[sp].real = real;
+  GBool checkOverflow(int n = 1)
+  {
+    if (sp - n < 0) {
+      error(-1, "Stack overflow in PostScript function");
+      return gFalse;
+    }
+    return gTrue;
   }
-}
-
-GBool PSStack::popBool() {
-  if (checkUnderflow() && checkType(psBool, psBool)) {
-    return stack[sp++].booln;
+  GBool checkUnderflow()
+  {
+    if (sp == psStackSize) {
+      error(-1, "Stack underflow in PostScript function");
+      return gFalse;
+    }
+    return gTrue;
   }
-  return gFalse;
-}
-
-int PSStack::popInt() {
-  if (checkUnderflow() && checkType(psInt, psInt)) {
-    return stack[sp++].intg;
+  GBool checkType(PSObjectType t1, PSObjectType t2)
+  {
+    if (stack[sp].type != t1 && stack[sp].type != t2) {
+      error(-1, "Type mismatch in PostScript function");
+      return gFalse;
+    }
+    return gTrue;
   }
-  return 0;
-}
-
-double PSStack::popNum() {
-  double ret;
+  PSObject stack[psStackSize];
+  int sp;
+};
 
-  if (checkUnderflow() && checkType(psInt, psReal)) {
-    ret = (stack[sp].type == psInt) ? (double)stack[sp].intg : stack[sp].real;
-    ++sp;
-    return ret;
-  }
-  return 0;
-}
 
 void PSStack::copy(int n) {
   int i;
commit 24580fcd2be74db5f3140bdb2ebff8431b7d3f1e
Author: Albert Astals Cid <aacid at kde.org>
Date:   Sat Jun 6 16:17:26 2009 +0200

    Add a debug saying how much rendering took

diff --git a/qt4/tests/test-poppler-qt4.cpp b/qt4/tests/test-poppler-qt4.cpp
index 0ec917f..1726bfd 100644
--- a/qt4/tests/test-poppler-qt4.cpp
+++ b/qt4/tests/test-poppler-qt4.cpp
@@ -61,7 +61,9 @@ void PDFDisplay::display()
         Poppler::Page *page = doc->page(m_currentPage);
         if (page) {
             qDebug() << "Displaying page using" << backendString << "backend: " << m_currentPage;
+            QTime t = QTime::currentTime();
             image = page->renderToImage();
+            qDebug() << "Rendering took" << t.msecsTo(QTime::currentTime()) << "msecs";
             qDeleteAll(textRects);
             if (showTextRects)
             {


More information about the poppler mailing list