diff options
Diffstat (limited to 'experimental/PdfViewer/pdfparser/native')
4 files changed, 20 insertions, 2 deletions
diff --git a/experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.cpp b/experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.cpp index 8bd14ccfd1..bd46577322 100644 --- a/experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.cpp +++ b/experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.cpp @@ -416,3 +416,11 @@ SkPdfObject* SkNativeParsedPDF::resolveReference(const SkPdfObject* ref) { // TODO(edisonn): fix the mess with const, probably we need to remove it pretty much everywhere return (SkPdfObject*)ref; } + +size_t SkNativeParsedPDF::bytesUsed() { + return fAllocator->bytesUsed() + + fContentLength + + fObjects.count() * sizeof(PublicObjectEntry) + + fPages.count() * sizeof(SkPdfPageObjectDictionary*) + + sizeof(*this); +} diff --git a/experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.h b/experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.h index f61114b9e1..48442fd2cb 100644 --- a/experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.h +++ b/experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.h @@ -17,8 +17,6 @@ class SkPdfCatalogDictionary; class SkPdfPageObjectDictionary; class SkPdfPageTreeNodeDictionary; - - class SkPdfNativeTokenizer; class SkNativeParsedPDF { @@ -63,6 +61,9 @@ public: SkPdfObject* resolveReference(const SkPdfObject* ref); + // Reports an approximation of all the memory usage. + size_t bytesUsed(); + private: unsigned char* readCrossReferenceSection(unsigned char* xrefStart, unsigned char* trailerEnd); diff --git a/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.cpp b/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.cpp index 6caca8f295..de49e35f11 100644 --- a/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.cpp +++ b/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.cpp @@ -651,6 +651,7 @@ unsigned char* nextObject(unsigned char* start, unsigned char* end, SkPdfObject* } SkPdfObject* SkPdfAllocator::allocBlock() { + fSizeInBytes += BUFFER_SIZE * sizeof(SkPdfObject); return new SkPdfObject[BUFFER_SIZE]; } @@ -675,6 +676,7 @@ SkPdfObject* SkPdfAllocator::allocObject() { fHistory.push(fCurrent); fCurrent = allocBlock(); fCurrentUsed = 0; + fSizeInBytes += sizeof(SkPdfObject*); } fCurrentUsed++; return &fCurrent[fCurrentUsed - 1]; diff --git a/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.h b/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.h index 333d9dc265..f544ff3bc1 100644 --- a/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.h +++ b/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.h @@ -83,9 +83,11 @@ class SkPdfAllocator { int fCurrentUsed; SkPdfObject* allocBlock(); + size_t fSizeInBytes; public: SkPdfAllocator() { + fSizeInBytes = sizeof(*this); fCurrent = allocBlock(); fCurrentUsed = 0; } @@ -98,8 +100,13 @@ public: void* alloc(size_t bytes) { void* data = malloc(bytes); fHandles.push(data); + fSizeInBytes += bytes; return data; } + + size_t bytesUsed() { + return fSizeInBytes; + } }; class SkNativeParsedPDF; |