Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(983)

Unified Diff: tools/PictureRenderingFlags.cpp

Issue 12433020: Improvements/additions to SkImageCache/SkLazyPixelRef. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Modified a comment. Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/PictureRenderingFlags.cpp
diff --git a/tools/PictureRenderingFlags.cpp b/tools/PictureRenderingFlags.cpp
index d8522013cf2c5a177b860e406635b10d2eec5d3d..3b0bea4c961e34c8e06ce8a89b9399d8ae8cce86 100644
--- a/tools/PictureRenderingFlags.cpp
+++ b/tools/PictureRenderingFlags.cpp
@@ -11,7 +11,19 @@
#include "PictureRenderer.h"
#include "picture_utils.h"
+#include "SkBitmapFactory.h"
+#include "SkData.h"
#include "SkFlags.h"
+#include "SkLruImageCache.h"
+#include "SkImage.h"
+#include "SkImageDecoder.h"
+#include "SkString.h"
+
+#ifdef SK_BUILD_FOR_MAC
+ #include "SkMacImageCache.h"
+#elif defined(SK_BUILD_FOR_ANDROID)
+ #include "SkAshmemImageCache.h"
+#endif
// Alphabetized list of flags used by this file or bench_ and render_pictures.
DEFINE_string(bbh, "none", "bbhType [width height]: Set the bounding box hierarchy type to "
@@ -57,6 +69,9 @@ DEFINE_string(r, "", "skp files or directories of skp files to process.");
DEFINE_double(scale, 1, "Set the scale factor.");
DEFINE_string(tiles, "", "Used with --mode copyTile to specify number of tiles per larger tile "
"in the x and y directions.");
+DEFINE_bool(useVolatileCache, false, "Use a volatile cache for deferred image decoding pixels. "
+ "Only meaningful if --deferImageDecoding is set to true and the platform has an "
+ "implementation.");
DEFINE_string(viewport, "", "width height: Set the viewport.");
sk_tools::PictureRenderer* parseRenderer(SkString& error, PictureTool tool) {
@@ -309,3 +324,29 @@ sk_tools::PictureRenderer* parseRenderer(SkString& error, PictureTool tool) {
return renderer.detach();
}
+SkLruImageCache gLruImageCache(1024*1024);
+
+static SkImageCache* cache_selector(const SkImage::Info& info) {
+ if (info.fWidth * info.fHeight > 32 * 1024) {
+#ifdef SK_BUILD_FOR_MAC
+ return SkMacImageCache::GetMacImageCache();
+#elif defined(SK_BUILD_FOR_ANDROID)
+ return SkAshmemImageCache::GetAshmemImageCache();
+#endif
+ }
+ return &gLruImageCache;
+}
+
+bool lazy_decode_bitmap(const void* buffer, size_t size, SkBitmap* bitmap);
+bool lazy_decode_bitmap(const void* buffer, size_t size, SkBitmap* bitmap) {
+ void* copiedBuffer = sk_malloc_throw(size);
+ memcpy(copiedBuffer, buffer, size);
+ SkAutoDataUnref data(SkData::NewFromMalloc(copiedBuffer, size));
+ SkBitmapFactory factory(&SkImageDecoder::DecodeMemoryToTarget);
+ if (FLAGS_useVolatileCache) {
+ factory.setCacheSelector(&cache_selector);
+ } else {
+ factory.setImageCache(&gLruImageCache);
+ }
+ return factory.installPixelRef(data, bitmap);
+}

Powered by Google App Engine
This is Rietveld 408576698