From 66058b614d9c8cb63c24b1c779dd1a9a80752217 Mon Sep 17 00:00:00 2001 From: halcanary Date: Fri, 1 Aug 2014 09:25:11 -0700 Subject: [PATCH] Memory improvements to render_pdfs; better DM pool size defaults Make SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE equal to skia_resource_cache_mb_limit, if that value is >0 (true for some low-memory Android devices). render_pdfs test program uses lazy decoding (and the discardable memory pool). BUG=skia:2743 R=djsollen@google.com, mtklein@google.com Author: halcanary@google.com Review URL: https://codereview.chromium.org/433063002 --- gyp/common_conditions.gypi | 1 + gyp/tools.gyp | 5 +++++ src/lazy/SkDiscardableMemoryPool.h | 9 ++++++++- tools/render_pdfs_main.cpp | 5 ++++- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/gyp/common_conditions.gypi b/gyp/common_conditions.gypi index 4fa1ba0..9884e1e 100644 --- a/gyp/common_conditions.gypi +++ b/gyp/common_conditions.gypi @@ -6,6 +6,7 @@ 'SK_SUPPORT_GPU=<(skia_gpu)', 'SK_SUPPORT_OPENCL=<(skia_opencl)', 'SK_FORCE_DISTANCEFIELD_FONTS=<(skia_force_distancefield_fonts)', + 'SK_DEFAULT_RESOURCE_CACHE_MB_LIMIT=<(skia_resource_cache_mb_limit)', ], 'conditions' : [ ['skia_pic', { diff --git a/gyp/tools.gyp b/gyp/tools.gyp index e2e12bf..38996ad 100644 --- a/gyp/tools.gyp +++ b/gyp/tools.gyp @@ -517,12 +517,17 @@ 'type': 'executable', 'sources': [ '../tools/render_pdfs_main.cpp', + '../tools/flags/SkCommandLineFlags.cpp', + '../tools/LazyDecodeBitmap.cpp', '../tools/PdfRenderer.cpp', '../tools/PdfRenderer.h', ], 'include_dirs': [ + '../src/core', + '../src/lazy', '../src/pipe/utils/', '../src/utils/', + '../tools/flags', ], 'dependencies': [ 'pdf.gyp:pdf', diff --git a/src/lazy/SkDiscardableMemoryPool.h b/src/lazy/SkDiscardableMemoryPool.h index d141507..57a14db 100644 --- a/src/lazy/SkDiscardableMemoryPool.h +++ b/src/lazy/SkDiscardableMemoryPool.h @@ -62,7 +62,14 @@ public: SkDiscardableMemoryPool* SkGetGlobalDiscardableMemoryPool(); #if !defined(SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE) -#define SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE (128 * 1024 * 1024) + #if defined(SK_DEFAULT_RESOURCE_CACHE_MB_LIMIT) && \ + SK_DEFAULT_RESOURCE_CACHE_MB_LIMIT > 0 + #define SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE \ + (SK_DEFAULT_RESOURCE_CACHE_MB_LIMIT * 1024 * 1024) + #else + #define SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE \ + (128 * 1024 * 1024) + #endif #endif #endif // SkDiscardableMemoryPool_DEFINED diff --git a/tools/render_pdfs_main.cpp b/tools/render_pdfs_main.cpp index 6e1d609..5e87ec2 100644 --- a/tools/render_pdfs_main.cpp +++ b/tools/render_pdfs_main.cpp @@ -17,6 +17,7 @@ #include "SkTArray.h" #include "PdfRenderer.h" #include "picture_utils.h" +#include "LazyDecodeBitmap.h" __SK_FORCE_IMAGE_DECODER_LINKING; @@ -158,7 +159,9 @@ static bool render_pdf(const SkString& inputPath, const SkString& outputDir, return false; } - SkAutoTUnref picture(SkPicture::CreateFromStream(&inputStream)); + SkAutoTUnref picture( + SkPicture::CreateFromStream( + &inputStream, &sk_tools::LazyDecodeBitmap)); if (NULL == picture.get()) { SkDebugf("Could not read an SkPicture from %s\n", inputPath.c_str()); -- 2.7.4