OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 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 | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 FakeCCRendererClient() | 76 FakeCCRendererClient() |
77 : m_setFullRootLayerDamageCount(0) | 77 : m_setFullRootLayerDamageCount(0) |
78 , m_rootLayer(CCLayerImpl::create(1)) | 78 , m_rootLayer(CCLayerImpl::create(1)) |
79 , m_memoryAllocationLimitBytes(0) | 79 , m_memoryAllocationLimitBytes(0) |
80 { | 80 { |
81 m_rootLayer->createRenderSurface(); | 81 m_rootLayer->createRenderSurface(); |
82 m_rootRenderPass = CCRenderPass::create(m_rootLayer->renderSurface()); | 82 m_rootRenderPass = CCRenderPass::create(m_rootLayer->renderSurface()); |
83 } | 83 } |
84 | 84 |
85 // CCRendererClient methods. | 85 // CCRendererClient methods. |
86 virtual const IntSize& deviceViewportSize() const OVERRIDE { static IntSize
fakeSize; return fakeSize; } | 86 virtual const IntSize& deviceViewportSize() const OVERRIDE { static IntSize
fakeSize(1, 1); return fakeSize; } |
87 virtual const CCLayerTreeSettings& settings() const OVERRIDE { static CCLaye
rTreeSettings fakeSettings; return fakeSettings; } | 87 virtual const CCLayerTreeSettings& settings() const OVERRIDE { static CCLaye
rTreeSettings fakeSettings; return fakeSettings; } |
88 virtual void didLoseContext() OVERRIDE { } | 88 virtual void didLoseContext() OVERRIDE { } |
89 virtual void onSwapBuffersComplete() OVERRIDE { } | 89 virtual void onSwapBuffersComplete() OVERRIDE { } |
90 virtual void setFullRootLayerDamage() OVERRIDE { m_setFullRootLayerDamageCou
nt++; } | 90 virtual void setFullRootLayerDamage() OVERRIDE { m_setFullRootLayerDamageCou
nt++; } |
91 virtual void setContentsMemoryAllocationLimitBytes(size_t bytes) OVERRIDE {
m_memoryAllocationLimitBytes = bytes; } | 91 virtual void releaseContentsTextures() OVERRIDE { } |
| 92 virtual void setMemoryAllocationLimitBytes(size_t bytes) OVERRIDE { m_memory
AllocationLimitBytes = bytes; } |
92 | 93 |
93 // Methods added for test. | 94 // Methods added for test. |
94 int setFullRootLayerDamageCount() const { return m_setFullRootLayerDamageCou
nt; } | 95 int setFullRootLayerDamageCount() const { return m_setFullRootLayerDamageCou
nt; } |
95 | 96 |
96 CCRenderPass* rootRenderPass() { return m_rootRenderPass.get(); } | 97 CCRenderPass* rootRenderPass() { return m_rootRenderPass.get(); } |
97 | 98 |
98 size_t memoryAllocationLimitBytes() const { return m_memoryAllocationLimitBy
tes; } | 99 size_t memoryAllocationLimitBytes() const { return m_memoryAllocationLimitBy
tes; } |
99 | 100 |
100 private: | 101 private: |
101 int m_setFullRootLayerDamageCount; | 102 int m_setFullRootLayerDamageCount; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 { | 161 { |
161 m_mockContext.setMemoryAllocation(m_suggestHaveBackbufferYes); | 162 m_mockContext.setMemoryAllocation(m_suggestHaveBackbufferYes); |
162 EXPECT_EQ(0, m_mockClient.setFullRootLayerDamageCount()); | 163 EXPECT_EQ(0, m_mockClient.setFullRootLayerDamageCount()); |
163 EXPECT_FALSE(m_layerRendererChromium.isFramebufferDiscarded()); | 164 EXPECT_FALSE(m_layerRendererChromium.isFramebufferDiscarded()); |
164 | 165 |
165 swapBuffers(); | 166 swapBuffers(); |
166 EXPECT_EQ(1, m_mockContext.frameCount()); | 167 EXPECT_EQ(1, m_mockContext.frameCount()); |
167 } | 168 } |
168 | 169 |
169 // Test LayerRendererChromium discardFramebuffer functionality: | 170 // Test LayerRendererChromium discardFramebuffer functionality: |
170 // Suggest discarding framebuffer when one exists. | 171 // Suggest discarding framebuffer when one exists and the renderer is not visibl
e. |
171 // Expected: it is discarded and damage tracker is reset. | 172 // Expected: it is discarded and damage tracker is reset. |
172 TEST_F(LayerRendererChromiumTest, SuggestBackbufferNoShouldDiscardBackbufferAndD
amageRootLayer) | 173 TEST_F(LayerRendererChromiumTest, SuggestBackbufferNoShouldDiscardBackbufferAndD
amageRootLayerWhileNotVisible) |
173 { | 174 { |
| 175 m_layerRendererChromium.setVisible(false); |
174 m_mockContext.setMemoryAllocation(m_suggestHaveBackbufferNo); | 176 m_mockContext.setMemoryAllocation(m_suggestHaveBackbufferNo); |
175 EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); | 177 EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); |
176 EXPECT_TRUE(m_layerRendererChromium.isFramebufferDiscarded()); | 178 EXPECT_TRUE(m_layerRendererChromium.isFramebufferDiscarded()); |
177 } | 179 } |
178 | 180 |
179 // Test LayerRendererChromium discardFramebuffer functionality: | 181 // Test LayerRendererChromium discardFramebuffer functionality: |
| 182 // Suggest discarding framebuffer when one exists and the renderer is visible. |
| 183 // Expected: the allocation is ignored. |
| 184 TEST_F(LayerRendererChromiumTest, SuggestBackbufferNoDoNothingWhenVisible) |
| 185 { |
| 186 m_layerRendererChromium.setVisible(true); |
| 187 m_mockContext.setMemoryAllocation(m_suggestHaveBackbufferNo); |
| 188 EXPECT_EQ(0, m_mockClient.setFullRootLayerDamageCount()); |
| 189 EXPECT_FALSE(m_layerRendererChromium.isFramebufferDiscarded()); |
| 190 } |
| 191 |
| 192 |
| 193 // Test LayerRendererChromium discardFramebuffer functionality: |
180 // Suggest discarding framebuffer when one does not exist. | 194 // Suggest discarding framebuffer when one does not exist. |
181 // Expected: it does nothing. | 195 // Expected: it does nothing. |
182 TEST_F(LayerRendererChromiumTest, SuggestBackbufferNoWhenItDoesntExistShouldDoNo
thing) | 196 TEST_F(LayerRendererChromiumTest, SuggestBackbufferNoWhenItDoesntExistShouldDoNo
thing) |
183 { | 197 { |
| 198 m_layerRendererChromium.setVisible(false); |
184 m_mockContext.setMemoryAllocation(m_suggestHaveBackbufferNo); | 199 m_mockContext.setMemoryAllocation(m_suggestHaveBackbufferNo); |
185 EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); | 200 EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); |
186 EXPECT_TRUE(m_layerRendererChromium.isFramebufferDiscarded()); | 201 EXPECT_TRUE(m_layerRendererChromium.isFramebufferDiscarded()); |
187 | 202 |
188 m_mockContext.setMemoryAllocation(m_suggestHaveBackbufferNo); | 203 m_mockContext.setMemoryAllocation(m_suggestHaveBackbufferNo); |
189 EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); | 204 EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); |
190 EXPECT_TRUE(m_layerRendererChromium.isFramebufferDiscarded()); | 205 EXPECT_TRUE(m_layerRendererChromium.isFramebufferDiscarded()); |
191 } | 206 } |
192 | 207 |
193 // Test LayerRendererChromium discardFramebuffer functionality: | 208 // Test LayerRendererChromium discardFramebuffer functionality: |
194 // Suggest discarding framebuffer, then try to swapBuffers. | |
195 // Expected: framebuffer is discarded, swaps are ignored, and damage is reset af
ter discard and after each swap. | |
196 TEST_F(LayerRendererChromiumTest, SwapBuffersWhileBackbufferDiscardedShouldIgnor
eSwapAndDamageRootLayer) | |
197 { | |
198 m_mockContext.setMemoryAllocation(m_suggestHaveBackbufferNo); | |
199 EXPECT_TRUE(m_layerRendererChromium.isFramebufferDiscarded()); | |
200 EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); | |
201 | |
202 swapBuffers(); | |
203 EXPECT_EQ(0, m_mockContext.frameCount()); | |
204 EXPECT_EQ(2, m_mockClient.setFullRootLayerDamageCount()); | |
205 | |
206 swapBuffers(); | |
207 EXPECT_EQ(0, m_mockContext.frameCount()); | |
208 EXPECT_EQ(3, m_mockClient.setFullRootLayerDamageCount()); | |
209 } | |
210 | |
211 // Test LayerRendererChromium discardFramebuffer functionality: | |
212 // Begin drawing a frame while a framebuffer is discarded. | 209 // Begin drawing a frame while a framebuffer is discarded. |
213 // Expected: will recreate framebuffer. | 210 // Expected: will recreate framebuffer. |
214 TEST_F(LayerRendererChromiumTest, DiscardedBackbufferIsRecreatredForScopeDuratio
n) | 211 TEST_F(LayerRendererChromiumTest, DiscardedBackbufferIsRecreatedForScopeDuration
) |
215 { | 212 { |
| 213 m_layerRendererChromium.setVisible(false); |
216 m_mockContext.setMemoryAllocation(m_suggestHaveBackbufferNo); | 214 m_mockContext.setMemoryAllocation(m_suggestHaveBackbufferNo); |
217 EXPECT_TRUE(m_layerRendererChromium.isFramebufferDiscarded()); | 215 EXPECT_TRUE(m_layerRendererChromium.isFramebufferDiscarded()); |
218 EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); | 216 EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); |
219 | 217 |
| 218 m_layerRendererChromium.setVisible(true); |
220 m_layerRendererChromium.beginDrawingFrame(m_mockClient.rootRenderPass()); | 219 m_layerRendererChromium.beginDrawingFrame(m_mockClient.rootRenderPass()); |
221 EXPECT_FALSE(m_layerRendererChromium.isFramebufferDiscarded()); | 220 EXPECT_FALSE(m_layerRendererChromium.isFramebufferDiscarded()); |
222 | 221 |
223 swapBuffers(); | 222 swapBuffers(); |
224 EXPECT_EQ(1, m_mockContext.frameCount()); | 223 EXPECT_EQ(1, m_mockContext.frameCount()); |
225 } | 224 } |
226 | 225 |
| 226 TEST_F(LayerRendererChromiumTest, FramebufferDiscardedAfterReadbackWhenNotVisibl
e) |
| 227 { |
| 228 m_layerRendererChromium.setVisible(false); |
| 229 m_mockContext.setMemoryAllocation(m_suggestHaveBackbufferNo); |
| 230 EXPECT_TRUE(m_layerRendererChromium.isFramebufferDiscarded()); |
| 231 EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); |
| 232 |
| 233 char pixels[4]; |
| 234 m_layerRendererChromium.beginDrawingFrame(m_mockClient.rootRenderPass()); |
| 235 EXPECT_FALSE(m_layerRendererChromium.isFramebufferDiscarded()); |
| 236 |
| 237 m_layerRendererChromium.getFramebufferPixels(pixels, IntRect(0, 0, 1, 1)); |
| 238 EXPECT_TRUE(m_layerRendererChromium.isFramebufferDiscarded()); |
| 239 EXPECT_EQ(2, m_mockClient.setFullRootLayerDamageCount()); |
| 240 } |
| 241 |
227 class ForbidSynchronousCallContext : public FakeWebGraphicsContext3D { | 242 class ForbidSynchronousCallContext : public FakeWebGraphicsContext3D { |
228 public: | 243 public: |
229 ForbidSynchronousCallContext() { } | 244 ForbidSynchronousCallContext() { } |
230 | 245 |
231 virtual bool getActiveAttrib(WebGLId program, WGC3Duint index, ActiveInfo&)
{ ADD_FAILURE(); return false; } | 246 virtual bool getActiveAttrib(WebGLId program, WGC3Duint index, ActiveInfo&)
{ ADD_FAILURE(); return false; } |
232 virtual bool getActiveUniform(WebGLId program, WGC3Duint index, ActiveInfo&)
{ ADD_FAILURE(); return false; } | 247 virtual bool getActiveUniform(WebGLId program, WGC3Duint index, ActiveInfo&)
{ ADD_FAILURE(); return false; } |
233 virtual void getAttachedShaders(WebGLId program, WGC3Dsizei maxCount, WGC3Ds
izei* count, WebGLId* shaders) { ADD_FAILURE(); } | 248 virtual void getAttachedShaders(WebGLId program, WGC3Dsizei maxCount, WGC3Ds
izei* count, WebGLId* shaders) { ADD_FAILURE(); } |
234 virtual WGC3Dint getAttribLocation(WebGLId program, const WGC3Dchar* name) {
ADD_FAILURE(); return 0; } | 249 virtual WGC3Dint getAttribLocation(WebGLId program, const WGC3Dchar* name) {
ADD_FAILURE(); return 0; } |
235 virtual void getBooleanv(WGC3Denum pname, WGC3Dboolean* value) { ADD_FAILURE
(); } | 250 virtual void getBooleanv(WGC3Denum pname, WGC3Dboolean* value) { ADD_FAILURE
(); } |
236 virtual void getBufferParameteriv(WGC3Denum target, WGC3Denum pname, WGC3Din
t* value) { ADD_FAILURE(); } | 251 virtual void getBufferParameteriv(WGC3Denum target, WGC3Denum pname, WGC3Din
t* value) { ADD_FAILURE(); } |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 mockClient.rootRenderPass()->setHasTransparentBackground(true); | 426 mockClient.rootRenderPass()->setHasTransparentBackground(true); |
412 | 427 |
413 EXPECT_TRUE(layerRendererChromium.initialize()); | 428 EXPECT_TRUE(layerRendererChromium.initialize()); |
414 | 429 |
415 layerRendererChromium.beginDrawingFrame(mockClient.rootRenderPass()); | 430 layerRendererChromium.beginDrawingFrame(mockClient.rootRenderPass()); |
416 layerRendererChromium.drawRenderPass(mockClient.rootRenderPass(), FloatRect(
)); | 431 layerRendererChromium.drawRenderPass(mockClient.rootRenderPass(), FloatRect(
)); |
417 layerRendererChromium.finishDrawingFrame(); | 432 layerRendererChromium.finishDrawingFrame(); |
418 | 433 |
419 EXPECT_EQ(1, static_cast<ClearCountingContext*>(GraphicsContext3DPrivate::ex
tractWebGraphicsContext3D(context.get()))->clearCount()); | 434 EXPECT_EQ(1, static_cast<ClearCountingContext*>(GraphicsContext3DPrivate::ex
tractWebGraphicsContext3D(context.get()))->clearCount()); |
420 } | 435 } |
OLD | NEW |