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

Side by Side Diff: cc/software_renderer_unittest.cc

Issue 11967033: [CLOSED] In-browser software compositing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix the lack SkCanvas::clear scissoring. Created 7 years, 11 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/software_renderer.cc ('k') | cc/test/fake_layer_tree_host_client.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/software_renderer.h" 5 #include "cc/software_renderer.h"
6 6
7 #include "cc/compositor_frame_metadata.h" 7 #include "cc/compositor_frame_metadata.h"
8 #include "cc/quad_sink.h" 8 #include "cc/quad_sink.h"
9 #include "cc/render_pass.h" 9 #include "cc/render_pass.h"
10 #include "cc/render_pass_draw_quad.h" 10 #include "cc/render_pass_draw_quad.h"
11 #include "cc/software_output_device_impl.h"
11 #include "cc/solid_color_draw_quad.h" 12 #include "cc/solid_color_draw_quad.h"
12 #include "cc/test/animation_test_common.h" 13 #include "cc/test/animation_test_common.h"
13 #include "cc/test/fake_output_surface.h" 14 #include "cc/test/fake_output_surface.h"
14 #include "cc/test/fake_software_output_device.h"
15 #include "cc/test/geometry_test_utils.h" 15 #include "cc/test/geometry_test_utils.h"
16 #include "cc/test/render_pass_test_common.h" 16 #include "cc/test/render_pass_test_common.h"
17 #include "cc/test/render_pass_test_utils.h" 17 #include "cc/test/render_pass_test_utils.h"
18 #include "cc/tile_draw_quad.h" 18 #include "cc/tile_draw_quad.h"
19 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 21
22 using namespace WebKit; 22 using namespace WebKit;
23 23
24 namespace cc { 24 namespace cc {
25 namespace { 25 namespace {
26 26
27 class SoftwareRendererTest : public testing::Test, public RendererClient { 27 class SoftwareRendererTest : public testing::Test, public RendererClient {
28 public: 28 public:
29 SoftwareRendererTest() 29 SoftwareRendererTest()
30 : m_shouldClearRootRenderPass(true) 30 : m_shouldClearRootRenderPass(true)
31 { 31 {
32 } 32 }
33 33
34 void initializeRenderer() { 34 void initializeRenderer() {
35 m_outputSurface = FakeOutputSurface::CreateSoftware(scoped_ptr<SoftwareO utputDevice>(new FakeSoftwareOutputDevice)); 35 m_outputSurface = FakeOutputSurface::CreateSoftware(scoped_ptr<SoftwareO utputDevice>(new SoftwareOutputDeviceImpl));
36 m_resourceProvider = ResourceProvider::create(m_outputSurface.get()); 36 m_resourceProvider = ResourceProvider::create(m_outputSurface.get());
37 m_renderer = SoftwareRenderer::create(this, resourceProvider(), software Device()); 37 m_renderer = SoftwareRenderer::create(this, resourceProvider(), software Device());
38 } 38 }
39 39
40 SoftwareOutputDevice* softwareDevice() const { return m_outputSurface->Softw areDevice(); } 40 SoftwareOutputDevice* softwareDevice() const { return m_outputSurface->Softw areDevice(); }
41 FakeOutputSurface* outputSurface() const { return m_outputSurface.get(); } 41 FakeOutputSurface* outputSurface() const { return m_outputSurface.get(); }
42 ResourceProvider* resourceProvider() const { return m_resourceProvider.get() ; } 42 ResourceProvider* resourceProvider() const { return m_resourceProvider.get() ; }
43 SoftwareRenderer* renderer() const { return m_renderer.get(); } 43 SoftwareRenderer* renderer() const { return m_renderer.get(); }
44 void setViewportSize(const gfx::Size& viewportSize) { m_viewportSize = viewp ortSize; } 44 void setViewportSize(const gfx::Size& viewportSize) { m_viewportSize = viewp ortSize; }
45 void setShouldClearRootRenderPass(bool clearRootRenderPass) { m_shouldClearR ootRenderPass = clearRootRenderPass; } 45 void setShouldClearRootRenderPass(bool clearRootRenderPass) { m_shouldClearR ootRenderPass = clearRootRenderPass; }
(...skipping 18 matching lines...) Expand all
64 gfx::Size m_viewportSize; 64 gfx::Size m_viewportSize;
65 LayerTreeSettings m_settings; 65 LayerTreeSettings m_settings;
66 bool m_shouldClearRootRenderPass; 66 bool m_shouldClearRootRenderPass;
67 }; 67 };
68 68
69 TEST_F(SoftwareRendererTest, solidColorQuad) 69 TEST_F(SoftwareRendererTest, solidColorQuad)
70 { 70 {
71 gfx::Size outerSize(100, 100); 71 gfx::Size outerSize(100, 100);
72 int outerPixels = outerSize.width() * outerSize.height(); 72 int outerPixels = outerSize.width() * outerSize.height();
73 gfx::Size innerSize(98, 98); 73 gfx::Size innerSize(98, 98);
74 gfx::Rect outerRect(gfx::Point(), outerSize); 74 gfx::Rect outerRect(outerSize);
75 gfx::Rect innerRect(gfx::Point(1, 1), innerSize); 75 gfx::Rect innerRect(gfx::Point(1, 1), innerSize);
76 setViewportSize(outerSize); 76 setViewportSize(outerSize);
77 77
78 initializeRenderer(); 78 initializeRenderer();
79 79
80 scoped_ptr<SharedQuadState> sharedQuadState = SharedQuadState::Create(); 80 scoped_ptr<SharedQuadState> sharedQuadState = SharedQuadState::Create();
81 sharedQuadState->SetAll(gfx::Transform(), outerRect, outerRect, false, 1.0); 81 sharedQuadState->SetAll(gfx::Transform(), outerRect, outerRect, false, 1.0);
82 RenderPass::Id rootRenderPassId = RenderPass::Id(1, 1); 82 RenderPass::Id rootRenderPassId = RenderPass::Id(1, 1);
83 scoped_ptr<TestRenderPass> rootRenderPass = TestRenderPass::Create(); 83 scoped_ptr<TestRenderPass> rootRenderPass = TestRenderPass::Create();
84 rootRenderPass->SetNew(rootRenderPassId, outerRect, gfx::Rect(), gfx::Transf orm()); 84 rootRenderPass->SetNew(rootRenderPassId, outerRect, outerRect, gfx::Transfor m());
85 scoped_ptr<SolidColorDrawQuad> outerQuad = SolidColorDrawQuad::Create(); 85 scoped_ptr<SolidColorDrawQuad> outerQuad = SolidColorDrawQuad::Create();
86 outerQuad->SetNew(sharedQuadState.get(), outerRect, SK_ColorYELLOW); 86 outerQuad->SetNew(sharedQuadState.get(), outerRect, SK_ColorYELLOW);
87 scoped_ptr<SolidColorDrawQuad> innerQuad = SolidColorDrawQuad::Create(); 87 scoped_ptr<SolidColorDrawQuad> innerQuad = SolidColorDrawQuad::Create();
88 innerQuad->SetNew(sharedQuadState.get(), innerRect, SK_ColorCYAN); 88 innerQuad->SetNew(sharedQuadState.get(), innerRect, SK_ColorCYAN);
89 rootRenderPass->AppendQuad(innerQuad.PassAs<DrawQuad>()); 89 rootRenderPass->AppendQuad(innerQuad.PassAs<DrawQuad>());
90 rootRenderPass->AppendQuad(outerQuad.PassAs<DrawQuad>()); 90 rootRenderPass->AppendQuad(outerQuad.PassAs<DrawQuad>());
91 91
92 RenderPassList list; 92 RenderPassList list;
93 list.push_back(rootRenderPass.PassAs<RenderPass>()); 93 list.push_back(rootRenderPass.PassAs<RenderPass>());
94 renderer()->drawFrame(list); 94 renderer()->drawFrame(list);
(...skipping 12 matching lines...) Expand all
107 EXPECT_EQ(SK_ColorCYAN, pixels[outerPixels - outerSize.width() - 2]); 107 EXPECT_EQ(SK_ColorCYAN, pixels[outerPixels - outerSize.width() - 2]);
108 #endif 108 #endif
109 } 109 }
110 110
111 TEST_F(SoftwareRendererTest, tileQuad) 111 TEST_F(SoftwareRendererTest, tileQuad)
112 { 112 {
113 gfx::Size outerSize(100, 100); 113 gfx::Size outerSize(100, 100);
114 int outerPixels = outerSize.width() * outerSize.height(); 114 int outerPixels = outerSize.width() * outerSize.height();
115 gfx::Size innerSize(98, 98); 115 gfx::Size innerSize(98, 98);
116 int innerPixels = innerSize.width() * innerSize.height(); 116 int innerPixels = innerSize.width() * innerSize.height();
117 gfx::Rect outerRect(gfx::Point(), outerSize); 117 gfx::Rect outerRect(outerSize);
118 gfx::Rect innerRect(gfx::Point(1, 1), innerSize); 118 gfx::Rect innerRect(gfx::Point(1, 1), innerSize);
119 setViewportSize(outerSize); 119 setViewportSize(outerSize);
120 initializeRenderer(); 120 initializeRenderer();
121 121
122 ResourceProvider::ResourceId resourceYellow = resourceProvider()->createReso urce(outerSize, GL_RGBA, ResourceProvider::TextureUsageAny); 122 ResourceProvider::ResourceId resourceYellow = resourceProvider()->createReso urce(outerSize, GL_RGBA, ResourceProvider::TextureUsageAny);
123 ResourceProvider::ResourceId resourceCyan = resourceProvider()->createResour ce(innerSize, GL_RGBA, ResourceProvider::TextureUsageAny); 123 ResourceProvider::ResourceId resourceCyan = resourceProvider()->createResour ce(innerSize, GL_RGBA, ResourceProvider::TextureUsageAny);
124 124
125 SkColor yellow = SK_ColorYELLOW; 125 SkColor yellow = SK_ColorYELLOW;
126 SkColor cyan = SK_ColorCYAN; 126 SkColor cyan = SK_ColorCYAN;
127 scoped_array<SkColor> yellowPixels(new SkColor[outerPixels]); 127 scoped_array<SkColor> yellowPixels(new SkColor[outerPixels]);
128 scoped_array<SkColor> cyanPixels(new SkColor[innerPixels]); 128 scoped_array<SkColor> cyanPixels(new SkColor[innerPixels]);
129 for (int i = 0; i < outerPixels; i++) 129 for (int i = 0; i < outerPixels; i++)
130 yellowPixels[i] = yellow; 130 yellowPixels[i] = yellow;
131 for (int i = 0; i < innerPixels; i++) 131 for (int i = 0; i < innerPixels; i++)
132 cyanPixels[i] = cyan; 132 cyanPixels[i] = cyan;
133 133
134 resourceProvider()->setPixels(resourceYellow, reinterpret_cast<uint8_t*>(yel lowPixels.get()), gfx::Rect(gfx::Point(), outerSize), gfx::Rect(gfx::Point(), ou terSize), gfx::Vector2d()); 134 resourceProvider()->setPixels(resourceYellow, reinterpret_cast<uint8_t*>(yel lowPixels.get()), gfx::Rect(outerSize), gfx::Rect(outerSize), gfx::Vector2d());
135 resourceProvider()->setPixels(resourceCyan, reinterpret_cast<uint8_t*>(cyanP ixels.get()), gfx::Rect(gfx::Point(), innerSize), gfx::Rect(gfx::Point(), innerS ize), gfx::Vector2d()); 135 resourceProvider()->setPixels(resourceCyan, reinterpret_cast<uint8_t*>(cyanP ixels.get()), gfx::Rect(innerSize), gfx::Rect(innerSize), gfx::Vector2d());
136
137 gfx::Rect rect = gfx::Rect(gfx::Point(), deviceViewportSize());
138 136
139 scoped_ptr<SharedQuadState> sharedQuadState = SharedQuadState::Create(); 137 scoped_ptr<SharedQuadState> sharedQuadState = SharedQuadState::Create();
140 sharedQuadState->SetAll(gfx::Transform(), outerRect, outerRect, false, 1.0); 138 sharedQuadState->SetAll(gfx::Transform(), outerRect, outerRect, false, 1.0);
141 RenderPass::Id rootRenderPassId = RenderPass::Id(1, 1); 139 RenderPass::Id rootRenderPassId = RenderPass::Id(1, 1);
142 scoped_ptr<TestRenderPass> rootRenderPass = TestRenderPass::Create(); 140 scoped_ptr<TestRenderPass> rootRenderPass = TestRenderPass::Create();
143 rootRenderPass->SetNew(rootRenderPassId, gfx::Rect(gfx::Point(), deviceViewp ortSize()), gfx::Rect(), gfx::Transform()); 141 rootRenderPass->SetNew(rootRenderPassId, outerRect, outerRect, gfx::Transfor m());
144 scoped_ptr<TileDrawQuad> outerQuad = TileDrawQuad::Create(); 142 scoped_ptr<TileDrawQuad> outerQuad = TileDrawQuad::Create();
145 outerQuad->SetNew(sharedQuadState.get(), outerRect, outerRect, resourceYello w, gfx::RectF(gfx::PointF(), outerSize), outerSize, false, false, false, false, false); 143 outerQuad->SetNew(sharedQuadState.get(), outerRect, outerRect, resourceYello w, gfx::RectF(gfx::PointF(), outerSize), outerSize, false, false, false, false, false);
146 scoped_ptr<TileDrawQuad> innerQuad = TileDrawQuad::Create(); 144 scoped_ptr<TileDrawQuad> innerQuad = TileDrawQuad::Create();
147 innerQuad->SetNew(sharedQuadState.get(), innerRect, innerRect, resourceCyan, gfx::RectF(gfx::PointF(), innerSize), innerSize, false, false, false, false, fa lse); 145 innerQuad->SetNew(sharedQuadState.get(), innerRect, innerRect, resourceCyan, gfx::RectF(gfx::PointF(), innerSize), innerSize, false, false, false, false, fa lse);
148 rootRenderPass->AppendQuad(innerQuad.PassAs<DrawQuad>()); 146 rootRenderPass->AppendQuad(innerQuad.PassAs<DrawQuad>());
149 rootRenderPass->AppendQuad(outerQuad.PassAs<DrawQuad>()); 147 rootRenderPass->AppendQuad(outerQuad.PassAs<DrawQuad>());
150 148
151 RenderPassList list; 149 RenderPassList list;
152 list.push_back(rootRenderPass.PassAs<RenderPass>()); 150 list.push_back(rootRenderPass.PassAs<RenderPass>());
153 renderer()->drawFrame(list); 151 renderer()->drawFrame(list);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 // If we didn't clear, the borders should still be green. 198 // If we didn't clear, the borders should still be green.
201 EXPECT_EQ(SK_ColorGREEN, pixels[0]); 199 EXPECT_EQ(SK_ColorGREEN, pixels[0]);
202 EXPECT_EQ(SK_ColorGREEN, pixels[viewportPixels - 1]); 200 EXPECT_EQ(SK_ColorGREEN, pixels[viewportPixels - 1]);
203 201
204 EXPECT_EQ(SK_ColorMAGENTA, pixels[smallerRect.y() * viewportRect.width() + s mallerRect.x()]); 202 EXPECT_EQ(SK_ColorMAGENTA, pixels[smallerRect.y() * viewportRect.width() + s mallerRect.x()]);
205 EXPECT_EQ(SK_ColorMAGENTA, pixels[(smallerRect.bottom() - 1) * viewportRect. width() + smallerRect.right() - 1]); 203 EXPECT_EQ(SK_ColorMAGENTA, pixels[(smallerRect.bottom() - 1) * viewportRect. width() + smallerRect.right() - 1]);
206 } 204 }
207 205
208 } // namespace 206 } // namespace
209 } // namespace cc 207 } // namespace cc
OLDNEW
« no previous file with comments | « cc/software_renderer.cc ('k') | cc/test/fake_layer_tree_host_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698