OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2010 The Android Open Source Project | 2 * Copyright 2010 The Android Open Source Project |
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 "SkBitmap.h" | 8 #include "SkBitmap.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkData.h" | 10 #include "SkData.h" |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 SkAutoTUnref<SkPDFInt> int1(new SkPDFInt(1)); | 194 SkAutoTUnref<SkPDFInt> int1(new SkPDFInt(1)); |
195 SkAutoTUnref<SkPDFInt> int2(new SkPDFInt(2)); | 195 SkAutoTUnref<SkPDFInt> int2(new SkPDFInt(2)); |
196 SkAutoTUnref<SkPDFInt> int3(new SkPDFInt(3)); | 196 SkAutoTUnref<SkPDFInt> int3(new SkPDFInt(3)); |
197 int1.get()->ref(); | 197 int1.get()->ref(); |
198 SkAutoTUnref<SkPDFInt> int1Again(int1.get()); | 198 SkAutoTUnref<SkPDFInt> int1Again(int1.get()); |
199 | 199 |
200 catalog.addObject(int1.get(), false); | 200 catalog.addObject(int1.get(), false); |
201 catalog.addObject(int2.get(), false); | 201 catalog.addObject(int2.get(), false); |
202 catalog.addObject(int3.get(), false); | 202 catalog.addObject(int3.get(), false); |
203 | 203 |
204 REPORTER_ASSERT(reporter, catalog.getObjectNumberSize(int1.get()) == 3); | |
205 REPORTER_ASSERT(reporter, catalog.getObjectNumberSize(int2.get()) == 3); | |
206 REPORTER_ASSERT(reporter, catalog.getObjectNumberSize(int3.get()) == 3); | |
207 | |
208 SkDynamicMemoryWStream buffer; | 204 SkDynamicMemoryWStream buffer; |
209 catalog.emitObjectNumber(&buffer, int1.get()); | 205 catalog.emitObjectNumber(&buffer, int1.get()); |
210 catalog.emitObjectNumber(&buffer, int2.get()); | 206 catalog.emitObjectNumber(&buffer, int2.get()); |
211 catalog.emitObjectNumber(&buffer, int3.get()); | 207 catalog.emitObjectNumber(&buffer, int3.get()); |
212 catalog.emitObjectNumber(&buffer, int1Again.get()); | 208 catalog.emitObjectNumber(&buffer, int1Again.get()); |
213 char expectedResult[] = "1 02 03 01 0"; | 209 char expectedResult[] = "1 02 03 01 0"; |
214 REPORTER_ASSERT(reporter, stream_equals(buffer, 0, expectedResult, | 210 REPORTER_ASSERT(reporter, stream_equals(buffer, 0, expectedResult, |
215 strlen(expectedResult))); | 211 strlen(expectedResult))); |
216 } | 212 } |
217 | 213 |
218 static void TestObjectRef(skiatest::Reporter* reporter) { | 214 static void TestObjectRef(skiatest::Reporter* reporter) { |
219 SkAutoTUnref<SkPDFInt> int1(new SkPDFInt(1)); | 215 SkAutoTUnref<SkPDFInt> int1(new SkPDFInt(1)); |
220 SkAutoTUnref<SkPDFInt> int2(new SkPDFInt(2)); | 216 SkAutoTUnref<SkPDFInt> int2(new SkPDFInt(2)); |
221 SkAutoTUnref<SkPDFObjRef> int2ref(new SkPDFObjRef(int2.get())); | 217 SkAutoTUnref<SkPDFObjRef> int2ref(new SkPDFObjRef(int2.get())); |
222 | 218 |
223 SkPDFCatalog catalog((SkPDFDocument::Flags)0); | 219 SkPDFCatalog catalog((SkPDFDocument::Flags)0); |
224 catalog.addObject(int1.get(), false); | 220 catalog.addObject(int1.get(), false); |
225 catalog.addObject(int2.get(), false); | 221 catalog.addObject(int2.get(), false); |
226 REPORTER_ASSERT(reporter, catalog.getObjectNumberSize(int1.get()) == 3); | |
227 REPORTER_ASSERT(reporter, catalog.getObjectNumberSize(int2.get()) == 3); | |
228 | 222 |
229 char expectedResult[] = "2 0 R"; | 223 char expectedResult[] = "2 0 R"; |
230 SkDynamicMemoryWStream buffer; | 224 SkDynamicMemoryWStream buffer; |
231 int2ref->emitObject(&buffer, &catalog); | 225 int2ref->emitObject(&buffer, &catalog); |
232 REPORTER_ASSERT(reporter, buffer.getOffset() == strlen(expectedResult)); | 226 REPORTER_ASSERT(reporter, buffer.getOffset() == strlen(expectedResult)); |
233 REPORTER_ASSERT(reporter, stream_equals(buffer, 0, expectedResult, | 227 REPORTER_ASSERT(reporter, stream_equals(buffer, 0, expectedResult, |
234 buffer.getOffset())); | 228 buffer.getOffset())); |
235 } | 229 } |
236 | 230 |
237 static void TestSubstitute(skiatest::Reporter* reporter) { | 231 static void TestSubstitute(skiatest::Reporter* reporter) { |
238 SkAutoTUnref<SkPDFTestDict> proxy(new SkPDFTestDict()); | 232 SkAutoTUnref<SkPDFTestDict> proxy(new SkPDFTestDict()); |
239 SkAutoTUnref<SkPDFTestDict> stub(new SkPDFTestDict()); | 233 SkAutoTUnref<SkPDFTestDict> stub(new SkPDFTestDict()); |
240 SkAutoTUnref<SkPDFInt> int33(new SkPDFInt(33)); | |
241 SkAutoTUnref<SkPDFDict> stubResource(new SkPDFDict()); | |
242 SkAutoTUnref<SkPDFInt> int44(new SkPDFInt(44)); | |
243 | 234 |
244 stub->insert("Value", int33.get()); | 235 proxy->insert("Value", new SkPDFInt(33))->unref(); |
245 stubResource->insert("InnerValue", int44.get()); | 236 stub->insert("Value", new SkPDFInt(44))->unref(); |
246 stub->addResource(stubResource.get()); | |
247 | 237 |
248 SkPDFCatalog catalog((SkPDFDocument::Flags)0); | 238 SkPDFCatalog catalog((SkPDFDocument::Flags)0); |
249 catalog.addObject(proxy.get(), false); | 239 catalog.addObject(proxy.get(), false); |
250 catalog.setSubstitute(proxy.get(), stub.get()); | 240 catalog.setSubstitute(proxy.get(), stub.get()); |
251 | 241 |
252 SkDynamicMemoryWStream buffer; | 242 REPORTER_ASSERT(reporter, stub.get() == catalog.getSubstituteObject(proxy)); |
253 emit_object(proxy, &buffer, &catalog, false); | 243 REPORTER_ASSERT(reporter, proxy.get() != catalog.getSubstituteObject(stub)); |
254 SkTSet<SkPDFObject*>* substituteResources = | |
255 catalog.getSubstituteList(false); | |
256 for (int i = 0; i < substituteResources->count(); ++i) { | |
257 emit_object((*substituteResources)[i], &buffer, &catalog, true); | |
258 } | |
259 | |
260 char objectResult[] = "2 0 obj\n<</Value 33\n>>\nendobj\n"; | |
261 catalog.setFileOffset(proxy.get(), 0); | |
262 | |
263 size_t outputSize = get_output_size( | |
264 catalog.getSubstituteObject(proxy.get()), &catalog, true); | |
265 REPORTER_ASSERT(reporter, outputSize == strlen(objectResult)); | |
266 | |
267 char expectedResult[] = | |
268 "<</Value 33\n>>1 0 obj\n<</InnerValue 44\n>>\nendobj\n"; | |
269 REPORTER_ASSERT(reporter, buffer.getOffset() == strlen(expectedResult)); | |
270 REPORTER_ASSERT(reporter, stream_equals(buffer, 0, expectedResult, | |
271 buffer.getOffset())); | |
272 } | 244 } |
273 | 245 |
274 // Create a bitmap that would be very eficiently compressed in a ZIP. | 246 // Create a bitmap that would be very eficiently compressed in a ZIP. |
275 static void setup_bitmap(SkBitmap* bitmap, int width, int height) { | 247 static void setup_bitmap(SkBitmap* bitmap, int width, int height) { |
276 bitmap->allocN32Pixels(width, height); | 248 bitmap->allocN32Pixels(width, height); |
277 bitmap->eraseColor(SK_ColorWHITE); | 249 bitmap->eraseColor(SK_ColorWHITE); |
278 } | 250 } |
279 | 251 |
280 static void TestImage(skiatest::Reporter* reporter, const SkBitmap& bitmap, | 252 static void TestImage(skiatest::Reporter* reporter, const SkBitmap& bitmap, |
281 const char* expected, bool useDCTEncoder) { | 253 const char* expected, bool useDCTEncoder) { |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
505 | 477 |
506 // Filter just created; should be unvisited. | 478 // Filter just created; should be unvisited. |
507 REPORTER_ASSERT(reporter, !filter->visited()); | 479 REPORTER_ASSERT(reporter, !filter->visited()); |
508 SkPaint paint; | 480 SkPaint paint; |
509 paint.setImageFilter(filter.get()); | 481 paint.setImageFilter(filter.get()); |
510 canvas.drawRect(SkRect::MakeWH(100, 100), paint); | 482 canvas.drawRect(SkRect::MakeWH(100, 100), paint); |
511 | 483 |
512 // Filter was used in rendering; should be visited. | 484 // Filter was used in rendering; should be visited. |
513 REPORTER_ASSERT(reporter, filter->visited()); | 485 REPORTER_ASSERT(reporter, filter->visited()); |
514 } | 486 } |
OLD | NEW |