| 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 |