| Index: cc/output/renderer_unittest.cc
|
| diff --git a/cc/output/renderer_unittest.cc b/cc/output/renderer_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a8f09ff94748002f7a031a2f8d65ba21ccab88da
|
| --- /dev/null
|
| +++ b/cc/output/renderer_unittest.cc
|
| @@ -0,0 +1,115 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "cc/output/delegating_renderer.h"
|
| +#include "cc/output/gl_renderer.h"
|
| +#include "cc/output/output_surface.h"
|
| +#include "cc/test/fake_output_surface_client.h"
|
| +#include "cc/test/fake_renderer_client.h"
|
| +#include "cc/test/test_context_provider.h"
|
| +#include "cc/test/test_web_graphics_context_3d.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace cc {
|
| +namespace {
|
| +
|
| +class TestOutputSurface : public OutputSurface {
|
| + public:
|
| + explicit TestOutputSurface(
|
| + const scoped_refptr<ContextProvider>& context_provider);
|
| + ~TestOutputSurface() override;
|
| +
|
| + // OutputSurface implementation
|
| + void SwapBuffers(CompositorFrame* frame) override;
|
| +};
|
| +
|
| +TestOutputSurface::TestOutputSurface(
|
| + const scoped_refptr<ContextProvider>& context_provider)
|
| + : OutputSurface(context_provider) {
|
| +}
|
| +
|
| +TestOutputSurface::~TestOutputSurface() {
|
| +}
|
| +
|
| +void TestOutputSurface::SwapBuffers(CompositorFrame* frame) {
|
| + client_->DidSwapBuffers();
|
| + client_->DidSwapBuffersComplete();
|
| +}
|
| +
|
| +class MockContextProvider : public TestContextProvider {
|
| + public:
|
| + explicit MockContextProvider(scoped_ptr<TestWebGraphicsContext3D> context)
|
| + : TestContextProvider(context.Pass()) {}
|
| + MOCK_METHOD0(DeleteCachedResources, void());
|
| +
|
| + protected:
|
| + ~MockContextProvider() {}
|
| +};
|
| +
|
| +template <class T>
|
| +scoped_ptr<Renderer> CreateRenderer(RendererClient* client,
|
| + const RendererSettings* settings,
|
| + OutputSurface* output_surface,
|
| + ResourceProvider* resource_provider);
|
| +
|
| +template <>
|
| +scoped_ptr<Renderer> CreateRenderer<DelegatingRenderer>(
|
| + RendererClient* client,
|
| + const RendererSettings* settings,
|
| + OutputSurface* output_surface,
|
| + ResourceProvider* resource_provider) {
|
| + return DelegatingRenderer::Create(
|
| + client, settings, output_surface, resource_provider);
|
| +}
|
| +
|
| +template <>
|
| +scoped_ptr<Renderer> CreateRenderer<GLRenderer>(
|
| + RendererClient* client,
|
| + const RendererSettings* settings,
|
| + OutputSurface* output_surface,
|
| + ResourceProvider* resource_provider) {
|
| + return GLRenderer::Create(
|
| + client, settings, output_surface, resource_provider, NULL, 0);
|
| +}
|
| +
|
| +template <typename T>
|
| +class RendererTest : public ::testing::Test {
|
| + protected:
|
| + virtual void SetUp() {
|
| + context_provider_ =
|
| + new MockContextProvider(TestWebGraphicsContext3D::Create());
|
| + output_surface_.reset(new TestOutputSurface(context_provider_));
|
| + output_surface_->BindToClient(&output_surface_client_);
|
| + resource_provider_ = ResourceProvider::Create(
|
| + output_surface_.get(), NULL, NULL, NULL, 0, false, 1);
|
| + renderer_ = CreateRenderer<T>(&renderer_client_,
|
| + &tree_settings_,
|
| + output_surface_.get(),
|
| + resource_provider_.get());
|
| + }
|
| +
|
| + FakeRendererClient renderer_client_;
|
| + RendererSettings tree_settings_;
|
| + FakeOutputSurfaceClient output_surface_client_;
|
| + scoped_refptr<MockContextProvider> context_provider_;
|
| + scoped_ptr<OutputSurface> output_surface_;
|
| + scoped_ptr<ResourceProvider> resource_provider_;
|
| + scoped_ptr<Renderer> renderer_;
|
| +};
|
| +
|
| +typedef ::testing::Types<DelegatingRenderer, GLRenderer> RendererTypes;
|
| +TYPED_TEST_CASE(RendererTest, RendererTypes);
|
| +
|
| +TYPED_TEST(RendererTest, ContextPurgedWhenRendererBecomesInvisible) {
|
| + EXPECT_CALL(*(this->context_provider_.get()), DeleteCachedResources())
|
| + .Times(1);
|
| +
|
| + EXPECT_TRUE(this->renderer_->visible());
|
| + this->renderer_->SetVisible(false);
|
| + EXPECT_FALSE(this->renderer_->visible());
|
| +}
|
| +
|
| +} // namespace
|
| +} // namespace cc
|
|
|