Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(752)

Side by Side Diff: bench/PDFBench.cpp

Issue 1829693002: SkPDF: draw{Image,Bitmap} always serializes early (Closed) Base URL: https://skia.googlesource.com/skia.git@r1823683005
Patch Set: Don't put a sk_sp in a hashmap Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | gyp/pdf.gypi » ('j') | src/pdf/SkBitmapKey.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2016 Google Inc. 2 * Copyright 2016 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 "Benchmark.h" 8 #include "Benchmark.h"
9 #include "Resources.h" 9 #include "Resources.h"
10 #include "SkAutoPixmapStorage.h" 10 #include "SkAutoPixmapStorage.h"
11 #include "SkData.h" 11 #include "SkData.h"
12 #include "SkImage.h" 12 #include "SkImage.h"
13 #include "SkPDFBitmap.h" 13 #include "SkPDFBitmap.h"
14 #include "SkPDFUtils.h" 14 #include "SkPDFUtils.h"
15 #include "SkPixmap.h" 15 #include "SkPixmap.h"
16 #include "SkRandom.h" 16 #include "SkRandom.h"
17 17
18 namespace { 18 namespace {
19 struct NullWStream : public SkWStream { 19 struct NullWStream : public SkWStream {
20 NullWStream() : fN(0) {} 20 NullWStream() : fN(0) {}
21 bool write(const void*, size_t n) override { fN += n; return true; } 21 bool write(const void*, size_t n) override { fN += n; return true; }
22 size_t bytesWritten() const override { return fN; } 22 size_t bytesWritten() const override { return fN; }
23 size_t fN; 23 size_t fN;
24 }; 24 };
25 25
26 static void test_pdf_object_serialization(SkPDFObject* object) { 26 static void test_pdf_object_serialization(const sk_sp<SkPDFObject> object) {
27 // SkDebugWStream wStream; 27 // SkDebugWStream wStream;
28 NullWStream wStream; 28 NullWStream wStream;
29 SkPDFSubstituteMap substitutes; 29 SkPDFSubstituteMap substitutes;
30 SkPDFObjNumMap objNumMap; 30 SkPDFObjNumMap objNumMap;
31 objNumMap.addObjectRecursively(object, substitutes); 31 objNumMap.addObjectRecursively(object.get(), substitutes);
32 for (int i = 0; i < objNumMap.objects().count(); ++i) { 32 for (int i = 0; i < objNumMap.objects().count(); ++i) {
33 SkPDFObject* object = objNumMap.objects()[i].get(); 33 SkPDFObject* object = objNumMap.objects()[i].get();
34 wStream.writeDecAsText(i + 1); 34 wStream.writeDecAsText(i + 1);
35 wStream.writeText(" 0 obj\n"); 35 wStream.writeText(" 0 obj\n");
36 object->emitObject(&wStream, objNumMap, substitutes); 36 object->emitObject(&wStream, objNumMap, substitutes);
37 wStream.writeText("\nendobj\n"); 37 wStream.writeText("\nendobj\n");
38 } 38 }
39 } 39 }
40 40
41 class PDFImageBench : public Benchmark { 41 class PDFImageBench : public Benchmark {
(...skipping 15 matching lines...) Expand all
57 if (img->readPixels(pixmap, 0, 0)) { 57 if (img->readPixels(pixmap, 0, 0)) {
58 fImage = SkImage::MakeRasterCopy(pixmap); 58 fImage = SkImage::MakeRasterCopy(pixmap);
59 } 59 }
60 } 60 }
61 } 61 }
62 void onDraw(int loops, SkCanvas*) override { 62 void onDraw(int loops, SkCanvas*) override {
63 if (!fImage) { 63 if (!fImage) {
64 return; 64 return;
65 } 65 }
66 while (loops-- > 0) { 66 while (loops-- > 0) {
67 SkAutoTUnref<SkPDFObject> object( 67 auto object = SkPDFCreateBitmapObject(fImage, nullptr);
68 SkPDFCreateBitmapObject(fImage.get(), nullptr));
69 SkASSERT(object); 68 SkASSERT(object);
70 if (!object) { 69 if (!object) {
71 return; 70 return;
72 } 71 }
73 test_pdf_object_serialization(object); 72 test_pdf_object_serialization(object);
74 } 73 }
75 } 74 }
76 75
77 private: 76 private:
78 sk_sp<SkImage> fImage; 77 sk_sp<SkImage> fImage;
79 }; 78 };
80 79
81 class PDFJpegImageBench : public Benchmark { 80 class PDFJpegImageBench : public Benchmark {
82 public: 81 public:
83 PDFJpegImageBench() {} 82 PDFJpegImageBench() {}
84 virtual ~PDFJpegImageBench() {} 83 virtual ~PDFJpegImageBench() {}
85 84
86 protected: 85 protected:
87 const char* onGetName() override { return "PDFJpegImage"; } 86 const char* onGetName() override { return "PDFJpegImage"; }
88 bool isSuitableFor(Backend backend) override { 87 bool isSuitableFor(Backend backend) override {
89 return backend == kNonRendering_Backend; 88 return backend == kNonRendering_Backend;
90 } 89 }
91 void onDelayedSetup() override { 90 void onDelayedSetup() override {
92 sk_sp<SkImage> img(GetResourceAsImage("mandrill_512_q075.jpg")); 91 sk_sp<SkImage> img(GetResourceAsImage("mandrill_512_q075.jpg"));
93 if (!img) { return; } 92 if (!img) { return; }
94 SkAutoTUnref<SkData> encoded(img->refEncoded()); 93 sk_sp<SkData> encoded(img->refEncoded());
95 SkASSERT(encoded); 94 SkASSERT(encoded);
96 if (!encoded) { return; } 95 if (!encoded) { return; }
97 fImage = img; 96 fImage = img;
98 } 97 }
99 void onDraw(int loops, SkCanvas*) override { 98 void onDraw(int loops, SkCanvas*) override {
100 if (!fImage) { 99 if (!fImage) {
101 SkDEBUGFAIL(""); 100 SkDEBUGFAIL("");
102 return; 101 return;
103 } 102 }
104 while (loops-- > 0) { 103 while (loops-- > 0) {
105 SkAutoTUnref<SkPDFObject> object( 104 auto object = SkPDFCreateBitmapObject(fImage, nullptr);
106 SkPDFCreateBitmapObject(fImage.get(), nullptr));
107 SkASSERT(object); 105 SkASSERT(object);
108 if (!object) { 106 if (!object) {
109 return; 107 return;
110 } 108 }
111 test_pdf_object_serialization(object); 109 test_pdf_object_serialization(object);
112 } 110 }
113 } 111 }
114 112
115 private: 113 private:
116 sk_sp<SkImage> fImage; 114 sk_sp<SkImage> fImage;
(...skipping 11 matching lines...) Expand all
128 bool isSuitableFor(Backend backend) override { 126 bool isSuitableFor(Backend backend) override {
129 return backend == kNonRendering_Backend; 127 return backend == kNonRendering_Backend;
130 } 128 }
131 void onDelayedSetup() override { 129 void onDelayedSetup() override {
132 fAsset.reset(GetResourceAsStream("pdf_command_stream.txt")); 130 fAsset.reset(GetResourceAsStream("pdf_command_stream.txt"));
133 } 131 }
134 void onDraw(int loops, SkCanvas*) override { 132 void onDraw(int loops, SkCanvas*) override {
135 SkASSERT(fAsset); 133 SkASSERT(fAsset);
136 if (!fAsset) { return; } 134 if (!fAsset) { return; }
137 while (loops-- > 0) { 135 while (loops-- > 0) {
138 SkAutoTUnref<SkPDFObject> object( 136 sk_sp<SkPDFObject> object(
139 new SkPDFSharedStream(fAsset->duplicate())); 137 new SkPDFSharedStream(fAsset->duplicate()));
140 test_pdf_object_serialization(object); 138 test_pdf_object_serialization(object);
141 } 139 }
142 } 140 }
143 141
144 private: 142 private:
145 SkAutoTDelete<SkStreamAsset> fAsset; 143 SkAutoTDelete<SkStreamAsset> fAsset;
146 }; 144 };
147 145
148 // Test speed of SkPDFUtils::FloatToDecimal for typical floats that 146 // Test speed of SkPDFUtils::FloatToDecimal for typical floats that
(...skipping 11 matching lines...) Expand all
160 (void)SkPDFUtils::FloatToDecimal(f, dst); 158 (void)SkPDFUtils::FloatToDecimal(f, dst);
161 } 159 }
162 } 160 }
163 }; 161 };
164 162
165 } // namespace 163 } // namespace
166 DEF_BENCH(return new PDFImageBench;) 164 DEF_BENCH(return new PDFImageBench;)
167 DEF_BENCH(return new PDFJpegImageBench;) 165 DEF_BENCH(return new PDFJpegImageBench;)
168 DEF_BENCH(return new PDFCompressionBench;) 166 DEF_BENCH(return new PDFCompressionBench;)
169 DEF_BENCH(return new PDFScalarBench;) 167 DEF_BENCH(return new PDFScalarBench;)
OLDNEW
« no previous file with comments | « no previous file | gyp/pdf.gypi » ('j') | src/pdf/SkBitmapKey.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698