OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkCanvas.h" | 8 #include "SkCanvas.h" |
9 #include "SkData.h" | 9 #include "SkData.h" |
10 #include "SkDevice.h" | 10 #include "SkDevice.h" |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 | 158 |
159 surface->getCanvas()->drawRect(SkRect::MakeXYWH(1, 1, 1, 1), paint); | 159 surface->getCanvas()->drawRect(SkRect::MakeXYWH(1, 1, 1, 1), paint); |
160 | 160 |
161 SkAutoTUnref<SkImage> image2(surface->newImageSnapshot()); | 161 SkAutoTUnref<SkImage> image2(surface->newImageSnapshot()); |
162 REPORTER_ASSERT(reporter, image2->readPixels(dstInfo, pixels, dstRowBytes, 0
, 0)); | 162 REPORTER_ASSERT(reporter, image2->readPixels(dstInfo, pixels, dstRowBytes, 0
, 0)); |
163 REPORTER_ASSERT(reporter, pixels[0] == green); | 163 REPORTER_ASSERT(reporter, pixels[0] == green); |
164 REPORTER_ASSERT(reporter, pixels[1] == green); | 164 REPORTER_ASSERT(reporter, pixels[1] == green); |
165 REPORTER_ASSERT(reporter, pixels[2] == green); | 165 REPORTER_ASSERT(reporter, pixels[2] == green); |
166 REPORTER_ASSERT(reporter, pixels[3] == red); | 166 REPORTER_ASSERT(reporter, pixels[3] == red); |
167 } | 167 } |
| 168 |
| 169 ////////////////////////////////////////////////////////////////////////////////
///////////////// |
| 170 #include "SkImageGenerator.h" |
| 171 #include "SkData.h" |
| 172 |
| 173 const uint8_t tiny_png[] = { |
| 174 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, |
| 175 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x64, |
| 176 0x08, 0x06, 0x00, 0x00, 0x00, 0x70, 0xe2, 0x95, 0x54, 0x00, 0x00, 0x00, |
| 177 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, |
| 178 0x01, 0x6b, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0xd3, 0x41, 0x11, |
| 179 0x00, 0x20, 0x0c, 0xc4, 0x40, 0xc0, 0xbf, 0xe7, 0xc2, 0xa0, 0x22, 0x8f, |
| 180 0xad, 0x82, 0x4c, 0xd2, 0xdb, 0xf3, 0x6e, 0xb9, 0x8c, 0x81, 0x93, 0x21, |
| 181 0x01, 0xf2, 0x0d, 0x08, 0x12, 0x7b, 0x04, 0x41, 0x04, 0x89, 0x19, 0x88, |
| 182 0xe1, 0x58, 0x88, 0x20, 0x31, 0x03, 0x31, 0x1c, 0x0b, 0x11, 0x24, 0x66, |
| 183 0x20, 0x86, 0x63, 0x21, 0x82, 0xc4, 0x0c, 0xc4, 0x70, 0x2c, 0x44, 0x90, |
| 184 0x98, 0x81, 0x18, 0x8e, 0x85, 0x08, 0x12, 0x33, 0x10, 0xc3, 0xb1, 0x10, |
| 185 0x41, 0x62, 0x06, 0x62, 0x38, 0x16, 0x22, 0x48, 0xcc, 0x40, 0x0c, 0xc7, |
| 186 0x42, 0x04, 0x89, 0x19, 0x88, 0xe1, 0x58, 0x88, 0x20, 0x31, 0x03, 0x31, |
| 187 0x1c, 0x0b, 0x11, 0x24, 0x66, 0x20, 0x86, 0x63, 0x21, 0x82, 0xc4, 0x0c, |
| 188 0xc4, 0x70, 0x2c, 0x44, 0x90, 0x98, 0x81, 0x18, 0x8e, 0x85, 0x08, 0x12, |
| 189 0x33, 0x10, 0xc3, 0xb1, 0x10, 0x41, 0x62, 0x06, 0x62, 0x38, 0x16, 0x22, |
| 190 0x48, 0xcc, 0x40, 0x0c, 0xc7, 0x42, 0x04, 0x89, 0x19, 0x88, 0xe1, 0x58, |
| 191 0x88, 0x20, 0x31, 0x03, 0x31, 0x1c, 0x0b, 0x11, 0x24, 0x66, 0x20, 0x86, |
| 192 0x63, 0x21, 0x82, 0xc4, 0x0c, 0xc4, 0x70, 0x2c, 0x44, 0x90, 0x98, 0x81, |
| 193 0x18, 0x8e, 0x85, 0x08, 0x12, 0x33, 0x10, 0xc3, 0xb1, 0x10, 0x41, 0x62, |
| 194 0x06, 0x62, 0x38, 0x16, 0x22, 0x48, 0xcc, 0x40, 0x0c, 0xc7, 0x42, 0x04, |
| 195 0x89, 0x19, 0x88, 0xe1, 0x58, 0x88, 0x20, 0x31, 0x03, 0x31, 0x1c, 0x0b, |
| 196 0x11, 0x24, 0x66, 0x20, 0x86, 0x63, 0x21, 0x82, 0xc4, 0x0c, 0xc4, 0x70, |
| 197 0x2c, 0x44, 0x90, 0x98, 0x81, 0x18, 0x8e, 0x85, 0x08, 0x12, 0x33, 0x10, |
| 198 0xc3, 0xb1, 0x10, 0x41, 0x62, 0x06, 0x62, 0x38, 0x16, 0x22, 0x48, 0xcc, |
| 199 0x40, 0x0c, 0xc7, 0x42, 0x04, 0x89, 0x19, 0x88, 0xe1, 0x58, 0x88, 0x20, |
| 200 0x31, 0x03, 0x31, 0x1c, 0x0b, 0x11, 0x24, 0x66, 0x20, 0x86, 0x63, 0x21, |
| 201 0x82, 0xc4, 0x0c, 0xc4, 0x70, 0x2c, 0x44, 0x90, 0x98, 0x81, 0x18, 0x8e, |
| 202 0x85, 0x08, 0x12, 0x33, 0x10, 0xc3, 0xb1, 0x10, 0x41, 0x62, 0x06, 0x62, |
| 203 0x38, 0x16, 0x22, 0x48, 0xcc, 0x40, 0x0c, 0xc7, 0x42, 0x04, 0x89, 0x19, |
| 204 0x88, 0xe1, 0x58, 0x88, 0x20, 0x31, 0x03, 0x31, 0x1c, 0x0b, 0x11, 0x24, |
| 205 0x66, 0x20, 0x86, 0x63, 0x21, 0x82, 0xc4, 0x0c, 0xc4, 0x70, 0x2c, 0x44, |
| 206 0x90, 0x98, 0x81, 0x18, 0x8e, 0x85, 0x08, 0x12, 0x33, 0x10, 0xc3, 0xb1, |
| 207 0x10, 0x41, 0x62, 0x06, 0x62, 0x38, 0x16, 0x22, 0x48, 0xcc, 0x40, 0x0c, |
| 208 0xc7, 0x42, 0x62, 0x41, 0x2e, 0x08, 0x60, 0x04, 0xc4, 0x4c, 0x5d, 0x6e, |
| 209 0xf2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, |
| 210 0x82 |
| 211 }; |
| 212 |
| 213 static void make_bitmap_lazy(SkBitmap* bm) { |
| 214 SkAutoTUnref<SkData> data(SkData::NewWithoutCopy(tiny_png, sizeof(tiny_png))
); |
| 215 SkInstallDiscardablePixelRef(data, bm); |
| 216 } |
| 217 |
| 218 static void make_bitmap_mutable(SkBitmap* bm) { |
| 219 bm->allocN32Pixels(10, 10); |
| 220 } |
| 221 |
| 222 static void make_bitmap_immutable(SkBitmap* bm) { |
| 223 bm->allocN32Pixels(10, 10); |
| 224 bm->setImmutable(); |
| 225 } |
| 226 |
| 227 DEF_TEST(image_newfrombitmap, reporter) { |
| 228 const struct { |
| 229 void (*fMakeProc)(SkBitmap*); |
| 230 bool fExpectPeekSuccess; |
| 231 bool fExpectSharedID; |
| 232 } rec[] = { |
| 233 { make_bitmap_lazy, false, true }, |
| 234 { make_bitmap_mutable, true, false }, |
| 235 { make_bitmap_immutable, true, true }, |
| 236 }; |
| 237 |
| 238 for (size_t i = 0; i < SK_ARRAY_COUNT(rec); ++i) { |
| 239 SkBitmap bm; |
| 240 rec[i].fMakeProc(&bm); |
| 241 |
| 242 SkAutoTUnref<SkImage> image(SkImage::NewFromBitmap(bm)); |
| 243 SkPixmap pmap; |
| 244 |
| 245 const bool sharedID = (image->uniqueID() == bm.getGenerationID()); |
| 246 REPORTER_ASSERT(reporter, sharedID == rec[i].fExpectSharedID); |
| 247 |
| 248 #if 0 // TODO: fix so that peek will succeed in the immutable case |
| 249 const bool peekSuccess = image->peekPixels(&pmap); |
| 250 REPORTER_ASSERT(reporter, peekSuccess == rec[i].fExpectPeekSuccess); |
| 251 #endif |
| 252 } |
| 253 } |
OLD | NEW |