| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 /* | 
|  | 2  * Copyright 2016 Google Inc. | 
|  | 3  * | 
|  | 4  * Use of this source code is governed by a BSD-style license that can be | 
|  | 5  * found in the LICENSE file. | 
|  | 6  */ | 
|  | 7 | 
|  | 8 #include "Benchmark.h" | 
|  | 9 #include "Resources.h" | 
|  | 10 #include "SkImage.h" | 
|  | 11 #include "SkPixmap.h" | 
|  | 12 #include "SkData.h" | 
|  | 13 | 
|  | 14 #if SK_SUPPORT_PDF | 
|  | 15 | 
|  | 16 #include "SkPDFBitmap.h" | 
|  | 17 | 
|  | 18 namespace { | 
|  | 19 struct NullWStream : public SkWStream { | 
|  | 20     NullWStream() : fN(0) {} | 
|  | 21     bool write(const void*, size_t n) override { fN += n; return true; } | 
|  | 22     size_t bytesWritten() const override { return fN; } | 
|  | 23     size_t fN; | 
|  | 24 }; | 
|  | 25 | 
|  | 26 static void test_pdf_image_serialization(SkImage* img) { | 
|  | 27     SkAutoTUnref<SkPDFObject> object( | 
|  | 28             SkPDFCreateBitmapObject(img, nullptr)); | 
|  | 29     if (!object) { | 
|  | 30         SkDEBUGFAIL(""); | 
|  | 31         return; | 
|  | 32     } | 
|  | 33     // SkDebugWStream wStream; | 
|  | 34     NullWStream wStream; | 
|  | 35     SkPDFSubstituteMap substitutes; | 
|  | 36     SkPDFObjNumMap objNumMap; | 
|  | 37     objNumMap.addObjectRecursively(object, substitutes); | 
|  | 38     for (int i = 0; i < objNumMap.objects().count(); ++i) { | 
|  | 39         SkPDFObject* object = objNumMap.objects()[i]; | 
|  | 40         wStream.writeDecAsText(i + 1); | 
|  | 41         wStream.writeText(" 0 obj\n"); | 
|  | 42         object->emitObject(&wStream, objNumMap, substitutes); | 
|  | 43         wStream.writeText("\nendobj\n"); | 
|  | 44     } | 
|  | 45 } | 
|  | 46 | 
|  | 47 class PDFImageBench : public Benchmark { | 
|  | 48 public: | 
|  | 49     PDFImageBench() {} | 
|  | 50     virtual ~PDFImageBench() {} | 
|  | 51 | 
|  | 52 protected: | 
|  | 53     const char* onGetName() override { return "PDFImage"; } | 
|  | 54     bool isSuitableFor(Backend backend) override { | 
|  | 55         return backend == kNonRendering_Backend; | 
|  | 56     } | 
|  | 57     void onDelayedSetup() override { | 
|  | 58         SkAutoTUnref<SkImage> img(GetResourceAsImage("color_wheel.png")); | 
|  | 59         if (img) { | 
|  | 60             // force decoding, throw away reference to encoded data. | 
|  | 61             SkAutoPixmapStorage pixmap; | 
|  | 62             pixmap.alloc(SkImageInfo::MakeN32Premul(img->dimensions())); | 
|  | 63             if (img->readPixels(pixmap, 0, 0)) { | 
|  | 64                 fImage.reset(SkImage::NewRasterCopy( | 
|  | 65                                      pixmap.info(), pixmap.addr(), | 
|  | 66                                      pixmap.rowBytes(), pixmap.ctable())); | 
|  | 67             } | 
|  | 68         } | 
|  | 69     } | 
|  | 70     void onDraw(int loops, SkCanvas*) override { | 
|  | 71         if (!fImage) { | 
|  | 72             return; | 
|  | 73         } | 
|  | 74         while (loops-- > 0) { | 
|  | 75             test_pdf_image_serialization(fImage); | 
|  | 76         } | 
|  | 77     } | 
|  | 78 | 
|  | 79 private: | 
|  | 80     SkAutoTUnref<SkImage> fImage; | 
|  | 81 }; | 
|  | 82 | 
|  | 83 class PDFJpegImageBench : public Benchmark { | 
|  | 84 public: | 
|  | 85     PDFJpegImageBench() {} | 
|  | 86     virtual ~PDFJpegImageBench() {} | 
|  | 87 | 
|  | 88 protected: | 
|  | 89     const char* onGetName() override { return "PDFJpegImage"; } | 
|  | 90     bool isSuitableFor(Backend backend) override { | 
|  | 91         return backend == kNonRendering_Backend; | 
|  | 92     } | 
|  | 93     void onDelayedSetup() override { | 
|  | 94         SkAutoTUnref<SkImage> img( | 
|  | 95                 GetResourceAsImage("mandrill_512_q075.jpg")); | 
|  | 96         if (!img) { return; } | 
|  | 97         SkAutoTUnref<SkData> encoded(img->refEncoded()); | 
|  | 98         SkASSERT(encoded); | 
|  | 99         if (!encoded) { return; } | 
|  | 100         fImage.reset(img.release()); | 
|  | 101     } | 
|  | 102     void onDraw(int loops, SkCanvas*) override { | 
|  | 103         if (!fImage) { | 
|  | 104             SkDEBUGFAIL(""); | 
|  | 105             return; | 
|  | 106         } | 
|  | 107         while (loops-- > 0) { | 
|  | 108             test_pdf_image_serialization(fImage); | 
|  | 109         } | 
|  | 110     } | 
|  | 111 | 
|  | 112 private: | 
|  | 113     SkAutoTUnref<SkImage> fImage; | 
|  | 114 }; | 
|  | 115 | 
|  | 116 }  // namespace | 
|  | 117 DEF_BENCH(return new PDFImageBench;) | 
|  | 118 DEF_BENCH(return new PDFJpegImageBench;) | 
|  | 119 | 
|  | 120 #endif  // SK_SUPPORT_PDF | 
| OLD | NEW | 
|---|