have resources return unique_ptr for stream
Bug: skia:
Change-Id: I649f4435d06704a5a581a481fe3c46b6ec677baf
Reviewed-on: https://skia-review.googlesource.com/26041
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/bench/PDFBench.cpp b/bench/PDFBench.cpp
index 5786f5b..9965941 100644
--- a/bench/PDFBench.cpp
+++ b/bench/PDFBench.cpp
@@ -147,7 +147,7 @@
return backend == kNonRendering_Backend;
}
void onDelayedSetup() override {
- fAsset.reset(GetResourceAsStream("pdf_command_stream.txt"));
+ fAsset = GetResourceAsStream("pdf_command_stream.txt");
}
void onDraw(int loops, SkCanvas*) override {
SkASSERT(fAsset);
diff --git a/gm/bitmapimage.cpp b/gm/bitmapimage.cpp
index be17af8..9832041 100644
--- a/gm/bitmapimage.cpp
+++ b/gm/bitmapimage.cpp
@@ -36,7 +36,7 @@
}
// Create matching bitmap.
- std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(GetResourceAsStream(path)));
+ std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(GetResourceAsStream(path).release()));
SkBitmap bitmap;
bitmap.allocPixels(codec->getInfo());
codec->getPixels(codec->getInfo(), bitmap.getPixels(), bitmap.rowBytes());
diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp
index ac4afd1..12e3f2c 100644
--- a/tests/CodecTest.cpp
+++ b/tests/CodecTest.cpp
@@ -1001,7 +1001,7 @@
}
static void check_color_xform(skiatest::Reporter* r, const char* path) {
- std::unique_ptr<SkAndroidCodec> codec(SkAndroidCodec::NewFromStream(GetResourceAsStream(path)));
+ std::unique_ptr<SkAndroidCodec> codec(SkAndroidCodec::NewFromStream(GetResourceAsStream(path).release()));
SkAndroidCodec::AndroidOptions opts;
opts.fSampleSize = 3;
@@ -1091,12 +1091,12 @@
}
path = "grayscale.jpg";
- stream.reset(GetResourceAsStream(path));
+ stream = GetResourceAsStream(path);
codec.reset(SkCodec::NewFromStream(stream.release()));
check_round_trip(r, codec.get(), codec->getInfo());
path = "yellow_rose.png";
- stream.reset(GetResourceAsStream(path));
+ stream = GetResourceAsStream(path);
codec.reset(SkCodec::NewFromStream(stream.release()));
SkColorType colorTypesWithAlpha[] = {
@@ -1116,7 +1116,7 @@
}
path = "index8.png";
- stream.reset(GetResourceAsStream(path));
+ stream = GetResourceAsStream(path);
codec.reset(SkCodec::NewFromStream(stream.release()));
for (SkAlphaType alphaType : alphaTypes) {
@@ -1202,15 +1202,16 @@
// client never calls getFrameInfo and only decodes frame 0.
DEF_TEST(Codec_skipFullParse, r) {
auto path = "test640x479.gif";
- SkStream* stream(GetResourceAsStream(path));
- if (!stream) {
+ auto streamObj = GetResourceAsStream(path);
+ if (!streamObj) {
return;
}
+ SkStream* stream = streamObj.get();
// Note that we cheat and hold on to the stream pointer, but SkCodec will
// take ownership. We will not refer to the stream after the SkCodec
// deletes it.
- std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream));
+ std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(streamObj.release()));
if (!codec) {
ERRORF(r, "Failed to create codec for %s", path);
return;
@@ -1235,12 +1236,12 @@
// Only rewinds up to a limit.
class LimitedRewindingStream : public SkStream {
public:
- static SkStream* Make(const char path[], size_t limit) {
- SkStream* stream = GetResourceAsStream(path);
+ static std::unique_ptr<SkStream> Make(const char path[], size_t limit) {
+ auto stream = GetResourceAsStream(path);
if (!stream) {
return nullptr;
}
- return new LimitedRewindingStream(stream, limit);
+ return std::unique_ptr<SkStream>(new LimitedRewindingStream(std::move(stream), limit));
}
size_t read(void* buffer, size_t size) override {
@@ -1267,8 +1268,8 @@
const size_t fLimit;
size_t fPosition;
- LimitedRewindingStream(SkStream* stream, size_t limit)
- : fStream(stream)
+ LimitedRewindingStream(std::unique_ptr<SkStream> stream, size_t limit)
+ : fStream(std::move(stream))
, fLimit(limit)
, fPosition(0)
{
@@ -1289,13 +1290,13 @@
"randPixels.bmp",
};
for (auto file : files) {
- SkStream* stream = LimitedRewindingStream::Make(file, 14);
+ auto stream = LimitedRewindingStream::Make(file, 14);
if (!stream) {
SkDebugf("Missing resources (%s). Set --resourcePath.\n", file);
return;
}
- std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream));
+ std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream.release()));
if (!codec) {
ERRORF(r, "Failed to create codec for %s,", file);
continue;
@@ -1380,12 +1381,12 @@
static void test_invalid_images(skiatest::Reporter* r, const char* path,
SkCodec::Result expectedResult) {
- auto* stream = GetResourceAsStream(path);
+ auto stream = GetResourceAsStream(path);
if (!stream) {
return;
}
- std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream));
+ std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream.release()));
REPORTER_ASSERT(r, codec);
test_info(r, codec.get(), codec->getInfo().makeColorType(kN32_SkColorType), expectedResult,
@@ -1423,12 +1424,12 @@
DEF_TEST(Codec_InvalidAnimated, r) {
// ASAN will complain if there is an issue.
auto path = "invalid_images/skbug6046.gif";
- auto* stream = GetResourceAsStream(path);
+ auto stream = GetResourceAsStream(path);
if (!stream) {
return;
}
- std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream));
+ std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream.release()));
REPORTER_ASSERT(r, codec);
if (!codec) {
return;
diff --git a/tests/ExifTest.cpp b/tests/ExifTest.cpp
index 4fed2b0..f9e357d 100644
--- a/tests/ExifTest.cpp
+++ b/tests/ExifTest.cpp
@@ -21,7 +21,7 @@
SkCodec::Origin origin = codec->getOrigin();
REPORTER_ASSERT(r, SkCodec::kTopRight_Origin == origin);
- stream.reset(GetResourceAsStream("mandrill_512_q075.jpg"));
+ stream = GetResourceAsStream("mandrill_512_q075.jpg");
codec.reset(SkCodec::NewFromStream(stream.release()));
REPORTER_ASSERT(r, nullptr != codec);
origin = codec->getOrigin();
diff --git a/tools/Resources.cpp b/tools/Resources.cpp
index f93cf24..27ccef4 100644
--- a/tools/Resources.cpp
+++ b/tools/Resources.cpp
@@ -44,14 +44,14 @@
return SkImage::MakeFromEncoded(resourceData);
}
-SkStreamAsset* GetResourceAsStream(const char* resource) {
+std::unique_ptr<SkStreamAsset> GetResourceAsStream(const char* resource) {
SkString resourcePath = GetResourcePath(resource);
std::unique_ptr<SkFILEStream> stream(new SkFILEStream(resourcePath.c_str()));
if (!stream->isValid()) {
SkDebugf("Resource %s not found.\n", resource);
return nullptr;
}
- return stream.release();
+ return std::move(stream);
}
sk_sp<SkData> GetResourceAsData(const char* resource) {
diff --git a/tools/Resources.h b/tools/Resources.h
index fa1ca45..01eaa3f 100644
--- a/tools/Resources.h
+++ b/tools/Resources.h
@@ -22,7 +22,7 @@
bool GetResourceAsBitmap(const char* resource, SkBitmap* dst);
sk_sp<SkImage> GetResourceAsImage(const char* resource);
-SkStreamAsset* GetResourceAsStream(const char* resource);
+std::unique_ptr<SkStreamAsset> GetResourceAsStream(const char* resource);
sk_sp<SkData> GetResourceAsData(const char* resource);
sk_sp<SkTypeface> MakeResourceAsTypeface(const char* resource);