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

Side by Side Diff: tests/PipeTest.cpp

Issue 2347593004: test/fix/tweak writePicture/readPicture (Closed)
Patch Set: remove dead code Created 4 years, 3 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 | « src/pipe/SkPipeReader.cpp ('k') | no next file » | no next file with comments »
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 "Resources.h" 8 #include "Resources.h"
9 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkPipe.h" 10 #include "SkPipe.h"
11 #include "SkPaint.h" 11 #include "SkPaint.h"
12 #include "SkStream.h" 12 #include "SkStream.h"
13 #include "SkSurface.h" 13 #include "SkSurface.h"
14 #include "Test.h" 14 #include "Test.h"
15 15
16 #include "SkNullCanvas.h" 16 #include "SkNullCanvas.h"
17 #include "SkAutoPixmapStorage.h" 17 #include "SkAutoPixmapStorage.h"
18 #include "SkPictureRecorder.h"
18 19
19 static void drain(SkPipeDeserializer* deserial, SkDynamicMemoryWStream* stream) { 20 static void drain(SkPipeDeserializer* deserial, SkDynamicMemoryWStream* stream) {
20 std::unique_ptr<SkCanvas> canvas(SkCreateNullCanvas()); 21 std::unique_ptr<SkCanvas> canvas(SkCreateNullCanvas());
21 sk_sp<SkData> data = stream->detachAsData(); 22 sk_sp<SkData> data = stream->detachAsData();
22 deserial->playback(data->data(), data->size(), canvas.get()); 23 deserial->playback(data->data(), data->size(), canvas.get());
23 } 24 }
24 25
25 static sk_sp<SkImage> drain_as_image(SkPipeDeserializer* deserial, SkDynamicMemo ryWStream* stream) {
26 sk_sp<SkData> data = stream->detachAsData();
27 return deserial->readImage(data->data(), data->size());
28 }
29
30 static bool deep_equal(SkImage* a, SkImage* b) { 26 static bool deep_equal(SkImage* a, SkImage* b) {
31 if (a->width() != b->width() || a->height() != b->height()) { 27 if (a->width() != b->width() || a->height() != b->height()) {
32 return false; 28 return false;
33 } 29 }
34 30
35 const SkImageInfo info = SkImageInfo::MakeN32Premul(a->width(), a->height()) ; 31 const SkImageInfo info = SkImageInfo::MakeN32Premul(a->width(), a->height()) ;
36 SkAutoPixmapStorage pmapA, pmapB; 32 SkAutoPixmapStorage pmapA, pmapB;
37 pmapA.alloc(info); 33 pmapA.alloc(info);
38 pmapB.alloc(info); 34 pmapB.alloc(info);
39 35
(...skipping 26 matching lines...) Expand all
66 62
67 // try drawing the same image again -- it should be much smaller 63 // try drawing the same image again -- it should be much smaller
68 wc = serializer.beginWrite(SkRect::MakeWH(100, 100), &stream); 64 wc = serializer.beginWrite(SkRect::MakeWH(100, 100), &stream);
69 wc->drawImage(img, 0, 0, nullptr); 65 wc->drawImage(img, 0, 0, nullptr);
70 size_t offset1 = stream.bytesWritten(); 66 size_t offset1 = stream.bytesWritten();
71 serializer.endWrite(); 67 serializer.endWrite();
72 REPORTER_ASSERT(reporter, offset1 <= 32); 68 REPORTER_ASSERT(reporter, offset1 <= 32);
73 drain(&deserializer, &stream); 69 drain(&deserializer, &stream);
74 70
75 // try serializing the same image directly, again it should be small 71 // try serializing the same image directly, again it should be small
76 serializer.write(img.get(), &stream); 72 sk_sp<SkData> data = serializer.writeImage(img.get());
77 size_t offset2 = stream.bytesWritten(); 73 size_t offset2 = data->size();
78 REPORTER_ASSERT(reporter, offset2 <= 32); 74 REPORTER_ASSERT(reporter, offset2 <= 32);
79 auto img1 = drain_as_image(&deserializer, &stream); 75 auto img1 = deserializer.readImage(data.get());
80 REPORTER_ASSERT(reporter, deep_equal(img.get(), img1.get())); 76 REPORTER_ASSERT(reporter, deep_equal(img.get(), img1.get()));
81 77
82 // try serializing the same image directly (again), check that it is the sam e! 78 // try serializing the same image directly (again), check that it is the sam e!
83 serializer.write(img.get(), &stream); 79 data = serializer.writeImage(img.get());
84 size_t offset3 = stream.bytesWritten(); 80 size_t offset3 = data->size();
85 REPORTER_ASSERT(reporter, offset3 <= 32); 81 REPORTER_ASSERT(reporter, offset3 <= 32);
86 auto img2 = drain_as_image(&deserializer, &stream); 82 auto img2 = deserializer.readImage(data.get());
87 REPORTER_ASSERT(reporter, img1.get() == img2.get()); 83 REPORTER_ASSERT(reporter, img1.get() == img2.get());
88 } 84 }
89 85
90 DEF_TEST(Pipe_image_draw_second, reporter) { 86 DEF_TEST(Pipe_image_draw_second, reporter) {
91 sk_sp<SkImage> img = GetResourceAsImage("mandrill_128.png"); 87 sk_sp<SkImage> img = GetResourceAsImage("mandrill_128.png");
92 SkASSERT(img.get()); 88 SkASSERT(img.get());
93 89
94 SkPipeSerializer serializer; 90 SkPipeSerializer serializer;
95 SkPipeDeserializer deserializer; 91 SkPipeDeserializer deserializer;
96 SkDynamicMemoryWStream stream; 92 SkDynamicMemoryWStream stream;
97 93
98 serializer.write(img.get(), &stream); 94 sk_sp<SkData> data = serializer.writeImage(img.get());
99 size_t offset0 = stream.bytesWritten(); 95 size_t offset0 = data->size();
100 REPORTER_ASSERT(reporter, offset0 > 100); // the raw image must be sorta b ig 96 REPORTER_ASSERT(reporter, offset0 > 100); // the raw image must be sorta b ig
101 drain_as_image(&deserializer, &stream); 97 auto img1 = deserializer.readImage(data.get());
102 98
103 // The 2nd image should be nice and small 99 // The 2nd image should be nice and small
104 serializer.write(img.get(), &stream); 100 data = serializer.writeImage(img.get());
105 size_t offset1 = stream.bytesWritten(); 101 size_t offset1 = data->size();
106 REPORTER_ASSERT(reporter, offset1 <= 32); 102 REPORTER_ASSERT(reporter, offset1 <= 16);
107 drain_as_image(&deserializer, &stream); 103 auto img2 = deserializer.readImage(data.get());
104 REPORTER_ASSERT(reporter, img1.get() == img2.get());
108 105
109 // Now try drawing the image, it should also be small 106 // Now try drawing the image, it should also be small
110 SkCanvas* wc = serializer.beginWrite(SkRect::MakeWH(100, 100), &stream); 107 SkCanvas* wc = serializer.beginWrite(SkRect::MakeWH(100, 100), &stream);
111 wc->drawImage(img, 0, 0, nullptr); 108 wc->drawImage(img, 0, 0, nullptr);
112 serializer.endWrite(); 109 serializer.endWrite();
113 size_t offset2 = stream.bytesWritten(); 110 size_t offset2 = stream.bytesWritten();
114 REPORTER_ASSERT(reporter, offset2 <= 32); 111 REPORTER_ASSERT(reporter, offset2 <= 16);
115 } 112 }
113
114 DEF_TEST(Pipe_picture_draw_first, reporter) {
115 sk_sp<SkPicture> picture = []() {
116 SkPictureRecorder rec;
117 SkCanvas* c = rec.beginRecording(SkRect::MakeWH(100, 100));
118 for (int i = 0; i < 100; ++i) {
119 c->drawColor(i);
120 }
121 return rec.finishRecordingAsPicture();
122 }();
123 SkPipeSerializer serializer;
124 SkPipeDeserializer deserializer;
125
126 SkDynamicMemoryWStream stream;
127 SkCanvas* wc = serializer.beginWrite(SkRect::MakeWH(100, 100), &stream);
128 wc->drawPicture(picture);
129 serializer.endWrite();
130 size_t offset0 = stream.bytesWritten();
131 REPORTER_ASSERT(reporter, offset0 > 100); // the raw picture must be sorta big
132 drain(&deserializer, &stream);
133
134 // try drawing the same picture again -- it should be much smaller
135 wc = serializer.beginWrite(SkRect::MakeWH(100, 100), &stream);
136 wc->drawPicture(picture);
137 size_t offset1 = stream.bytesWritten();
138 serializer.endWrite();
139 REPORTER_ASSERT(reporter, offset1 <= 16);
140 drain(&deserializer, &stream);
141
142 // try writing the picture directly, it should also be small
143 sk_sp<SkData> data = serializer.writePicture(picture.get());
144 size_t offset2 = data->size();
145 REPORTER_ASSERT(reporter, offset2 <= 16);
146 auto pic1 = deserializer.readPicture(data.get());
147
148 // try writing the picture directly, it should also be small
149 data = serializer.writePicture(picture.get());
150 size_t offset3 = data->size();
151 REPORTER_ASSERT(reporter, offset3 == offset2);
152 auto pic2 = deserializer.readPicture(data.get());
153 REPORTER_ASSERT(reporter, pic1.get() == pic2.get());
154 }
155
156 DEF_TEST(Pipe_picture_draw_second, reporter) {
157 sk_sp<SkPicture> picture = []() {
158 SkPictureRecorder rec;
159 SkCanvas* c = rec.beginRecording(SkRect::MakeWH(100, 100));
160 for (int i = 0; i < 100; ++i) {
161 c->drawColor(i);
162 }
163 return rec.finishRecordingAsPicture();
164 }();
165 SkPipeSerializer serializer;
166 SkPipeDeserializer deserializer;
167 SkDynamicMemoryWStream stream;
168
169 sk_sp<SkData> data = serializer.writePicture(picture.get());
170 size_t offset0 = data->size();
171 REPORTER_ASSERT(reporter, offset0 > 100); // the raw picture must be sorta big
172 auto pic1 = deserializer.readPicture(data.get());
173
174 // The 2nd picture should be nice and small
175 data = serializer.writePicture(picture.get());
176 size_t offset1 = data->size();
177 REPORTER_ASSERT(reporter, offset1 <= 16);
178 auto pic2 = deserializer.readPicture(data.get());
179 SkASSERT(pic1.get() == pic2.get());
180
181 // Now try drawing the image, it should also be small
182 SkCanvas* wc = serializer.beginWrite(SkRect::MakeWH(100, 100), &stream);
183 wc->drawPicture(picture);
184 serializer.endWrite();
185 size_t offset2 = stream.bytesWritten();
186 REPORTER_ASSERT(reporter, offset2 <= 16);
187 }
OLDNEW
« no previous file with comments | « src/pipe/SkPipeReader.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698