pdfviewer: improve memory usage, improve parse time (by 30-50%) and don't allocate extra buffers (more to do, but low priority now), and put the page specific memory in an allocator.

Review URL: https://codereview.chromium.org/19793011

git-svn-id: http://skia.googlecode.com/svn/trunk@10282 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/PdfViewer/SkPdfFont.cpp b/experimental/PdfViewer/SkPdfFont.cpp
index 2574ce4..0fec460 100644
--- a/experimental/PdfViewer/SkPdfFont.cpp
+++ b/experimental/PdfViewer/SkPdfFont.cpp
@@ -164,12 +164,12 @@
         }
     }
 
-    unsigned char* uncompressedStream = NULL;
+    const unsigned char* uncompressedStream = NULL;
     size_t uncompressedStreamLength = 0;
 
     // TODO(edisonn): report warning to be used in testing.
     if (!pdfStream ||
-            !pdfStream->GetFilteredStreamRef(&uncompressedStream, &uncompressedStreamLength, doc->allocator()) ||
+            !pdfStream->GetFilteredStreamRef(&uncompressedStream, &uncompressedStreamLength) ||
             !uncompressedStream ||
             !uncompressedStreamLength) {
         return NULL;
@@ -321,7 +321,9 @@
     fCMapEncodingFlag = NULL;
 
     if (stream) {
-        SkPdfNativeTokenizer* tokenizer = fParsed->tokenizerOfStream(stream);
+        // Since font will be cached, the font has to sit in the per doc allocator, not to be
+        // freed after the page is done drawing.
+        SkPdfNativeTokenizer* tokenizer = fParsed->tokenizerOfStream(stream, parsed->allocator());
         PdfToken token;
 
         fCMapEncoding = new unsigned short[256 * 256];