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

Side by Side Diff: Source/core/html/canvas/CanvasRenderingContext2DTest.cpp

Issue 1168103003: Oilpan: fix unit tests bugs unmasked by r196836. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 6 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 | « Source/core/editing/GranularityStrategyTest.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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "core/html/canvas/CanvasRenderingContext2D.h" 6 #include "core/html/canvas/CanvasRenderingContext2D.h"
7 7
8 #include "core/frame/FrameView.h" 8 #include "core/frame/FrameView.h"
9 #include "core/frame/ImageBitmap.h" 9 #include "core/frame/ImageBitmap.h"
10 #include "core/html/HTMLDocument.h" 10 #include "core/html/HTMLDocument.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 HTMLCanvasElement& canvasElement() const { return *m_canvasElement; } 78 HTMLCanvasElement& canvasElement() const { return *m_canvasElement; }
79 CanvasRenderingContext2D* context2d() const { return static_cast<CanvasRende ringContext2D*>(canvasElement().renderingContext()); } 79 CanvasRenderingContext2D* context2d() const { return static_cast<CanvasRende ringContext2D*>(canvasElement().renderingContext()); }
80 80
81 void createContext(OpacityMode); 81 void createContext(OpacityMode);
82 82
83 private: 83 private:
84 OwnPtr<DummyPageHolder> m_dummyPageHolder; 84 OwnPtr<DummyPageHolder> m_dummyPageHolder;
85 RefPtrWillBePersistent<HTMLDocument> m_document; 85 RefPtrWillBePersistent<HTMLDocument> m_document;
86 RefPtrWillBePersistent<HTMLCanvasElement> m_canvasElement; 86 RefPtrWillBePersistent<HTMLCanvasElement> m_canvasElement;
87 87
88 class WrapGradients final : public NoBaseWillBeGarbageCollectedFinalized<Wra pGradients> {
89 public:
90 static PassOwnPtrWillBeRawPtr<WrapGradients> create()
91 {
92 return adoptPtrWillBeNoop(new WrapGradients);
93 }
94
95 DEFINE_INLINE_TRACE()
96 {
97 visitor->trace(m_opaqueGradient);
98 visitor->trace(m_alphaGradient);
99 }
100
101 StringOrCanvasGradientOrCanvasPattern m_opaqueGradient;
102 StringOrCanvasGradientOrCanvasPattern m_alphaGradient;
103 };
104
105 // TODO(Oilpan): avoid tedious part-object wrapper by supporting on-heap ::t esting::Tests.
106 OwnPtrWillBePersistent<WrapGradients> m_wrapGradients;
107
88 protected: 108 protected:
89 // Pre-canned objects for testing 109 // Pre-canned objects for testing
90 Persistent<ImageData> m_fullImageData; 110 Persistent<ImageData> m_fullImageData;
91 Persistent<ImageData> m_partialImageData; 111 Persistent<ImageData> m_partialImageData;
92 FakeImageSource m_opaqueBitmap; 112 FakeImageSource m_opaqueBitmap;
93 FakeImageSource m_alphaBitmap; 113 FakeImageSource m_alphaBitmap;
94 StringOrCanvasGradientOrCanvasPattern m_opaqueGradient; 114
95 StringOrCanvasGradientOrCanvasPattern m_alphaGradient; 115 StringOrCanvasGradientOrCanvasPattern& opaqueGradient() { return m_wrapGradi ents->m_opaqueGradient; }
116 StringOrCanvasGradientOrCanvasPattern& alphaGradient() { return m_wrapGradie nts->m_alphaGradient; }
96 }; 117 };
97 118
98 CanvasRenderingContext2DTest::CanvasRenderingContext2DTest() 119 CanvasRenderingContext2DTest::CanvasRenderingContext2DTest()
99 : m_opaqueBitmap(IntSize(10, 10), OpaqueBitmap) 120 : m_wrapGradients(WrapGradients::create())
121 , m_opaqueBitmap(IntSize(10, 10), OpaqueBitmap)
100 , m_alphaBitmap(IntSize(10, 10), TransparentBitmap) 122 , m_alphaBitmap(IntSize(10, 10), TransparentBitmap)
101 { } 123 { }
102 124
103 void CanvasRenderingContext2DTest::createContext(OpacityMode opacityMode) 125 void CanvasRenderingContext2DTest::createContext(OpacityMode opacityMode)
104 { 126 {
105 String canvasType("2d"); 127 String canvasType("2d");
106 CanvasContextCreationAttributes attributes; 128 CanvasContextCreationAttributes attributes;
107 attributes.setAlpha(opacityMode == NonOpaque); 129 attributes.setAlpha(opacityMode == NonOpaque);
108 CanvasRenderingContext2DOrWebGLRenderingContext result; 130 CanvasRenderingContext2DOrWebGLRenderingContext result;
109 m_canvasElement->getContext(canvasType, attributes, result); 131 m_canvasElement->getContext(canvasType, attributes, result);
(...skipping 11 matching lines...) Expand all
121 143
122 m_fullImageData = ImageData::create(IntSize(10, 10)); 144 m_fullImageData = ImageData::create(IntSize(10, 10));
123 m_partialImageData = ImageData::create(IntSize(2, 2)); 145 m_partialImageData = ImageData::create(IntSize(2, 2));
124 146
125 NonThrowableExceptionState exceptionState; 147 NonThrowableExceptionState exceptionState;
126 RefPtrWillBeRawPtr<CanvasGradient> opaqueGradient = CanvasGradient::create(F loatPoint(0, 0), FloatPoint(10, 0)); 148 RefPtrWillBeRawPtr<CanvasGradient> opaqueGradient = CanvasGradient::create(F loatPoint(0, 0), FloatPoint(10, 0));
127 opaqueGradient->addColorStop(0, String("green"), exceptionState); 149 opaqueGradient->addColorStop(0, String("green"), exceptionState);
128 EXPECT_FALSE(exceptionState.hadException()); 150 EXPECT_FALSE(exceptionState.hadException());
129 opaqueGradient->addColorStop(1, String("blue"), exceptionState); 151 opaqueGradient->addColorStop(1, String("blue"), exceptionState);
130 EXPECT_FALSE(exceptionState.hadException()); 152 EXPECT_FALSE(exceptionState.hadException());
131 m_opaqueGradient.setCanvasGradient(opaqueGradient); 153 this->opaqueGradient().setCanvasGradient(opaqueGradient);
132 154
133 RefPtrWillBeRawPtr<CanvasGradient> alphaGradient = CanvasGradient::create(Fl oatPoint(0, 0), FloatPoint(10, 0)); 155 RefPtrWillBeRawPtr<CanvasGradient> alphaGradient = CanvasGradient::create(Fl oatPoint(0, 0), FloatPoint(10, 0));
134 alphaGradient->addColorStop(0, String("green"), exceptionState); 156 alphaGradient->addColorStop(0, String("green"), exceptionState);
135 EXPECT_FALSE(exceptionState.hadException()); 157 EXPECT_FALSE(exceptionState.hadException());
136 alphaGradient->addColorStop(1, String("rgba(0, 0, 255, 0.5)"), exceptionStat e); 158 alphaGradient->addColorStop(1, String("rgba(0, 0, 255, 0.5)"), exceptionStat e);
137 EXPECT_FALSE(exceptionState.hadException()); 159 EXPECT_FALSE(exceptionState.hadException());
138 StringOrCanvasGradientOrCanvasPattern wrappedAlphaGradient; 160 StringOrCanvasGradientOrCanvasPattern wrappedAlphaGradient;
139 m_alphaGradient.setCanvasGradient(alphaGradient); 161 this->alphaGradient().setCanvasGradient(alphaGradient);
140 } 162 }
141 163
142 //============================================================================ 164 //============================================================================
143 165
144 class MockImageBufferSurfaceForOverwriteTesting : public UnacceleratedImageBuffe rSurface { 166 class MockImageBufferSurfaceForOverwriteTesting : public UnacceleratedImageBuffe rSurface {
145 public: 167 public:
146 MockImageBufferSurfaceForOverwriteTesting(const IntSize& size, OpacityMode m ode) : UnacceleratedImageBufferSurface(size, mode) { } 168 MockImageBufferSurfaceForOverwriteTesting(const IntSize& size, OpacityMode m ode) : UnacceleratedImageBufferSurface(size, mode) { }
147 virtual ~MockImageBufferSurfaceForOverwriteTesting() { } 169 virtual ~MockImageBufferSurfaceForOverwriteTesting() { }
148 bool isRecording() const override { return true; } // otherwise overwrites a re not tracked 170 bool isRecording() const override { return true; } // otherwise overwrites a re not tracked
149 171
150 MOCK_METHOD0(willOverwriteCanvas, void()); 172 MOCK_METHOD0(willOverwriteCanvas, void());
151 }; 173 };
152 174
153 //============================================================================ 175 //============================================================================
154 176
155 class MockCanvasObserver : public NoBaseWillBeGarbageCollectedFinalized<MockCanv asObserver>, public CanvasObserver { 177 class MockCanvasObserver final : public NoBaseWillBeGarbageCollectedFinalized<Mo ckCanvasObserver>, public CanvasObserver {
156 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(MockCanvasObserver); 178 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(MockCanvasObserver);
157 public: 179 public:
158 static PassOwnPtrWillBeRawPtr<MockCanvasObserver> create() 180 static PassOwnPtrWillBeRawPtr<MockCanvasObserver> create()
159 { 181 {
160 return adoptPtrWillBeNoop(new MockCanvasObserver); 182 return adoptPtrWillBeNoop(new MockCanvasObserver);
161 } 183 }
162 184
185 DEFINE_INLINE_VIRTUAL_TRACE()
186 {
187 CanvasObserver::trace(visitor);
188 }
189
190
163 virtual ~MockCanvasObserver() { } 191 virtual ~MockCanvasObserver() { }
164 MOCK_METHOD2(canvasChanged, void(HTMLCanvasElement*, const FloatRect&)); 192 MOCK_METHOD2(canvasChanged, void(HTMLCanvasElement*, const FloatRect&));
165 MOCK_METHOD1(canvasResized, void(HTMLCanvasElement*)); 193 MOCK_METHOD1(canvasResized, void(HTMLCanvasElement*));
166 #if !ENABLE(OILPAN) 194 #if !ENABLE(OILPAN)
167 void canvasDestroyed(HTMLCanvasElement*) override { }; 195 void canvasDestroyed(HTMLCanvasElement*) override { };
168 #endif 196 #endif
169 }; 197 };
170 198
171 //============================================================================ 199 //============================================================================
172 200
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 { 282 {
255 createContext(NonOpaque); 283 createContext(NonOpaque);
256 284
257 TEST_OVERDRAW_1(1, fillRect(-1, -1, 12, 12)); 285 TEST_OVERDRAW_1(1, fillRect(-1, -1, 12, 12));
258 TEST_OVERDRAW_1(1, fillRect(0, 0, 10, 10)); 286 TEST_OVERDRAW_1(1, fillRect(0, 0, 10, 10));
259 TEST_OVERDRAW_1(0, strokeRect(0, 0, 10, 10)); // stroking instead of filling does not overwrite 287 TEST_OVERDRAW_1(0, strokeRect(0, 0, 10, 10)); // stroking instead of filling does not overwrite
260 TEST_OVERDRAW_2(0, setGlobalAlpha(0.5f), fillRect(0, 0, 10, 10)); 288 TEST_OVERDRAW_2(0, setGlobalAlpha(0.5f), fillRect(0, 0, 10, 10));
261 TEST_OVERDRAW_1(0, fillRect(0, 0, 9, 9)); 289 TEST_OVERDRAW_1(0, fillRect(0, 0, 9, 9));
262 TEST_OVERDRAW_2(0, translate(1, 1), fillRect(0, 0, 10, 10)); 290 TEST_OVERDRAW_2(0, translate(1, 1), fillRect(0, 0, 10, 10));
263 TEST_OVERDRAW_2(1, translate(1, 1), fillRect(-1, -1, 10, 10)); 291 TEST_OVERDRAW_2(1, translate(1, 1), fillRect(-1, -1, 10, 10));
264 TEST_OVERDRAW_2(1, setFillStyle(m_opaqueGradient), fillRect(0, 0, 10, 10)); 292 TEST_OVERDRAW_2(1, setFillStyle(opaqueGradient()), fillRect(0, 0, 10, 10));
265 TEST_OVERDRAW_2(0, setFillStyle(m_alphaGradient), fillRect(0, 0, 10, 10)); 293 TEST_OVERDRAW_2(0, setFillStyle(alphaGradient()), fillRect(0, 0, 10, 10));
266 TEST_OVERDRAW_3(0, setGlobalAlpha(0.5), setFillStyle(m_opaqueGradient), fill Rect(0, 0, 10, 10)); 294 TEST_OVERDRAW_3(0, setGlobalAlpha(0.5), setFillStyle(opaqueGradient()), fill Rect(0, 0, 10, 10));
267 TEST_OVERDRAW_3(1, setGlobalAlpha(0.5f), setGlobalCompositeOperation(String( "copy")), fillRect(0, 0, 10, 10)); 295 TEST_OVERDRAW_3(1, setGlobalAlpha(0.5f), setGlobalCompositeOperation(String( "copy")), fillRect(0, 0, 10, 10));
268 TEST_OVERDRAW_2(1, setGlobalCompositeOperation(String("copy")), fillRect(0, 0, 9, 9)); 296 TEST_OVERDRAW_2(1, setGlobalCompositeOperation(String("copy")), fillRect(0, 0, 9, 9));
269 TEST_OVERDRAW_3(0, rect(0, 0, 5, 5), clip(), fillRect(0, 0, 10, 10)); 297 TEST_OVERDRAW_3(0, rect(0, 0, 5, 5), clip(), fillRect(0, 0, 10, 10));
270 TEST_OVERDRAW_4(0, rect(0, 0, 5, 5), clip(), setGlobalCompositeOperation(Str ing("copy")), fillRect(0, 0, 10, 10)); 298 TEST_OVERDRAW_4(0, rect(0, 0, 5, 5), clip(), setGlobalCompositeOperation(Str ing("copy")), fillRect(0, 0, 10, 10));
271 } 299 }
272 300
273 TEST_F(CanvasRenderingContext2DTest, detectOverdrawWithClearRect) 301 TEST_F(CanvasRenderingContext2DTest, detectOverdrawWithClearRect)
274 { 302 {
275 createContext(NonOpaque); 303 createContext(NonOpaque);
276 304
277 TEST_OVERDRAW_1(1, clearRect(0, 0, 10, 10)); 305 TEST_OVERDRAW_1(1, clearRect(0, 0, 10, 10));
278 TEST_OVERDRAW_1(0, clearRect(0, 0, 9, 9)); 306 TEST_OVERDRAW_1(0, clearRect(0, 0, 9, 9));
279 TEST_OVERDRAW_2(1, setGlobalAlpha(0.5f), clearRect(0, 0, 10, 10)); 307 TEST_OVERDRAW_2(1, setGlobalAlpha(0.5f), clearRect(0, 0, 10, 10));
280 TEST_OVERDRAW_2(1, setFillStyle(m_alphaGradient), clearRect(0, 0, 10, 10)); 308 TEST_OVERDRAW_2(1, setFillStyle(alphaGradient()), clearRect(0, 0, 10, 10));
281 TEST_OVERDRAW_2(0, translate(1, 1), clearRect(0, 0, 10, 10)); 309 TEST_OVERDRAW_2(0, translate(1, 1), clearRect(0, 0, 10, 10));
282 TEST_OVERDRAW_2(1, translate(1, 1), clearRect(-1, -1, 10, 10)); 310 TEST_OVERDRAW_2(1, translate(1, 1), clearRect(-1, -1, 10, 10));
283 TEST_OVERDRAW_2(1, setGlobalCompositeOperation(String("destination-in")), cl earRect(0, 0, 10, 10)); // composite op ignored 311 TEST_OVERDRAW_2(1, setGlobalCompositeOperation(String("destination-in")), cl earRect(0, 0, 10, 10)); // composite op ignored
284 TEST_OVERDRAW_3(0, rect(0, 0, 5, 5), clip(), clearRect(0, 0, 10, 10)); 312 TEST_OVERDRAW_3(0, rect(0, 0, 5, 5), clip(), clearRect(0, 0, 10, 10));
285 } 313 }
286 314
287 TEST_F(CanvasRenderingContext2DTest, detectOverdrawWithDrawImage) 315 TEST_F(CanvasRenderingContext2DTest, detectOverdrawWithDrawImage)
288 { 316 {
289 createContext(NonOpaque); 317 createContext(NonOpaque);
290 NonThrowableExceptionState exceptionState; 318 NonThrowableExceptionState exceptionState;
(...skipping 11 matching lines...) Expand all
302 TEST_OVERDRAW_1(0, drawImage(&m_opaqueBitmap, 0, 0, 10, 10, 1, 0, 10, 10, ex ceptionState)); 330 TEST_OVERDRAW_1(0, drawImage(&m_opaqueBitmap, 0, 0, 10, 10, 1, 0, 10, 10, ex ceptionState));
303 EXPECT_FALSE(exceptionState.hadException()); 331 EXPECT_FALSE(exceptionState.hadException());
304 TEST_OVERDRAW_1(0, drawImage(&m_opaqueBitmap, 0, 0, 10, 10, 0, 0, 9, 9, exce ptionState)); 332 TEST_OVERDRAW_1(0, drawImage(&m_opaqueBitmap, 0, 0, 10, 10, 0, 0, 9, 9, exce ptionState));
305 EXPECT_FALSE(exceptionState.hadException()); 333 EXPECT_FALSE(exceptionState.hadException());
306 TEST_OVERDRAW_1(1, drawImage(&m_opaqueBitmap, 0, 0, 10, 10, 0, 0, 11, 11, ex ceptionState)); 334 TEST_OVERDRAW_1(1, drawImage(&m_opaqueBitmap, 0, 0, 10, 10, 0, 0, 11, 11, ex ceptionState));
307 EXPECT_FALSE(exceptionState.hadException()); 335 EXPECT_FALSE(exceptionState.hadException());
308 TEST_OVERDRAW_2(1, translate(-1, 0), drawImage(&m_opaqueBitmap, 0, 0, 10, 10 , 1, 0, 10, 10, exceptionState)); 336 TEST_OVERDRAW_2(1, translate(-1, 0), drawImage(&m_opaqueBitmap, 0, 0, 10, 10 , 1, 0, 10, 10, exceptionState));
309 EXPECT_FALSE(exceptionState.hadException()); 337 EXPECT_FALSE(exceptionState.hadException());
310 TEST_OVERDRAW_2(0, translate(-1, 0), drawImage(&m_opaqueBitmap, 0, 0, 10, 10 , 0, 0, 10, 10, exceptionState)); 338 TEST_OVERDRAW_2(0, translate(-1, 0), drawImage(&m_opaqueBitmap, 0, 0, 10, 10 , 0, 0, 10, 10, exceptionState));
311 EXPECT_FALSE(exceptionState.hadException()); 339 EXPECT_FALSE(exceptionState.hadException());
312 TEST_OVERDRAW_2(0, setFillStyle(m_opaqueGradient), drawImage(&m_alphaBitmap, 0, 0, 10, 10, 0, 0, 10, 10, exceptionState)); // fillStyle ignored by drawImage 340 TEST_OVERDRAW_2(0, setFillStyle(opaqueGradient()), drawImage(&m_alphaBitmap, 0, 0, 10, 10, 0, 0, 10, 10, exceptionState)); // fillStyle ignored by drawImage
313 EXPECT_FALSE(exceptionState.hadException()); 341 EXPECT_FALSE(exceptionState.hadException());
314 TEST_OVERDRAW_2(1, setFillStyle(m_alphaGradient), drawImage(&m_opaqueBitmap, 0, 0, 10, 10, 0, 0, 10, 10, exceptionState)); // fillStyle ignored by drawImage 342 TEST_OVERDRAW_2(1, setFillStyle(alphaGradient()), drawImage(&m_opaqueBitmap, 0, 0, 10, 10, 0, 0, 10, 10, exceptionState)); // fillStyle ignored by drawImage
315 EXPECT_FALSE(exceptionState.hadException()); 343 EXPECT_FALSE(exceptionState.hadException());
316 TEST_OVERDRAW_2(1, setGlobalCompositeOperation(String("copy")), drawImage(&m _opaqueBitmap, 0, 0, 10, 10, 1, 0, 10, 10, exceptionState)); 344 TEST_OVERDRAW_2(1, setGlobalCompositeOperation(String("copy")), drawImage(&m _opaqueBitmap, 0, 0, 10, 10, 1, 0, 10, 10, exceptionState));
317 EXPECT_FALSE(exceptionState.hadException()); 345 EXPECT_FALSE(exceptionState.hadException());
318 TEST_OVERDRAW_3(0, rect(0, 0, 5, 5), clip(), drawImage(&m_opaqueBitmap, 0, 0 , 10, 10, 0, 0, 10, 10, exceptionState)); 346 TEST_OVERDRAW_3(0, rect(0, 0, 5, 5), clip(), drawImage(&m_opaqueBitmap, 0, 0 , 10, 10, 0, 0, 10, 10, exceptionState));
319 EXPECT_FALSE(exceptionState.hadException()); 347 EXPECT_FALSE(exceptionState.hadException());
320 } 348 }
321 349
322 TEST_F(CanvasRenderingContext2DTest, detectOverdrawWithPutImageData) 350 TEST_F(CanvasRenderingContext2DTest, detectOverdrawWithPutImageData)
323 { 351 {
324 createContext(NonOpaque); 352 createContext(NonOpaque);
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 // The canvasChanged notification must be immediate, and not deferred until paint time 624 // The canvasChanged notification must be immediate, and not deferred until paint time
597 // because offscreen canvases, which are not painted, also need to emit noti fications. 625 // because offscreen canvases, which are not painted, also need to emit noti fications.
598 EXPECT_CALL(*observer, canvasChanged(&canvasElement(), FloatRect(0, 0, 1, 1) )).Times(1); 626 EXPECT_CALL(*observer, canvasChanged(&canvasElement(), FloatRect(0, 0, 1, 1) )).Times(1);
599 context2d()->fillRect(0, 0, 1, 1); 627 context2d()->fillRect(0, 0, 1, 1);
600 Mock::VerifyAndClearExpectations(observer.get()); 628 Mock::VerifyAndClearExpectations(observer.get());
601 629
602 canvasElement().removeObserver(observer.get()); 630 canvasElement().removeObserver(observer.get());
603 } 631 }
604 632
605 } // namespace blink 633 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/editing/GranularityStrategyTest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698