[poppler] poppler/SplashOutputDev.cc splash/SplashPath.cc splash/SplashPath.h

Albert Astals Cid aacid at kemper.freedesktop.org
Wed May 30 07:26:55 UTC 2018


 poppler/SplashOutputDev.cc |    2 ++
 splash/SplashPath.cc       |   18 ++++++++++++++++++
 splash/SplashPath.h        |    4 ++++
 3 files changed, 24 insertions(+)

New commits:
commit b4f0e2b27a0880801c7af0c82fe17894797511b2
Author: Stefan Brüns <stefan.bruens at rwth-aachen.de>
Date:   Sat May 26 19:51:20 2018 +0200

    Splash: Reserve space for path segments upfront
    
    Instead of iteratively growing the array reserve sufficient space
    prior to populating the array.

diff --git a/poppler/SplashOutputDev.cc b/poppler/SplashOutputDev.cc
index b85a860c..74953839 100644
--- a/poppler/SplashOutputDev.cc
+++ b/poppler/SplashOutputDev.cc
@@ -39,6 +39,7 @@
 // Copyright (C) 2016 Takahiro Hashimoto <kenya888.en at gmail.com>
 // Copyright (C) 2017 Even Rouault <even.rouault at spatialys.com>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Stefan Brüns <stefan.bruens at rwth-aachen.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -2368,6 +2369,7 @@ SplashPath *SplashOutputDev::convertPath(GfxState *state, GfxPath *path,
   for (i = 0; i < path->getNumSubpaths(); ++i) {
     subpath = path->getSubpath(i);
     if (subpath->getNumPoints() > n) {
+      sPath->reserve(subpath->getNumPoints() + 1);
       sPath->moveTo((SplashCoord)subpath->getX(0),
 		    (SplashCoord)subpath->getY(0));
       j = 1;
diff --git a/splash/SplashPath.cc b/splash/SplashPath.cc
index 09b2a76e..5a333161 100644
--- a/splash/SplashPath.cc
+++ b/splash/SplashPath.cc
@@ -4,6 +4,20 @@
 //
 //========================================================================
 
+//========================================================================
+//
+// Modified under the Poppler project - http://poppler.freedesktop.org
+//
+// All changes made under the Poppler project to this file are licensed
+// under GPL version 2 or later
+//
+// Copyright (C) 2018 Stefan Brüns <stefan.bruens at rwth-aachen.de>
+//
+// To see a description of the changes please see the Changelog file that
+// came with your tarball or type make ChangeLog if you are building from git
+//
+//========================================================================
+
 #include <config.h>
 
 #ifdef USE_GCC_PRAGMAS
@@ -62,6 +76,10 @@ SplashPath::~SplashPath() {
   gfree(hints);
 }
 
+void  SplashPath::reserve(int nPts) {
+  grow(nPts - size);
+}
+
 // Add space for <nPts> more points.
 void SplashPath::grow(int nPts) {
   if (length + nPts > size) {
diff --git a/splash/SplashPath.h b/splash/SplashPath.h
index c8164a8b..54331372 100644
--- a/splash/SplashPath.h
+++ b/splash/SplashPath.h
@@ -12,6 +12,7 @@
 // under GPL version 2 or later
 //
 // Copyright (C) 2018 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2018 Stefan Brüns <stefan.bruens at rwth-aachen.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -115,6 +116,9 @@ public:
   // Get the current point.
   GBool getCurPt(SplashCoord *x, SplashCoord *y);
 
+  // Reserve space for at least n points
+  void reserve(int n);
+
 protected:
 
   SplashPath(SplashPath *path);


More information about the poppler mailing list