Index: cc/software_renderer_unittest.cc |
diff --git a/cc/software_renderer_unittest.cc b/cc/software_renderer_unittest.cc |
deleted file mode 100644 |
index 79a04f8dbab4e43685ed8ea675f8dc83cb360f70..0000000000000000000000000000000000000000 |
--- a/cc/software_renderer_unittest.cc |
+++ /dev/null |
@@ -1,207 +0,0 @@ |
-// Copyright 2012 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/software_renderer.h" |
- |
-#include "cc/compositor_frame_metadata.h" |
-#include "cc/quad_sink.h" |
-#include "cc/render_pass.h" |
-#include "cc/render_pass_draw_quad.h" |
-#include "cc/software_output_device.h" |
-#include "cc/solid_color_draw_quad.h" |
-#include "cc/test/animation_test_common.h" |
-#include "cc/test/fake_output_surface.h" |
-#include "cc/test/geometry_test_utils.h" |
-#include "cc/test/render_pass_test_common.h" |
-#include "cc/test/render_pass_test_utils.h" |
-#include "cc/tile_draw_quad.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using namespace WebKit; |
- |
-namespace cc { |
-namespace { |
- |
-class SoftwareRendererTest : public testing::Test, public RendererClient { |
-public: |
- SoftwareRendererTest() |
- : m_shouldClearRootRenderPass(true) |
- { |
- } |
- |
- void initializeRenderer() { |
- m_outputSurface = FakeOutputSurface::CreateSoftware(make_scoped_ptr(new SoftwareOutputDevice)); |
- resource_provider_ = ResourceProvider::Create(m_outputSurface.get()); |
- m_renderer = SoftwareRenderer::Create(this, m_outputSurface.get(), resourceProvider()); |
- } |
- |
- ResourceProvider* resourceProvider() const { return resource_provider_.get(); } |
- SoftwareRenderer* renderer() const { return m_renderer.get(); } |
- void setViewportSize(const gfx::Size& viewportSize) { m_viewportSize = viewportSize; } |
- void setShouldClearRootRenderPass(bool clearRootRenderPass) { m_shouldClearRootRenderPass = clearRootRenderPass; } |
- |
- // RendererClient implementation. |
- virtual gfx::Size DeviceViewportSize() const OVERRIDE { return m_viewportSize; } |
- virtual const LayerTreeSettings& Settings() const OVERRIDE { return m_settings; } |
- virtual void DidLoseOutputSurface() OVERRIDE { } |
- virtual void OnSwapBuffersComplete() OVERRIDE { } |
- virtual void SetFullRootLayerDamage() OVERRIDE { } |
- virtual void SetManagedMemoryPolicy(const ManagedMemoryPolicy& policy) OVERRIDE { }; |
- virtual void EnforceManagedMemoryPolicy(const ManagedMemoryPolicy& policy) OVERRIDE { }; |
- virtual bool HasImplThread() const OVERRIDE { return false; } |
- virtual bool ShouldClearRootRenderPass() const OVERRIDE { return m_shouldClearRootRenderPass; } |
- virtual CompositorFrameMetadata MakeCompositorFrameMetadata() const |
- OVERRIDE { return CompositorFrameMetadata(); } |
- |
-protected: |
- scoped_ptr<FakeOutputSurface> m_outputSurface; |
- scoped_ptr<ResourceProvider> resource_provider_; |
- scoped_ptr<SoftwareRenderer> m_renderer; |
- gfx::Size m_viewportSize; |
- LayerTreeSettings m_settings; |
- bool m_shouldClearRootRenderPass; |
-}; |
- |
-TEST_F(SoftwareRendererTest, solidColorQuad) |
-{ |
- gfx::Size outerSize(100, 100); |
- int outerPixels = outerSize.width() * outerSize.height(); |
- gfx::Size innerSize(98, 98); |
- gfx::Rect outerRect(outerSize); |
- gfx::Rect innerRect(gfx::Point(1, 1), innerSize); |
- setViewportSize(outerSize); |
- |
- initializeRenderer(); |
- |
- scoped_ptr<SharedQuadState> sharedQuadState = SharedQuadState::Create(); |
- sharedQuadState->SetAll(gfx::Transform(), outerSize, outerRect, outerRect, false, 1.0); |
- RenderPass::Id root_render_passId = RenderPass::Id(1, 1); |
- scoped_ptr<TestRenderPass> root_render_pass = TestRenderPass::Create(); |
- root_render_pass->SetNew(root_render_passId, outerRect, outerRect, gfx::Transform()); |
- scoped_ptr<SolidColorDrawQuad> outerQuad = SolidColorDrawQuad::Create(); |
- outerQuad->SetNew(sharedQuadState.get(), outerRect, SK_ColorYELLOW); |
- scoped_ptr<SolidColorDrawQuad> innerQuad = SolidColorDrawQuad::Create(); |
- innerQuad->SetNew(sharedQuadState.get(), innerRect, SK_ColorCYAN); |
- root_render_pass->AppendQuad(innerQuad.PassAs<DrawQuad>()); |
- root_render_pass->AppendQuad(outerQuad.PassAs<DrawQuad>()); |
- |
- RenderPassList list; |
- list.push_back(root_render_pass.PassAs<RenderPass>()); |
- renderer()->DrawFrame(list); |
- |
- scoped_array<SkColor> pixels(new SkColor[DeviceViewportSize().width() * DeviceViewportSize().height()]); |
- renderer()->GetFramebufferPixels(pixels.get(), outerRect); |
- |
-// FIXME: This fails on Android. Endianness maybe? |
-// Yellow: expects 0xFFFFFF00, was 0xFF00FFFF on android. |
-// Cyan: expects 0xFF00FFFF, was 0xFFFFFF00 on android. |
-// http://crbug.com/154528 |
-#ifndef OS_ANDROID |
- EXPECT_EQ(SK_ColorYELLOW, pixels[0]); |
- EXPECT_EQ(SK_ColorYELLOW, pixels[outerPixels - 1]); |
- EXPECT_EQ(SK_ColorCYAN, pixels[outerSize.width() + 1]); |
- EXPECT_EQ(SK_ColorCYAN, pixels[outerPixels - outerSize.width() - 2]); |
-#endif |
-} |
- |
-TEST_F(SoftwareRendererTest, tileQuad) |
-{ |
- gfx::Size outerSize(100, 100); |
- int outerPixels = outerSize.width() * outerSize.height(); |
- gfx::Size innerSize(98, 98); |
- int innerPixels = innerSize.width() * innerSize.height(); |
- gfx::Rect outerRect(outerSize); |
- gfx::Rect innerRect(gfx::Point(1, 1), innerSize); |
- setViewportSize(outerSize); |
- initializeRenderer(); |
- |
- ResourceProvider::ResourceId resourceYellow = resourceProvider()->CreateResource(outerSize, GL_RGBA, ResourceProvider::TextureUsageAny); |
- ResourceProvider::ResourceId resourceCyan = resourceProvider()->CreateResource(innerSize, GL_RGBA, ResourceProvider::TextureUsageAny); |
- |
- SkColor yellow = SK_ColorYELLOW; |
- SkColor cyan = SK_ColorCYAN; |
- scoped_array<SkColor> yellowPixels(new SkColor[outerPixels]); |
- scoped_array<SkColor> cyanPixels(new SkColor[innerPixels]); |
- for (int i = 0; i < outerPixels; i++) |
- yellowPixels[i] = yellow; |
- for (int i = 0; i < innerPixels; i++) |
- cyanPixels[i] = cyan; |
- |
- resourceProvider()->SetPixels(resourceYellow, reinterpret_cast<uint8_t*>(yellowPixels.get()), gfx::Rect(outerSize), gfx::Rect(outerSize), gfx::Vector2d()); |
- resourceProvider()->SetPixels(resourceCyan, reinterpret_cast<uint8_t*>(cyanPixels.get()), gfx::Rect(innerSize), gfx::Rect(innerSize), gfx::Vector2d()); |
- |
- gfx::Rect rootRect = gfx::Rect(DeviceViewportSize()); |
- |
- scoped_ptr<SharedQuadState> sharedQuadState = SharedQuadState::Create(); |
- sharedQuadState->SetAll(gfx::Transform(), outerSize, outerRect, outerRect, false, 1.0); |
- RenderPass::Id root_render_passId = RenderPass::Id(1, 1); |
- scoped_ptr<TestRenderPass> root_render_pass = TestRenderPass::Create(); |
- root_render_pass->SetNew(root_render_passId, rootRect, rootRect, gfx::Transform()); |
- scoped_ptr<TileDrawQuad> outerQuad = TileDrawQuad::Create(); |
- outerQuad->SetNew(sharedQuadState.get(), outerRect, outerRect, resourceYellow, gfx::RectF(outerSize), outerSize, false); |
- scoped_ptr<TileDrawQuad> innerQuad = TileDrawQuad::Create(); |
- innerQuad->SetNew(sharedQuadState.get(), innerRect, innerRect, resourceCyan, gfx::RectF(innerSize), innerSize, false); |
- root_render_pass->AppendQuad(innerQuad.PassAs<DrawQuad>()); |
- root_render_pass->AppendQuad(outerQuad.PassAs<DrawQuad>()); |
- |
- RenderPassList list; |
- list.push_back(root_render_pass.PassAs<RenderPass>()); |
- renderer()->DrawFrame(list); |
- |
- scoped_array<SkColor> pixels(new SkColor[DeviceViewportSize().width() * DeviceViewportSize().height()]); |
- renderer()->GetFramebufferPixels(pixels.get(), outerRect); |
- |
- EXPECT_EQ(SK_ColorYELLOW, pixels[0]); |
- EXPECT_EQ(SK_ColorYELLOW, pixels[outerPixels - 1]); |
- EXPECT_EQ(SK_ColorCYAN, pixels[outerSize.width() + 1]); |
- EXPECT_EQ(SK_ColorCYAN, pixels[outerPixels - outerSize.width() - 2]); |
-} |
- |
-TEST_F(SoftwareRendererTest, shouldClearRootRenderPass) |
-{ |
- gfx::Rect viewportRect(gfx::Size(100, 100)); |
- size_t viewportPixels = viewportRect.width() * viewportRect.height(); |
- setViewportSize(viewportRect.size()); |
- setShouldClearRootRenderPass(false); |
- initializeRenderer(); |
- |
- RenderPassList list; |
- scoped_array<SkColor> pixels(new SkColor[viewportPixels]); |
- |
- // Draw a fullscreen green quad in a first frame. |
- RenderPass::Id rootClearPassId(1, 0); |
- TestRenderPass* rootClearPass = addRenderPass(list, rootClearPassId, viewportRect, gfx::Transform()); |
- addQuad(rootClearPass, viewportRect, SK_ColorGREEN); |
- |
- renderer()->DecideRenderPassAllocationsForFrame(list); |
- renderer()->DrawFrame(list); |
- renderer()->GetFramebufferPixels(pixels.get(), viewportRect); |
- |
- EXPECT_EQ(SK_ColorGREEN, pixels[0]); |
- EXPECT_EQ(SK_ColorGREEN, pixels[viewportPixels - 1]); |
- |
- list.clear(); |
- |
- // Draw a smaller magenta rect without filling the viewport in a separate frame. |
- gfx::Rect smallerRect(20, 20, 60, 60); |
- |
- RenderPass::Id rootSmallerPassId(2, 0); |
- TestRenderPass* rootSmallerPass = addRenderPass(list, rootSmallerPassId, viewportRect, gfx::Transform()); |
- addQuad(rootSmallerPass, smallerRect, SK_ColorMAGENTA); |
- |
- renderer()->DecideRenderPassAllocationsForFrame(list); |
- renderer()->DrawFrame(list); |
- renderer()->GetFramebufferPixels(pixels.get(), viewportRect); |
- |
- // If we didn't clear, the borders should still be green. |
- EXPECT_EQ(SK_ColorGREEN, pixels[0]); |
- EXPECT_EQ(SK_ColorGREEN, pixels[viewportPixels - 1]); |
- |
- EXPECT_EQ(SK_ColorMAGENTA, pixels[smallerRect.y() * viewportRect.width() + smallerRect.x()]); |
- EXPECT_EQ(SK_ColorMAGENTA, pixels[(smallerRect.bottom() - 1) * viewportRect.width() + smallerRect.right() - 1]); |
-} |
- |
-} // namespace |
-} // namespace cc |