<html>
    <head>
      <base href="https://bugs.freedesktop.org/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [patch] inline some frequently called stream functions"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=89097">89097</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>[patch] inline some frequently called stream functions
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>poppler
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>Other
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>medium
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>general
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>poppler-bugs@lists.freedesktop.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>williambader@hotmail.com
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=113384" name="attach_113384" title="patch to inline some functions in Stream.cc and Stream.h">attachment 113384</a> <a href="attachment.cgi?id=113384&action=edit" title="patch to inline some functions in Stream.cc and Stream.h">[details]</a></span>
patch to inline some functions in Stream.cc and Stream.h

The various Stream classes have getChar() functions that are called once for
each byte in the stream.
This patch makes some of the simpler functions inline.
Most of the functions are virtual, so they probably can't be inlined, but a few
are not virtual, and the change seems to make a small difference.

The profiles are from running "pdftops
2-DESCR_648853-IT-EN-DE_MANITOU_RIGENERATO.pdf x.ps" three times on the test
file from <a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED FIXED - [patch] fix "length bigger than vheaTab size" and "length bigger than vmtxTab size""
   href="show_bug.cgi?id=89076">https://bugs.freedesktop.org/show_bug.cgi?id=89076</a>

pdftops before the patch
  %   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
 15.25      0.93     0.93  8905797     0.00     0.00 
GooString::formatDouble(double, char*, int, int, bool, char**, int*)
  9.34      1.50     0.57  6172503     0.00     0.00  GooString::appendfv(char
const*, __va_list_tag*)
  7.87      1.98     0.48 34515024     0.00     0.00 
FlateStream::getHuffmanCodeWord(FlateHuffmanTab*)
  7.05      2.41     0.43 22730064     0.00     0.00  FlateStream::readSome()
  6.48      2.81     0.40 18514623     0.00     0.00  Lexer::getObj(Object*,
int)
  5.90      3.17     0.36 16607355     0.00     0.00  Parser::getObj(Object*,
bool, unsigned char*, CryptAlgorithm, int, int, int, int, bool)
  5.90      3.53     0.36 106901274     0.00     0.00 
JBIG2Segment::~JBIG2Segment()
  4.92      3.83     0.30 111594801     0.00     0.00  FlateStream::getChar()
  4.34      4.09     0.27 38266749     0.00     0.00  Object::free()
  3.69      4.32     0.23 87202734     0.00     0.00  Lexer::lookChar()
  3.61      4.54     0.22 19199391     0.00     0.00  GooString::append(char
const*, int)
  2.79      4.71     0.17      438     0.39    12.47  Gfx::go(bool)
  2.62      4.87     0.16    38745     0.00     0.00 
FlateStream::compHuffmanCodes(int*, int, FlateHuffmanTab*)
  1.39      4.95     0.09 10967463     0.00     0.00  gmallocn

pdftops after the inline patch
 12.99      0.73     0.73  8905797     0.00     0.00 
GooString::formatDouble(double, char*, int, int, bool, char**, int*)
  9.96      1.29     0.56  6172503     0.00     0.00  GooString::appendfv(char
const*, __va_list_tag*)
  8.10      1.75     0.46 18514623     0.00     0.00  Lexer::getObj(Object*,
int)
  7.38      2.16     0.42 22730064     0.00     0.00  FlateStream::readSome()
  6.23      2.51     0.35 106901274     0.00     0.00 
JBIG2Segment::~JBIG2Segment()
  6.14      2.86     0.35 34515024     0.00     0.00 
FlateStream::getHuffmanCodeWord(FlateHuffmanTab*)
  4.98      3.14     0.28 16607355     0.00     0.00  Parser::getObj(Object*,
bool, unsigned char*, CryptAlgorithm, int, int, int, int, bool)
  4.72      3.40     0.27 111594801     0.00     0.00  FlateStream::getChar()
  3.02      3.57     0.17      438     0.39    11.37  Gfx::go(bool)
  2.67      3.72     0.15    38745     0.00     0.00 
FlateStream::compHuffmanCodes(int*, int, FlateHuffmanTab*)
  2.40      3.86     0.14 38266749     0.00     0.00  Object::free()
  2.14      3.98     0.12 87202734     0.00     0.00  Lexer::lookChar()
  2.05      4.09     0.12 43505223     0.00     0.00  FileStream::getChar()
  1.96      4.20     0.11  5449956     0.00     0.00  Gfx::findOp(char*)
  1.87      4.31     0.11 18343965     0.00     0.00  Parser::shift(int)
  1.78      4.41     0.10 10967463     0.00     0.00  gmallocn
  1.78      4.51     0.10  5449956     0.00     0.00  Gfx::execOp(Object*,
Object*, int)
  1.51      4.59     0.09 19199391     0.00     0.00  GooString::append(char
const*, int)
  1.07      4.65     0.06     2904     0.02     0.07 
SampledFunction::SampledFunction(Object*, Dict*)
  0.98      4.71     0.06 13247493     0.00     0.00 
FlateStream::getCodeWord(int)
  0.89      4.76     0.05  1208397     0.00     0.00 
RunLengthStream::getChars(int, unsigned char*)
  0.71      4.80     0.04   579486     0.00     0.00  GooString::formatInt(long
long, char*, int, bool, int, int, char**, int*, bool)
  0.62      4.83     0.04    72426     0.00     0.00  Parser::~Parser()
  0.62      4.87     0.04    19782     0.00     0.00  BaseStream::getDict()
  0.62      4.90     0.04      654     0.05     0.05  Lexer::getChar(bool)
  0.62      4.94     0.04                             LZWStream::getRawChar()</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>