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

Side by Side Diff: third_party/WebKit/Source/platform/image-decoders/ImageDecoderTest.cpp

Issue 2494333002: Replace wrapUnique(new T(args)) by makeUnique<T>(args) in Blink (Closed)
Patch Set: Drop redundant WTF:: Created 4 years, 1 month 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 for (size_t i = 0; i < numFrames; ++i) 63 for (size_t i = 0; i < numFrames; ++i)
64 m_frameBufferCache[i].setOriginalFrameRect(IntRect(0, 0, width, height)); 64 m_frameBufferCache[i].setOriginalFrameRect(IntRect(0, 0, width, height));
65 } 65 }
66 66
67 private: 67 private:
68 void decodeSize() override {} 68 void decodeSize() override {}
69 void decode(size_t index) override {} 69 void decode(size_t index) override {}
70 }; 70 };
71 71
72 TEST(ImageDecoderTest, sizeCalculationMayOverflow) { 72 TEST(ImageDecoderTest, sizeCalculationMayOverflow) {
73 std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder())); 73 std::unique_ptr<TestImageDecoder> decoder(makeUnique<TestImageDecoder>());
74 EXPECT_FALSE(decoder->setSize(1 << 29, 1)); 74 EXPECT_FALSE(decoder->setSize(1 << 29, 1));
75 EXPECT_FALSE(decoder->setSize(1, 1 << 29)); 75 EXPECT_FALSE(decoder->setSize(1, 1 << 29));
76 EXPECT_FALSE(decoder->setSize(1 << 15, 1 << 15)); 76 EXPECT_FALSE(decoder->setSize(1 << 15, 1 << 15));
77 EXPECT_TRUE(decoder->setSize(1 << 28, 1)); 77 EXPECT_TRUE(decoder->setSize(1 << 28, 1));
78 EXPECT_TRUE(decoder->setSize(1, 1 << 28)); 78 EXPECT_TRUE(decoder->setSize(1, 1 << 28));
79 EXPECT_TRUE(decoder->setSize(1 << 14, 1 << 14)); 79 EXPECT_TRUE(decoder->setSize(1 << 14, 1 << 14));
80 } 80 }
81 81
82 TEST(ImageDecoderTest, requiredPreviousFrameIndex) { 82 TEST(ImageDecoderTest, requiredPreviousFrameIndex) {
83 std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder())); 83 std::unique_ptr<TestImageDecoder> decoder(makeUnique<TestImageDecoder>());
84 decoder->initFrames(6); 84 decoder->initFrames(6);
85 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache(); 85 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
86 86
87 frameBuffers[1].setDisposalMethod(ImageFrame::DisposeKeep); 87 frameBuffers[1].setDisposalMethod(ImageFrame::DisposeKeep);
88 frameBuffers[2].setDisposalMethod(ImageFrame::DisposeOverwritePrevious); 88 frameBuffers[2].setDisposalMethod(ImageFrame::DisposeOverwritePrevious);
89 frameBuffers[3].setDisposalMethod(ImageFrame::DisposeOverwritePrevious); 89 frameBuffers[3].setDisposalMethod(ImageFrame::DisposeOverwritePrevious);
90 frameBuffers[4].setDisposalMethod(ImageFrame::DisposeKeep); 90 frameBuffers[4].setDisposalMethod(ImageFrame::DisposeKeep);
91 91
92 decoder->resetRequiredPreviousFrames(); 92 decoder->resetRequiredPreviousFrames();
93 93
94 // The first frame doesn't require any previous frame. 94 // The first frame doesn't require any previous frame.
95 EXPECT_EQ(kNotFound, frameBuffers[0].requiredPreviousFrameIndex()); 95 EXPECT_EQ(kNotFound, frameBuffers[0].requiredPreviousFrameIndex());
96 // The previous DisposeNotSpecified frame is required. 96 // The previous DisposeNotSpecified frame is required.
97 EXPECT_EQ(0u, frameBuffers[1].requiredPreviousFrameIndex()); 97 EXPECT_EQ(0u, frameBuffers[1].requiredPreviousFrameIndex());
98 // DisposeKeep is treated as DisposeNotSpecified. 98 // DisposeKeep is treated as DisposeNotSpecified.
99 EXPECT_EQ(1u, frameBuffers[2].requiredPreviousFrameIndex()); 99 EXPECT_EQ(1u, frameBuffers[2].requiredPreviousFrameIndex());
100 // Previous DisposeOverwritePrevious frames are skipped. 100 // Previous DisposeOverwritePrevious frames are skipped.
101 EXPECT_EQ(1u, frameBuffers[3].requiredPreviousFrameIndex()); 101 EXPECT_EQ(1u, frameBuffers[3].requiredPreviousFrameIndex());
102 EXPECT_EQ(1u, frameBuffers[4].requiredPreviousFrameIndex()); 102 EXPECT_EQ(1u, frameBuffers[4].requiredPreviousFrameIndex());
103 EXPECT_EQ(4u, frameBuffers[5].requiredPreviousFrameIndex()); 103 EXPECT_EQ(4u, frameBuffers[5].requiredPreviousFrameIndex());
104 } 104 }
105 105
106 TEST(ImageDecoderTest, requiredPreviousFrameIndexDisposeOverwriteBgcolor) { 106 TEST(ImageDecoderTest, requiredPreviousFrameIndexDisposeOverwriteBgcolor) {
107 std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder())); 107 std::unique_ptr<TestImageDecoder> decoder(makeUnique<TestImageDecoder>());
108 decoder->initFrames(3); 108 decoder->initFrames(3);
109 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache(); 109 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
110 110
111 // Fully covering DisposeOverwriteBgcolor previous frame resets the starting 111 // Fully covering DisposeOverwriteBgcolor previous frame resets the starting
112 // state. 112 // state.
113 frameBuffers[1].setDisposalMethod(ImageFrame::DisposeOverwriteBgcolor); 113 frameBuffers[1].setDisposalMethod(ImageFrame::DisposeOverwriteBgcolor);
114 decoder->resetRequiredPreviousFrames(); 114 decoder->resetRequiredPreviousFrames();
115 EXPECT_EQ(kNotFound, frameBuffers[2].requiredPreviousFrameIndex()); 115 EXPECT_EQ(kNotFound, frameBuffers[2].requiredPreviousFrameIndex());
116 116
117 // Partially covering DisposeOverwriteBgcolor previous frame is required by 117 // Partially covering DisposeOverwriteBgcolor previous frame is required by
118 // this frame. 118 // this frame.
119 frameBuffers[1].setOriginalFrameRect(IntRect(50, 50, 50, 50)); 119 frameBuffers[1].setOriginalFrameRect(IntRect(50, 50, 50, 50));
120 decoder->resetRequiredPreviousFrames(); 120 decoder->resetRequiredPreviousFrames();
121 EXPECT_EQ(1u, frameBuffers[2].requiredPreviousFrameIndex()); 121 EXPECT_EQ(1u, frameBuffers[2].requiredPreviousFrameIndex());
122 } 122 }
123 123
124 TEST(ImageDecoderTest, requiredPreviousFrameIndexForFrame1) { 124 TEST(ImageDecoderTest, requiredPreviousFrameIndexForFrame1) {
125 std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder())); 125 std::unique_ptr<TestImageDecoder> decoder(makeUnique<TestImageDecoder>());
126 decoder->initFrames(2); 126 decoder->initFrames(2);
127 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache(); 127 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
128 128
129 decoder->resetRequiredPreviousFrames(); 129 decoder->resetRequiredPreviousFrames();
130 EXPECT_EQ(0u, frameBuffers[1].requiredPreviousFrameIndex()); 130 EXPECT_EQ(0u, frameBuffers[1].requiredPreviousFrameIndex());
131 131
132 // The first frame with DisposeOverwritePrevious or DisposeOverwriteBgcolor 132 // The first frame with DisposeOverwritePrevious or DisposeOverwriteBgcolor
133 // resets the starting state. 133 // resets the starting state.
134 frameBuffers[0].setDisposalMethod(ImageFrame::DisposeOverwritePrevious); 134 frameBuffers[0].setDisposalMethod(ImageFrame::DisposeOverwritePrevious);
135 decoder->resetRequiredPreviousFrames(); 135 decoder->resetRequiredPreviousFrames();
136 EXPECT_EQ(kNotFound, frameBuffers[1].requiredPreviousFrameIndex()); 136 EXPECT_EQ(kNotFound, frameBuffers[1].requiredPreviousFrameIndex());
137 frameBuffers[0].setDisposalMethod(ImageFrame::DisposeOverwriteBgcolor); 137 frameBuffers[0].setDisposalMethod(ImageFrame::DisposeOverwriteBgcolor);
138 decoder->resetRequiredPreviousFrames(); 138 decoder->resetRequiredPreviousFrames();
139 EXPECT_EQ(kNotFound, frameBuffers[1].requiredPreviousFrameIndex()); 139 EXPECT_EQ(kNotFound, frameBuffers[1].requiredPreviousFrameIndex());
140 140
141 // ... even if it partially covers. 141 // ... even if it partially covers.
142 frameBuffers[0].setOriginalFrameRect(IntRect(50, 50, 50, 50)); 142 frameBuffers[0].setOriginalFrameRect(IntRect(50, 50, 50, 50));
143 143
144 frameBuffers[0].setDisposalMethod(ImageFrame::DisposeOverwritePrevious); 144 frameBuffers[0].setDisposalMethod(ImageFrame::DisposeOverwritePrevious);
145 decoder->resetRequiredPreviousFrames(); 145 decoder->resetRequiredPreviousFrames();
146 EXPECT_EQ(kNotFound, frameBuffers[1].requiredPreviousFrameIndex()); 146 EXPECT_EQ(kNotFound, frameBuffers[1].requiredPreviousFrameIndex());
147 frameBuffers[0].setDisposalMethod(ImageFrame::DisposeOverwriteBgcolor); 147 frameBuffers[0].setDisposalMethod(ImageFrame::DisposeOverwriteBgcolor);
148 decoder->resetRequiredPreviousFrames(); 148 decoder->resetRequiredPreviousFrames();
149 EXPECT_EQ(kNotFound, frameBuffers[1].requiredPreviousFrameIndex()); 149 EXPECT_EQ(kNotFound, frameBuffers[1].requiredPreviousFrameIndex());
150 } 150 }
151 151
152 TEST(ImageDecoderTest, requiredPreviousFrameIndexBlendAtopBgcolor) { 152 TEST(ImageDecoderTest, requiredPreviousFrameIndexBlendAtopBgcolor) {
153 std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder())); 153 std::unique_ptr<TestImageDecoder> decoder(makeUnique<TestImageDecoder>());
154 decoder->initFrames(3); 154 decoder->initFrames(3);
155 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache(); 155 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
156 156
157 frameBuffers[1].setOriginalFrameRect(IntRect(25, 25, 50, 50)); 157 frameBuffers[1].setOriginalFrameRect(IntRect(25, 25, 50, 50));
158 frameBuffers[2].setAlphaBlendSource(ImageFrame::BlendAtopBgcolor); 158 frameBuffers[2].setAlphaBlendSource(ImageFrame::BlendAtopBgcolor);
159 159
160 // A full frame with 'blending method == BlendAtopBgcolor' doesn't depend on 160 // A full frame with 'blending method == BlendAtopBgcolor' doesn't depend on
161 // any prior frames. 161 // any prior frames.
162 for (int disposeMethod = ImageFrame::DisposeNotSpecified; 162 for (int disposeMethod = ImageFrame::DisposeNotSpecified;
163 disposeMethod <= ImageFrame::DisposeOverwritePrevious; ++disposeMethod) { 163 disposeMethod <= ImageFrame::DisposeOverwritePrevious; ++disposeMethod) {
164 frameBuffers[1].setDisposalMethod( 164 frameBuffers[1].setDisposalMethod(
165 static_cast<ImageFrame::DisposalMethod>(disposeMethod)); 165 static_cast<ImageFrame::DisposalMethod>(disposeMethod));
166 decoder->resetRequiredPreviousFrames(); 166 decoder->resetRequiredPreviousFrames();
167 EXPECT_EQ(kNotFound, frameBuffers[2].requiredPreviousFrameIndex()); 167 EXPECT_EQ(kNotFound, frameBuffers[2].requiredPreviousFrameIndex());
168 } 168 }
169 169
170 // A non-full frame with 'blending method == BlendAtopBgcolor' does depend on 170 // A non-full frame with 'blending method == BlendAtopBgcolor' does depend on
171 // a prior frame. 171 // a prior frame.
172 frameBuffers[2].setOriginalFrameRect(IntRect(50, 50, 50, 50)); 172 frameBuffers[2].setOriginalFrameRect(IntRect(50, 50, 50, 50));
173 for (int disposeMethod = ImageFrame::DisposeNotSpecified; 173 for (int disposeMethod = ImageFrame::DisposeNotSpecified;
174 disposeMethod <= ImageFrame::DisposeOverwritePrevious; ++disposeMethod) { 174 disposeMethod <= ImageFrame::DisposeOverwritePrevious; ++disposeMethod) {
175 frameBuffers[1].setDisposalMethod( 175 frameBuffers[1].setDisposalMethod(
176 static_cast<ImageFrame::DisposalMethod>(disposeMethod)); 176 static_cast<ImageFrame::DisposalMethod>(disposeMethod));
177 decoder->resetRequiredPreviousFrames(); 177 decoder->resetRequiredPreviousFrames();
178 EXPECT_NE(kNotFound, frameBuffers[2].requiredPreviousFrameIndex()); 178 EXPECT_NE(kNotFound, frameBuffers[2].requiredPreviousFrameIndex());
179 } 179 }
180 } 180 }
181 181
182 TEST(ImageDecoderTest, requiredPreviousFrameIndexKnownOpaque) { 182 TEST(ImageDecoderTest, requiredPreviousFrameIndexKnownOpaque) {
183 std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder())); 183 std::unique_ptr<TestImageDecoder> decoder(makeUnique<TestImageDecoder>());
184 decoder->initFrames(3); 184 decoder->initFrames(3);
185 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache(); 185 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
186 186
187 frameBuffers[1].setOriginalFrameRect(IntRect(25, 25, 50, 50)); 187 frameBuffers[1].setOriginalFrameRect(IntRect(25, 25, 50, 50));
188 188
189 // A full frame that is known to be opaque doesn't depend on any prior frames. 189 // A full frame that is known to be opaque doesn't depend on any prior frames.
190 for (int disposeMethod = ImageFrame::DisposeNotSpecified; 190 for (int disposeMethod = ImageFrame::DisposeNotSpecified;
191 disposeMethod <= ImageFrame::DisposeOverwritePrevious; ++disposeMethod) { 191 disposeMethod <= ImageFrame::DisposeOverwritePrevious; ++disposeMethod) {
192 frameBuffers[1].setDisposalMethod( 192 frameBuffers[1].setDisposalMethod(
193 static_cast<ImageFrame::DisposalMethod>(disposeMethod)); 193 static_cast<ImageFrame::DisposalMethod>(disposeMethod));
194 decoder->resetRequiredPreviousFrames(true); 194 decoder->resetRequiredPreviousFrames(true);
195 EXPECT_EQ(kNotFound, frameBuffers[2].requiredPreviousFrameIndex()); 195 EXPECT_EQ(kNotFound, frameBuffers[2].requiredPreviousFrameIndex());
196 } 196 }
197 197
198 // A non-full frame that is known to be opaque does depend on a prior frame. 198 // A non-full frame that is known to be opaque does depend on a prior frame.
199 frameBuffers[2].setOriginalFrameRect(IntRect(50, 50, 50, 50)); 199 frameBuffers[2].setOriginalFrameRect(IntRect(50, 50, 50, 50));
200 for (int disposeMethod = ImageFrame::DisposeNotSpecified; 200 for (int disposeMethod = ImageFrame::DisposeNotSpecified;
201 disposeMethod <= ImageFrame::DisposeOverwritePrevious; ++disposeMethod) { 201 disposeMethod <= ImageFrame::DisposeOverwritePrevious; ++disposeMethod) {
202 frameBuffers[1].setDisposalMethod( 202 frameBuffers[1].setDisposalMethod(
203 static_cast<ImageFrame::DisposalMethod>(disposeMethod)); 203 static_cast<ImageFrame::DisposalMethod>(disposeMethod));
204 decoder->resetRequiredPreviousFrames(true); 204 decoder->resetRequiredPreviousFrames(true);
205 EXPECT_NE(kNotFound, frameBuffers[2].requiredPreviousFrameIndex()); 205 EXPECT_NE(kNotFound, frameBuffers[2].requiredPreviousFrameIndex());
206 } 206 }
207 } 207 }
208 208
209 TEST(ImageDecoderTest, clearCacheExceptFrameDoNothing) { 209 TEST(ImageDecoderTest, clearCacheExceptFrameDoNothing) {
210 std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder())); 210 std::unique_ptr<TestImageDecoder> decoder(makeUnique<TestImageDecoder>());
211 decoder->clearCacheExceptFrame(0); 211 decoder->clearCacheExceptFrame(0);
212 212
213 // This should not crash. 213 // This should not crash.
214 decoder->initFrames(20); 214 decoder->initFrames(20);
215 decoder->clearCacheExceptFrame(kNotFound); 215 decoder->clearCacheExceptFrame(kNotFound);
216 } 216 }
217 217
218 TEST(ImageDecoderTest, clearCacheExceptFrameAll) { 218 TEST(ImageDecoderTest, clearCacheExceptFrameAll) {
219 const size_t numFrames = 10; 219 const size_t numFrames = 10;
220 std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder())); 220 std::unique_ptr<TestImageDecoder> decoder(makeUnique<TestImageDecoder>());
221 decoder->initFrames(numFrames); 221 decoder->initFrames(numFrames);
222 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache(); 222 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
223 for (size_t i = 0; i < numFrames; ++i) 223 for (size_t i = 0; i < numFrames; ++i)
224 frameBuffers[i].setStatus(i % 2 ? ImageFrame::FramePartial 224 frameBuffers[i].setStatus(i % 2 ? ImageFrame::FramePartial
225 : ImageFrame::FrameComplete); 225 : ImageFrame::FrameComplete);
226 226
227 decoder->clearCacheExceptFrame(kNotFound); 227 decoder->clearCacheExceptFrame(kNotFound);
228 228
229 for (size_t i = 0; i < numFrames; ++i) { 229 for (size_t i = 0; i < numFrames; ++i) {
230 SCOPED_TRACE(testing::Message() << i); 230 SCOPED_TRACE(testing::Message() << i);
231 EXPECT_EQ(ImageFrame::FrameEmpty, frameBuffers[i].getStatus()); 231 EXPECT_EQ(ImageFrame::FrameEmpty, frameBuffers[i].getStatus());
232 } 232 }
233 } 233 }
234 234
235 TEST(ImageDecoderTest, clearCacheExceptFramePreverveClearExceptFrame) { 235 TEST(ImageDecoderTest, clearCacheExceptFramePreverveClearExceptFrame) {
236 const size_t numFrames = 10; 236 const size_t numFrames = 10;
237 std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder())); 237 std::unique_ptr<TestImageDecoder> decoder(makeUnique<TestImageDecoder>());
238 decoder->initFrames(numFrames); 238 decoder->initFrames(numFrames);
239 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache(); 239 Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
240 for (size_t i = 0; i < numFrames; ++i) 240 for (size_t i = 0; i < numFrames; ++i)
241 frameBuffers[i].setStatus(ImageFrame::FrameComplete); 241 frameBuffers[i].setStatus(ImageFrame::FrameComplete);
242 242
243 decoder->resetRequiredPreviousFrames(); 243 decoder->resetRequiredPreviousFrames();
244 decoder->clearCacheExceptFrame(5); 244 decoder->clearCacheExceptFrame(5);
245 for (size_t i = 0; i < numFrames; ++i) { 245 for (size_t i = 0; i < numFrames; ++i) {
246 SCOPED_TRACE(testing::Message() << i); 246 SCOPED_TRACE(testing::Message() << i);
247 if (i == 5) 247 if (i == 5)
248 EXPECT_EQ(ImageFrame::FrameComplete, frameBuffers[i].getStatus()); 248 EXPECT_EQ(ImageFrame::FrameComplete, frameBuffers[i].getStatus());
249 else 249 else
250 EXPECT_EQ(ImageFrame::FrameEmpty, frameBuffers[i].getStatus()); 250 EXPECT_EQ(ImageFrame::FrameEmpty, frameBuffers[i].getStatus());
251 } 251 }
252 } 252 }
253 253
254 } // namespace blink 254 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698