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

Side by Side Diff: cc/CCRendererSoftwareTest.cpp

Issue 10918258: Add CC software renderer. (Closed) Base URL: http://git.chromium.org/chromium/src.git@gladapter
Patch Set: Fix license headers Created 8 years, 3 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
« no previous file with comments | « cc/CCRendererSoftware.cpp ('k') | cc/CCResourceProvider.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "config.h"
6
7 #include "CCRendererSoftware.h"
8
9 #include "CCAnimationTestCommon.h"
10 #include "CCGeometryTestUtils.h"
11 #include "CCQuadSink.h"
12 #include "CCRenderPass.h"
13 #include "CCRenderPassDrawQuad.h"
14 #include "CCSettings.h"
15 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread
16 #include "CCSolidColorDrawQuad.h"
17 #include "CCTestCommon.h"
18 #include "CCTileDrawQuad.h"
19 #include "FakeWebCompositorSoftwareOutputDevice.h"
20 #include "FakeWebCompositorOutputSurface.h"
21 #include <gmock/gmock.h>
22 #include <gtest/gtest.h>
23 #include <wtf/OwnArrayPtr.h>
24
25 using namespace cc;
26 using namespace WebKit;
27 using namespace WebKitTests;
28
29 namespace {
30
31 class CCRendererSoftwareTest : public testing::Test, public CCRendererClient {
32 public:
33 void initializeRenderer() {
34 m_outputSurface = FakeWebCompositorOutputSurface::createSoftware(adoptPt r(new FakeWebCompositorSoftwareOutputDevice));
35 m_resourceProvider = CCResourceProvider::create(m_outputSurface.get());
36 m_renderer = CCRendererSoftware::create(this, resourceProvider(), softwa reDevice());
37 }
38
39 WebCompositorSoftwareOutputDevice* softwareDevice() const { return m_outputS urface->softwareDevice(); }
40 FakeWebCompositorOutputSurface* outputSurface() const { return m_outputSurfa ce.get(); }
41 CCResourceProvider* resourceProvider() const { return m_resourceProvider.get (); }
42 CCRendererSoftware* renderer() const { return m_renderer.get(); }
43 void setViewportSize(IntSize viewportSize) { m_viewportSize = viewportSize; }
44
45 // CCRendererClient implementation.
46 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewpo rtSize; }
47 virtual const CCLayerTreeSettings& settings() const OVERRIDE { return m_sett ings; }
48 virtual void didLoseContext() OVERRIDE { }
49 virtual void onSwapBuffersComplete() OVERRIDE { }
50 virtual void setFullRootLayerDamage() OVERRIDE { }
51 virtual void releaseContentsTextures() OVERRIDE { }
52 virtual void setMemoryAllocationLimitBytes(size_t) OVERRIDE { }
53
54 protected:
55 DebugScopedSetImplThread m_alwaysImplThread;
56
57 OwnPtr<FakeWebCompositorOutputSurface> m_outputSurface;
58 OwnPtr<CCResourceProvider> m_resourceProvider;
59 OwnPtr<CCRendererSoftware> m_renderer;
60 IntSize m_viewportSize;
61 CCLayerTreeSettings m_settings;
62 };
63
64 class CCTestRenderPass : public CCRenderPass {
65 public:
66 static PassOwnPtr<CCTestRenderPass> create(CCRenderPass::Id id, IntRect outp utRect, const WebTransformationMatrix& rootTransform) { return adoptPtr(new CCTe stRenderPass(id, outputRect, rootTransform)); }
67
68 void appendQuad(PassOwnPtr<CCDrawQuad> quad) { m_quadList.append(quad); }
69
70 protected:
71 CCTestRenderPass(CCRenderPass::Id id, IntRect outputRect, const WebTransform ationMatrix& rootTransform) : CCRenderPass(id, outputRect, rootTransform) { }
72 };
73
74
75 TEST_F(CCRendererSoftwareTest, solidColorQuad)
76 {
77 IntSize outerSize(100, 100);
78 int outerPixels = outerSize.width() * outerSize.height();
79 IntSize innerSize(98, 98);
80 IntRect outerRect(IntPoint(), outerSize);
81 IntRect innerRect(IntPoint(1, 1), innerSize);
82 setViewportSize(outerSize);
83
84 initializeRenderer();
85
86 OwnPtr<CCSharedQuadState> sharedQuadState = CCSharedQuadState::create(WebTra nsformationMatrix(), outerRect, outerRect, 1.0, true);
87 CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(1, 1);
88 OwnPtr<CCRenderPass> rootRenderPass = CCTestRenderPass::create(rootRenderPas sId, outerRect, WebTransformationMatrix());
89 CCTestRenderPass* testRenderPass = static_cast<CCTestRenderPass*>(rootRender Pass.get());
90 OwnPtr<CCDrawQuad> outerQuad = CCSolidColorDrawQuad::create(sharedQuadState. get(), outerRect, SK_ColorYELLOW);
91 OwnPtr<CCDrawQuad> innerQuad = CCSolidColorDrawQuad::create(sharedQuadState. get(), innerRect, SK_ColorCYAN);
92 testRenderPass->appendQuad(innerQuad.release());
93 testRenderPass->appendQuad(outerQuad.release());
94
95 CCRenderPassList list;
96 CCRenderPassIdHashMap hashmap;
97 list.append(rootRenderPass.get());
98 hashmap.add(rootRenderPassId, rootRenderPass.release());
99 renderer()->drawFrame(list, hashmap);
100
101 OwnArrayPtr<SkColor> pixels = adoptArrayPtr(new SkColor[deviceViewportSize() .width() * deviceViewportSize().height()]);
102 renderer()->getFramebufferPixels(pixels.get(), outerRect);
103
104 EXPECT_EQ(SK_ColorYELLOW, pixels[0]);
105 EXPECT_EQ(SK_ColorYELLOW, pixels[outerPixels - 1]);
106 EXPECT_EQ(SK_ColorCYAN, pixels[outerSize.width() + 1]);
107 EXPECT_EQ(SK_ColorCYAN, pixels[outerPixels - outerSize.width() - 2]);
108 }
109
110 TEST_F(CCRendererSoftwareTest, tileQuad)
111 {
112 IntSize outerSize(100, 100);
113 int outerPixels = outerSize.width() * outerSize.height();
114 IntSize innerSize(98, 98);
115 int innerPixels = innerSize.width() * innerSize.height();
116 IntRect outerRect(IntPoint(), outerSize);
117 IntRect innerRect(IntPoint(1, 1), innerSize);
118 setViewportSize(outerSize);
119 initializeRenderer();
120
121 CCResourceProvider::ResourceId resourceYellow = resourceProvider()->createRe source(1, outerSize, GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAn y);
122 CCResourceProvider::ResourceId resourceCyan = resourceProvider()->createReso urce(1, innerSize, GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny) ;
123
124 SkColor yellow = SK_ColorYELLOW;
125 SkColor cyan = SK_ColorCYAN;
126 OwnArrayPtr<SkColor> yellowPixels = adoptArrayPtr(new SkColor[outerPixels]);
127 OwnArrayPtr<SkColor> cyanPixels = adoptArrayPtr(new SkColor[innerPixels]);
128 for (int i = 0; i < outerPixels; i++)
129 yellowPixels[i] = yellow;
130 for (int i = 0; i < innerPixels; i++)
131 cyanPixels[i] = cyan;
132
133 resourceProvider()->upload(resourceYellow, reinterpret_cast<uint8_t*>(yellow Pixels.get()), IntRect(IntPoint(), outerSize), IntRect(IntPoint(), outerSize), I ntSize());
134 resourceProvider()->upload(resourceCyan, reinterpret_cast<uint8_t*>(cyanPixe ls.get()), IntRect(IntPoint(), innerSize), IntRect(IntPoint(), innerSize), IntSi ze());
135
136 IntRect rect = IntRect(IntPoint(), deviceViewportSize());
137
138 OwnPtr<CCSharedQuadState> sharedQuadState = CCSharedQuadState::create(WebTra nsformationMatrix(), outerRect, outerRect, 1.0, true);
139 CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(1, 1);
140 OwnPtr<CCRenderPass> rootRenderPass = CCTestRenderPass::create(rootRenderPas sId, IntRect(IntPoint(), deviceViewportSize()), WebTransformationMatrix());
141 CCTestRenderPass* testRenderPass = static_cast<CCTestRenderPass*>(rootRender Pass.get());
142 OwnPtr<CCDrawQuad> outerQuad = CCTileDrawQuad::create(sharedQuadState.get(), outerRect, outerRect, resourceYellow, IntPoint(), outerSize, 0, false, false, f alse, false, false);
143 OwnPtr<CCDrawQuad> innerQuad = CCTileDrawQuad::create(sharedQuadState.get(), innerRect, innerRect, resourceCyan, IntPoint(), innerSize, 0, false, false, fal se, false, false);
144 testRenderPass->appendQuad(innerQuad.release());
145 testRenderPass->appendQuad(outerQuad.release());
146
147 CCRenderPassList list;
148 CCRenderPassIdHashMap hashmap;
149 list.append(rootRenderPass.get());
150 hashmap.add(rootRenderPassId, rootRenderPass.release());
151 renderer()->drawFrame(list, hashmap);
152
153 OwnArrayPtr<SkColor> pixels = adoptArrayPtr(new SkColor[deviceViewportSize() .width() * deviceViewportSize().height()]);
154 renderer()->getFramebufferPixels(pixels.get(), outerRect);
155
156 EXPECT_EQ(SK_ColorYELLOW, pixels[0]);
157 EXPECT_EQ(SK_ColorYELLOW, pixels[outerPixels - 1]);
158 EXPECT_EQ(SK_ColorCYAN, pixels[outerSize.width() + 1]);
159 EXPECT_EQ(SK_ColorCYAN, pixels[outerPixels - outerSize.width() - 2]);
160 }
161
162 } // namespace
OLDNEW
« no previous file with comments | « cc/CCRendererSoftware.cpp ('k') | cc/CCResourceProvider.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698