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

Side by Side Diff: cc/gl_renderer_unittest.cc

Issue 12211110: Implement WebKit::WebUnitTestSupport::createLayerTreeViewForTesting() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add enum, fix NON_EXPORTED_BASE Created 7 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « cc/fake_web_graphics_context_3d.cc ('k') | cc/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "cc/gl_renderer.h" 5 #include "cc/gl_renderer.h"
6 6
7 #include "cc/compositor_frame_metadata.h" 7 #include "cc/compositor_frame_metadata.h"
8 #include "cc/draw_quad.h" 8 #include "cc/draw_quad.h"
9 #include "cc/prioritized_resource_manager.h" 9 #include "cc/prioritized_resource_manager.h"
10 #include "cc/resource_provider.h" 10 #include "cc/resource_provider.h"
11 #include "cc/test/fake_impl_proxy.h" 11 #include "cc/test/fake_impl_proxy.h"
12 #include "cc/test/fake_layer_tree_host_impl.h" 12 #include "cc/test/fake_layer_tree_host_impl.h"
13 #include "cc/test/fake_output_surface.h" 13 #include "cc/test/fake_output_surface.h"
14 #include "cc/test/fake_web_graphics_context_3d.h"
15 #include "cc/test/render_pass_test_common.h" 14 #include "cc/test/render_pass_test_common.h"
16 #include "cc/test/render_pass_test_utils.h" 15 #include "cc/test/render_pass_test_utils.h"
16 #include "cc/test/test_web_graphics_context_3d.h"
17 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
19 #include "third_party/khronos/GLES2/gl2.h" 19 #include "third_party/khronos/GLES2/gl2.h"
20 #include "ui/gfx/transform.h" 20 #include "ui/gfx/transform.h"
21 21
22 using namespace WebKit; 22 using namespace WebKit;
23 23
24 using testing::_; 24 using testing::_;
25 using testing::AnyNumber; 25 using testing::AnyNumber;
26 using testing::AtLeast; 26 using testing::AtLeast;
27 using testing::Expectation; 27 using testing::Expectation;
28 using testing::InSequence; 28 using testing::InSequence;
29 using testing::Mock; 29 using testing::Mock;
30 30
31 namespace cc { 31 namespace cc {
32 namespace { 32 namespace {
33 33
34 class FrameCountingMemoryAllocationSettingContext : public FakeWebGraphicsContex t3D { 34 class FrameCountingMemoryAllocationSettingContext : public TestWebGraphicsContex t3D {
35 public: 35 public:
36 FrameCountingMemoryAllocationSettingContext() : m_frame(0) { } 36 FrameCountingMemoryAllocationSettingContext() : m_frame(0) { }
37 37
38 // WebGraphicsContext3D methods. 38 // WebGraphicsContext3D methods.
39 39
40 // This method would normally do a glSwapBuffers under the hood. 40 // This method would normally do a glSwapBuffers under the hood.
41 virtual void prepareTexture() { m_frame++; } 41 virtual void prepareTexture() { m_frame++; }
42 virtual void setMemoryAllocationChangedCallbackCHROMIUM(WebGraphicsMemoryAll ocationChangedCallbackCHROMIUM* callback) { m_memoryAllocationChangedCallback = callback; } 42 virtual void setMemoryAllocationChangedCallbackCHROMIUM(WebGraphicsMemoryAll ocationChangedCallbackCHROMIUM* callback) { m_memoryAllocationChangedCallback = callback; }
43 virtual WebString getString(WebKit::WGC3Denum name) 43 virtual WebString getString(WebKit::WGC3Denum name)
44 { 44 {
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 231
232 char pixels[4]; 232 char pixels[4];
233 m_renderer.drawFrame(m_mockClient.renderPassesInDrawOrder()); 233 m_renderer.drawFrame(m_mockClient.renderPassesInDrawOrder());
234 EXPECT_FALSE(m_renderer.isBackbufferDiscarded()); 234 EXPECT_FALSE(m_renderer.isBackbufferDiscarded());
235 235
236 m_renderer.getFramebufferPixels(pixels, gfx::Rect(0, 0, 1, 1)); 236 m_renderer.getFramebufferPixels(pixels, gfx::Rect(0, 0, 1, 1));
237 EXPECT_TRUE(m_renderer.isBackbufferDiscarded()); 237 EXPECT_TRUE(m_renderer.isBackbufferDiscarded());
238 EXPECT_EQ(2, m_mockClient.setFullRootLayerDamageCount()); 238 EXPECT_EQ(2, m_mockClient.setFullRootLayerDamageCount());
239 } 239 }
240 240
241 class ForbidSynchronousCallContext : public FakeWebGraphicsContext3D { 241 class ForbidSynchronousCallContext : public TestWebGraphicsContext3D {
242 public: 242 public:
243 ForbidSynchronousCallContext() { } 243 ForbidSynchronousCallContext() { }
244 244
245 virtual bool getActiveAttrib(WebGLId program, WGC3Duint index, ActiveInfo&) { ADD_FAILURE(); return false; } 245 virtual bool getActiveAttrib(WebGLId program, WGC3Duint index, ActiveInfo&) { ADD_FAILURE(); return false; }
246 virtual bool getActiveUniform(WebGLId program, WGC3Duint index, ActiveInfo&) { ADD_FAILURE(); return false; } 246 virtual bool getActiveUniform(WebGLId program, WGC3Duint index, ActiveInfo&) { ADD_FAILURE(); return false; }
247 virtual void getAttachedShaders(WebGLId program, WGC3Dsizei maxCount, WGC3Ds izei* count, WebGLId* shaders) { ADD_FAILURE(); } 247 virtual void getAttachedShaders(WebGLId program, WGC3Dsizei maxCount, WGC3Ds izei* count, WebGLId* shaders) { ADD_FAILURE(); }
248 virtual WGC3Dint getAttribLocation(WebGLId program, const WGC3Dchar* name) { ADD_FAILURE(); return 0; } 248 virtual WGC3Dint getAttribLocation(WebGLId program, const WGC3Dchar* name) { ADD_FAILURE(); return 0; }
249 virtual void getBooleanv(WGC3Denum pname, WGC3Dboolean* value) { ADD_FAILURE (); } 249 virtual void getBooleanv(WGC3Denum pname, WGC3Dboolean* value) { ADD_FAILURE (); }
250 virtual void getBufferParameteriv(WGC3Denum target, WGC3Denum pname, WGC3Din t* value) { ADD_FAILURE(); } 250 virtual void getBufferParameteriv(WGC3Denum target, WGC3Denum pname, WGC3Din t* value) { ADD_FAILURE(); }
251 virtual Attributes getContextAttributes() { ADD_FAILURE(); return attributes _; } 251 virtual Attributes getContextAttributes() { ADD_FAILURE(); return attributes _; }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 TEST(GLRendererTest2, initializationDoesNotMakeSynchronousCalls) 308 TEST(GLRendererTest2, initializationDoesNotMakeSynchronousCalls)
309 { 309 {
310 FakeRendererClient mockClient; 310 FakeRendererClient mockClient;
311 scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_p tr<WebKit::WebGraphicsContext3D>(new ForbidSynchronousCallContext))); 311 scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_p tr<WebKit::WebGraphicsContext3D>(new ForbidSynchronousCallContext)));
312 scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(outpu tSurface.get())); 312 scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(outpu tSurface.get()));
313 FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.g et()); 313 FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.g et());
314 314
315 EXPECT_TRUE(renderer.initialize()); 315 EXPECT_TRUE(renderer.initialize());
316 } 316 }
317 317
318 class LoseContextOnFirstGetContext : public FakeWebGraphicsContext3D { 318 class LoseContextOnFirstGetContext : public TestWebGraphicsContext3D {
319 public: 319 public:
320 LoseContextOnFirstGetContext() 320 LoseContextOnFirstGetContext()
321 : m_contextLost(false) 321 : m_contextLost(false)
322 { 322 {
323 } 323 }
324 324
325 virtual bool makeContextCurrent() OVERRIDE 325 virtual bool makeContextCurrent() OVERRIDE
326 { 326 {
327 return !m_contextLost; 327 return !m_contextLost;
328 } 328 }
(...skipping 22 matching lines...) Expand all
351 TEST(GLRendererTest2, initializationWithQuicklyLostContextDoesNotAssert) 351 TEST(GLRendererTest2, initializationWithQuicklyLostContextDoesNotAssert)
352 { 352 {
353 FakeRendererClient mockClient; 353 FakeRendererClient mockClient;
354 scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_p tr<WebKit::WebGraphicsContext3D>(new LoseContextOnFirstGetContext))); 354 scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_p tr<WebKit::WebGraphicsContext3D>(new LoseContextOnFirstGetContext)));
355 scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(outpu tSurface.get())); 355 scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(outpu tSurface.get()));
356 FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.g et()); 356 FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.g et());
357 357
358 renderer.initialize(); 358 renderer.initialize();
359 } 359 }
360 360
361 class ContextThatDoesNotSupportMemoryManagmentExtensions : public FakeWebGraphic sContext3D { 361 class ContextThatDoesNotSupportMemoryManagmentExtensions : public TestWebGraphic sContext3D {
362 public: 362 public:
363 ContextThatDoesNotSupportMemoryManagmentExtensions() { } 363 ContextThatDoesNotSupportMemoryManagmentExtensions() { }
364 364
365 // WebGraphicsContext3D methods. 365 // WebGraphicsContext3D methods.
366 366
367 // This method would normally do a glSwapBuffers under the hood. 367 // This method would normally do a glSwapBuffers under the hood.
368 virtual void prepareTexture() { } 368 virtual void prepareTexture() { }
369 virtual void setMemoryAllocationChangedCallbackCHROMIUM(WebGraphicsMemoryAll ocationChangedCallbackCHROMIUM* callback) { } 369 virtual void setMemoryAllocationChangedCallbackCHROMIUM(WebGraphicsMemoryAll ocationChangedCallbackCHROMIUM* callback) { }
370 virtual WebString getString(WebKit::WGC3Denum name) { return WebString(); } 370 virtual WebString getString(WebKit::WGC3Denum name) { return WebString(); }
371 }; 371 };
372 372
373 TEST(GLRendererTest2, initializationWithoutGpuMemoryManagerExtensionSupportShoul dDefaultToNonZeroAllocation) 373 TEST(GLRendererTest2, initializationWithoutGpuMemoryManagerExtensionSupportShoul dDefaultToNonZeroAllocation)
374 { 374 {
375 FakeRendererClient mockClient; 375 FakeRendererClient mockClient;
376 scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_p tr<WebKit::WebGraphicsContext3D>(new ContextThatDoesNotSupportMemoryManagmentExt ensions))); 376 scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_p tr<WebKit::WebGraphicsContext3D>(new ContextThatDoesNotSupportMemoryManagmentExt ensions)));
377 scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(outpu tSurface.get())); 377 scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(outpu tSurface.get()));
378 FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.g et()); 378 FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.g et());
379 379
380 renderer.initialize(); 380 renderer.initialize();
381 381
382 EXPECT_GT(mockClient.memoryAllocationLimitBytes(), 0ul); 382 EXPECT_GT(mockClient.memoryAllocationLimitBytes(), 0ul);
383 } 383 }
384 384
385 class ClearCountingContext : public FakeWebGraphicsContext3D { 385 class ClearCountingContext : public TestWebGraphicsContext3D {
386 public: 386 public:
387 ClearCountingContext() : m_clear(0) { } 387 ClearCountingContext() : m_clear(0) { }
388 388
389 virtual void clear(WGC3Dbitfield) 389 virtual void clear(WGC3Dbitfield)
390 { 390 {
391 m_clear++; 391 m_clear++;
392 } 392 }
393 393
394 int clearCount() const { return m_clear; } 394 int clearCount() const { return m_clear; }
395 395
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 430
431 mockClient.rootRenderPass()->has_transparent_background = true; 431 mockClient.rootRenderPass()->has_transparent_background = true;
432 432
433 EXPECT_TRUE(renderer.initialize()); 433 EXPECT_TRUE(renderer.initialize());
434 434
435 renderer.drawFrame(mockClient.renderPassesInDrawOrder()); 435 renderer.drawFrame(mockClient.renderPassesInDrawOrder());
436 436
437 EXPECT_EQ(1, context->clearCount()); 437 EXPECT_EQ(1, context->clearCount());
438 } 438 }
439 439
440 class VisibilityChangeIsLastCallTrackingContext : public FakeWebGraphicsContext3 D { 440 class VisibilityChangeIsLastCallTrackingContext : public TestWebGraphicsContext3 D {
441 public: 441 public:
442 VisibilityChangeIsLastCallTrackingContext() 442 VisibilityChangeIsLastCallTrackingContext()
443 : m_lastCallWasSetVisibility(0) 443 : m_lastCallWasSetVisibility(0)
444 { 444 {
445 } 445 }
446 446
447 // WebGraphicsContext3D methods. 447 // WebGraphicsContext3D methods.
448 virtual void setVisibilityCHROMIUM(bool visible) { 448 virtual void setVisibilityCHROMIUM(bool visible) {
449 if (!m_lastCallWasSetVisibility) 449 if (!m_lastCallWasSetVisibility)
450 return; 450 return;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 // is called. Plumb this tracking between both the RenderClient and the Cont ext by giving 487 // is called. Plumb this tracking between both the RenderClient and the Cont ext by giving
488 // them both a pointer to a variable on the stack. 488 // them both a pointer to a variable on the stack.
489 context->setLastCallWasSetVisibilityPointer(&lastCallWasSetVisiblity); 489 context->setLastCallWasSetVisibilityPointer(&lastCallWasSetVisiblity);
490 mockClient.setLastCallWasSetVisibilityPointer(&lastCallWasSetVisiblity); 490 mockClient.setLastCallWasSetVisibilityPointer(&lastCallWasSetVisiblity);
491 renderer.setVisible(true); 491 renderer.setVisible(true);
492 renderer.drawFrame(mockClient.renderPassesInDrawOrder()); 492 renderer.drawFrame(mockClient.renderPassesInDrawOrder());
493 renderer.setVisible(false); 493 renderer.setVisible(false);
494 EXPECT_TRUE(lastCallWasSetVisiblity); 494 EXPECT_TRUE(lastCallWasSetVisiblity);
495 } 495 }
496 496
497 class TextureStateTrackingContext : public FakeWebGraphicsContext3D { 497 class TextureStateTrackingContext : public TestWebGraphicsContext3D {
498 public: 498 public:
499 TextureStateTrackingContext() 499 TextureStateTrackingContext()
500 : m_activeTexture(GL_INVALID_ENUM) 500 : m_activeTexture(GL_INVALID_ENUM)
501 { 501 {
502 } 502 }
503 503
504 virtual WebString getString(WGC3Denum name) 504 virtual WebString getString(WGC3Denum name)
505 { 505 {
506 if (name == GL_EXTENSIONS) 506 if (name == GL_EXTENSIONS)
507 return WebString("GL_OES_EGL_image_external"); 507 return WebString("GL_OES_EGL_image_external");
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 renderer.finishDrawingQuadList(); 577 renderer.finishDrawingQuadList();
578 EXPECT_EQ(context->activeTexture(), GL_TEXTURE0); 578 EXPECT_EQ(context->activeTexture(), GL_TEXTURE0);
579 Mock::VerifyAndClearExpectations(context); 579 Mock::VerifyAndClearExpectations(context);
580 } 580 }
581 581
582 class NoClearRootRenderPassFakeClient : public FakeRendererClient { 582 class NoClearRootRenderPassFakeClient : public FakeRendererClient {
583 public: 583 public:
584 virtual bool shouldClearRootRenderPass() const OVERRIDE { return false; } 584 virtual bool shouldClearRootRenderPass() const OVERRIDE { return false; }
585 }; 585 };
586 586
587 class NoClearRootRenderPassMockContext : public FakeWebGraphicsContext3D { 587 class NoClearRootRenderPassMockContext : public TestWebGraphicsContext3D {
588 public: 588 public:
589 MOCK_METHOD1(clear, void(WGC3Dbitfield mask)); 589 MOCK_METHOD1(clear, void(WGC3Dbitfield mask));
590 MOCK_METHOD4(drawElements, void(WGC3Denum mode, WGC3Dsizei count, WGC3Denum type, WGC3Dintptr offset)); 590 MOCK_METHOD4(drawElements, void(WGC3Denum mode, WGC3Dsizei count, WGC3Denum type, WGC3Dintptr offset));
591 }; 591 };
592 592
593 TEST(GLRendererTest2, shouldClearRootRenderPass) 593 TEST(GLRendererTest2, shouldClearRootRenderPass)
594 { 594 {
595 NoClearRootRenderPassFakeClient mockClient; 595 NoClearRootRenderPassFakeClient mockClient;
596 scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_p tr<WebKit::WebGraphicsContext3D>(new NoClearRootRenderPassMockContext))); 596 scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_p tr<WebKit::WebGraphicsContext3D>(new NoClearRootRenderPassMockContext)));
597 NoClearRootRenderPassMockContext* mockContext = static_cast<NoClearRootRende rPassMockContext*>(outputSurface->Context3D()); 597 NoClearRootRenderPassMockContext* mockContext = static_cast<NoClearRootRende rPassMockContext*>(outputSurface->Context3D());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 .Times(AnyNumber()) 629 .Times(AnyNumber())
630 .After(firstRenderPass); 630 .After(firstRenderPass);
631 631
632 renderer.decideRenderPassAllocationsForFrame(mockClient.renderPassesInDrawOr der()); 632 renderer.decideRenderPassAllocationsForFrame(mockClient.renderPassesInDrawOr der());
633 renderer.drawFrame(mockClient.renderPassesInDrawOrder()); 633 renderer.drawFrame(mockClient.renderPassesInDrawOrder());
634 634
635 // In multiple render passes all but the root pass should clear the framebuf fer. 635 // In multiple render passes all but the root pass should clear the framebuf fer.
636 Mock::VerifyAndClearExpectations(&mockContext); 636 Mock::VerifyAndClearExpectations(&mockContext);
637 } 637 }
638 638
639 class ScissorTestOnClearCheckingContext : public FakeWebGraphicsContext3D { 639 class ScissorTestOnClearCheckingContext : public TestWebGraphicsContext3D {
640 public: 640 public:
641 ScissorTestOnClearCheckingContext() : m_scissorEnabled(false) { } 641 ScissorTestOnClearCheckingContext() : m_scissorEnabled(false) { }
642 642
643 virtual void clear(WGC3Dbitfield) 643 virtual void clear(WGC3Dbitfield)
644 { 644 {
645 EXPECT_FALSE(m_scissorEnabled); 645 EXPECT_FALSE(m_scissorEnabled);
646 } 646 }
647 647
648 virtual void enable(WGC3Denum cap) 648 virtual void enable(WGC3Denum cap)
649 { 649 {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 689
690 addRenderPassQuad(rootPass, childPass); 690 addRenderPassQuad(rootPass, childPass);
691 addRenderPassQuad(childPass, grandChildPass); 691 addRenderPassQuad(childPass, grandChildPass);
692 692
693 renderer.decideRenderPassAllocationsForFrame(mockClient.renderPassesInDrawOr der()); 693 renderer.decideRenderPassAllocationsForFrame(mockClient.renderPassesInDrawOr der());
694 renderer.drawFrame(mockClient.renderPassesInDrawOrder()); 694 renderer.drawFrame(mockClient.renderPassesInDrawOrder());
695 } 695 }
696 696
697 } // namespace 697 } // namespace
698 } // namespace cc 698 } // namespace cc
OLDNEW
« no previous file with comments | « cc/fake_web_graphics_context_3d.cc ('k') | cc/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698