Index: dm/DMSrcSink.cpp |
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp |
index f02acf1b87afe69f6c57bdfa03b6158426a74b08..cf72a3cacaf7bc9ff3250915152f3d5ac9df4101 100644 |
--- a/dm/DMSrcSink.cpp |
+++ b/dm/DMSrcSink.cpp |
@@ -9,11 +9,6 @@ |
namespace DM { |
-void SafeUnref(SkPicture* p) { SkSafeUnref(p); } |
-void SafeUnref(SkData* d) { SkSafeUnref(d); } |
- |
-// FIXME: the GM objects themselves are not threadsafe, so we create and destroy them as needed. |
- |
GMSrc::GMSrc(skiagm::GMRegistry::Factory factory) : fFactory(factory) {} |
Error GMSrc::draw(SkCanvas* canvas) const { |
@@ -35,18 +30,10 @@ Name GMSrc::name() const { |
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ |
-// The first call to draw() or size() will mmap the file to an SkData. ~ImageSrc unrefs it. |
-struct LazyLoadImage { |
- LazyLoadImage(const char* path) : path(path) {} |
- const char* path; |
- |
- SkData* operator()() const { return SkData::NewFromFileName(path); } |
-}; |
- |
ImageSrc::ImageSrc(SkString path, int subsets) : fPath(path), fSubsets(subsets) {} |
Error ImageSrc::draw(SkCanvas* canvas) const { |
- const SkData* encoded = fEncoded.get(LazyLoadImage(fPath.c_str())); |
+ SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(fPath.c_str())); |
if (!encoded) { |
return SkStringPrintf("Couldn't read %s.", fPath.c_str()); |
} |
@@ -56,6 +43,7 @@ Error ImageSrc::draw(SkCanvas* canvas) const { |
if (!SkImageDecoder::DecodeMemory(encoded->data(), encoded->size(), &bitmap)) { |
return SkStringPrintf("Couldn't decode %s.", fPath.c_str()); |
} |
+ encoded.reset((SkData*)NULL); // Might as well drop this when we're done with it. |
canvas->drawBitmap(bitmap, 0,0); |
return ""; |
} |
@@ -89,7 +77,7 @@ Error ImageSrc::draw(SkCanvas* canvas) const { |
} |
SkISize ImageSrc::size() const { |
- const SkData* encoded = fEncoded.get(LazyLoadImage(fPath.c_str())); |
+ SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(fPath.c_str())); |
SkBitmap bitmap; |
if (!encoded || !SkImageDecoder::DecodeMemory(encoded->data(), |
encoded->size(), |
@@ -107,45 +95,26 @@ Name ImageSrc::name() const { return SkOSPath::Basename(fPath.c_str()); } |
static const SkRect kSKPViewport = {0,0, 1000,1000}; |
-// The first call to draw() or size() will read the file into an SkPicture. ~SKPSrc unrefs it. |
-struct LazyLoadPicture { |
- LazyLoadPicture(const char* path) : path(path) {} |
- const char* path; |
- |
- SkPicture* operator()() const { |
- SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path)); |
- if (!stream) { |
- return NULL; |
- } |
- return SkPicture::CreateFromStream(stream); |
- } |
-}; |
- |
SKPSrc::SKPSrc(SkString path) : fPath(path) {} |
Error SKPSrc::draw(SkCanvas* canvas) const { |
- const SkPicture* pic = fPic.get(LazyLoadPicture(fPath.c_str())); |
- if (!pic) { |
+ SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(fPath.c_str())); |
+ if (!stream) { |
return SkStringPrintf("Couldn't read %s.", fPath.c_str()); |
} |
+ SkAutoTUnref<SkPicture> pic(SkPicture::CreateFromStream(stream)); |
+ if (!pic) { |
+ return SkStringPrintf("Couldn't decode %s as a picture.", fPath.c_str()); |
+ } |
+ stream.reset((SkStream*)NULL); // Might as well drop this when we're done with it. |
canvas->clipRect(kSKPViewport); |
canvas->drawPicture(pic); |
return ""; |
} |
SkISize SKPSrc::size() const { |
- const SkPicture* pic = fPic.get(LazyLoadPicture(fPath.c_str())); |
- if (!pic) { |
- return SkISize::Make(0,0); |
- } |
- SkRect cull = pic->cullRect(); |
- if (!cull.intersect(kSKPViewport)) { |
- sk_throw(); |
- } |
- SkIRect bounds; |
- cull.roundOut(&bounds); |
- SkISize size = { bounds.width(), bounds.height() }; |
- return size; |
+ // This may be unnecessarily large. |
+ return kSKPViewport.roundOut().size(); |
} |
Name SKPSrc::name() const { return SkOSPath::Basename(fPath.c_str()); } |