| OLD | NEW |
| (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 "CCRenderPassTestCommon.h" | |
| 15 #include "CCSettings.h" | |
| 16 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread | |
| 17 #include "CCSolidColorDrawQuad.h" | |
| 18 #include "CCTestCommon.h" | |
| 19 #include "CCTileDrawQuad.h" | |
| 20 #include "FakeWebCompositorSoftwareOutputDevice.h" | |
| 21 #include "FakeWebCompositorOutputSurface.h" | |
| 22 #include "testing/gmock/include/gmock/gmock.h" | |
| 23 #include "testing/gtest/include/gtest/gtest.h" | |
| 24 #include <wtf/OwnArrayPtr.h> | |
| 25 | |
| 26 using namespace cc; | |
| 27 using namespace WebKit; | |
| 28 using namespace WebKitTests; | |
| 29 | |
| 30 namespace { | |
| 31 | |
| 32 class CCRendererSoftwareTest : public testing::Test, public CCRendererClient { | |
| 33 public: | |
| 34 void initializeRenderer() { | |
| 35 m_outputSurface = FakeWebCompositorOutputSurface::createSoftware(adoptPt
r(new FakeWebCompositorSoftwareOutputDevice)); | |
| 36 m_resourceProvider = CCResourceProvider::create(m_outputSurface.get()); | |
| 37 m_renderer = CCRendererSoftware::create(this, resourceProvider(), softwa
reDevice()); | |
| 38 } | |
| 39 | |
| 40 WebCompositorSoftwareOutputDevice* softwareDevice() const { return m_outputS
urface->softwareDevice(); } | |
| 41 FakeWebCompositorOutputSurface* outputSurface() const { return m_outputSurfa
ce.get(); } | |
| 42 CCResourceProvider* resourceProvider() const { return m_resourceProvider.get
(); } | |
| 43 CCRendererSoftware* renderer() const { return m_renderer.get(); } | |
| 44 void setViewportSize(IntSize viewportSize) { m_viewportSize = viewportSize;
} | |
| 45 | |
| 46 // CCRendererClient implementation. | |
| 47 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewpo
rtSize; } | |
| 48 virtual const CCLayerTreeSettings& settings() const OVERRIDE { return m_sett
ings; } | |
| 49 virtual void didLoseContext() OVERRIDE { } | |
| 50 virtual void onSwapBuffersComplete() OVERRIDE { } | |
| 51 virtual void setFullRootLayerDamage() OVERRIDE { } | |
| 52 virtual void releaseContentsTextures() OVERRIDE { } | |
| 53 virtual void setMemoryAllocationLimitBytes(size_t) OVERRIDE { } | |
| 54 | |
| 55 protected: | |
| 56 DebugScopedSetImplThread m_alwaysImplThread; | |
| 57 | |
| 58 scoped_ptr<FakeWebCompositorOutputSurface> m_outputSurface; | |
| 59 OwnPtr<CCResourceProvider> m_resourceProvider; | |
| 60 OwnPtr<CCRendererSoftware> m_renderer; | |
| 61 IntSize m_viewportSize; | |
| 62 CCLayerTreeSettings m_settings; | |
| 63 }; | |
| 64 | |
| 65 TEST_F(CCRendererSoftwareTest, solidColorQuad) | |
| 66 { | |
| 67 IntSize outerSize(100, 100); | |
| 68 int outerPixels = outerSize.width() * outerSize.height(); | |
| 69 IntSize innerSize(98, 98); | |
| 70 IntRect outerRect(IntPoint(), outerSize); | |
| 71 IntRect innerRect(IntPoint(1, 1), innerSize); | |
| 72 setViewportSize(outerSize); | |
| 73 | |
| 74 initializeRenderer(); | |
| 75 | |
| 76 scoped_ptr<CCSharedQuadState> sharedQuadState = CCSharedQuadState::create(We
bTransformationMatrix(), outerRect, outerRect, 1.0, true); | |
| 77 CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(1, 1); | |
| 78 scoped_ptr<CCRenderPass> rootRenderPass = CCTestRenderPass::create(rootRende
rPassId, outerRect, WebTransformationMatrix()); | |
| 79 CCTestRenderPass* testRenderPass = static_cast<CCTestRenderPass*>(rootRender
Pass.get()); | |
| 80 scoped_ptr<CCDrawQuad> outerQuad = CCSolidColorDrawQuad::create(sharedQuadSt
ate.get(), outerRect, SK_ColorYELLOW).PassAs<CCDrawQuad>(); | |
| 81 scoped_ptr<CCDrawQuad> innerQuad = CCSolidColorDrawQuad::create(sharedQuadSt
ate.get(), innerRect, SK_ColorCYAN).PassAs<CCDrawQuad>(); | |
| 82 testRenderPass->appendQuad(innerQuad.Pass()); | |
| 83 testRenderPass->appendQuad(outerQuad.Pass()); | |
| 84 | |
| 85 CCRenderPassList list; | |
| 86 CCRenderPassIdHashMap hashmap; | |
| 87 list.push_back(rootRenderPass.get()); | |
| 88 hashmap.add(rootRenderPassId, rootRenderPass.Pass()); | |
| 89 renderer()->drawFrame(list, hashmap); | |
| 90 | |
| 91 OwnArrayPtr<SkColor> pixels = adoptArrayPtr(new SkColor[deviceViewportSize()
.width() * deviceViewportSize().height()]); | |
| 92 renderer()->getFramebufferPixels(pixels.get(), outerRect); | |
| 93 | |
| 94 EXPECT_EQ(SK_ColorYELLOW, pixels[0]); | |
| 95 EXPECT_EQ(SK_ColorYELLOW, pixels[outerPixels - 1]); | |
| 96 EXPECT_EQ(SK_ColorCYAN, pixels[outerSize.width() + 1]); | |
| 97 EXPECT_EQ(SK_ColorCYAN, pixels[outerPixels - outerSize.width() - 2]); | |
| 98 } | |
| 99 | |
| 100 TEST_F(CCRendererSoftwareTest, tileQuad) | |
| 101 { | |
| 102 IntSize outerSize(100, 100); | |
| 103 int outerPixels = outerSize.width() * outerSize.height(); | |
| 104 IntSize innerSize(98, 98); | |
| 105 int innerPixels = innerSize.width() * innerSize.height(); | |
| 106 IntRect outerRect(IntPoint(), outerSize); | |
| 107 IntRect innerRect(IntPoint(1, 1), innerSize); | |
| 108 setViewportSize(outerSize); | |
| 109 initializeRenderer(); | |
| 110 | |
| 111 CCResourceProvider::ResourceId resourceYellow = resourceProvider()->createRe
source(1, outerSize, GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAn
y); | |
| 112 CCResourceProvider::ResourceId resourceCyan = resourceProvider()->createReso
urce(1, innerSize, GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny)
; | |
| 113 | |
| 114 SkColor yellow = SK_ColorYELLOW; | |
| 115 SkColor cyan = SK_ColorCYAN; | |
| 116 OwnArrayPtr<SkColor> yellowPixels = adoptArrayPtr(new SkColor[outerPixels]); | |
| 117 OwnArrayPtr<SkColor> cyanPixels = adoptArrayPtr(new SkColor[innerPixels]); | |
| 118 for (int i = 0; i < outerPixels; i++) | |
| 119 yellowPixels[i] = yellow; | |
| 120 for (int i = 0; i < innerPixels; i++) | |
| 121 cyanPixels[i] = cyan; | |
| 122 | |
| 123 resourceProvider()->upload(resourceYellow, reinterpret_cast<uint8_t*>(yellow
Pixels.get()), IntRect(IntPoint(), outerSize), IntRect(IntPoint(), outerSize), I
ntSize()); | |
| 124 resourceProvider()->upload(resourceCyan, reinterpret_cast<uint8_t*>(cyanPixe
ls.get()), IntRect(IntPoint(), innerSize), IntRect(IntPoint(), innerSize), IntSi
ze()); | |
| 125 | |
| 126 IntRect rect = IntRect(IntPoint(), deviceViewportSize()); | |
| 127 | |
| 128 scoped_ptr<CCSharedQuadState> sharedQuadState = CCSharedQuadState::create(We
bTransformationMatrix(), outerRect, outerRect, 1.0, true); | |
| 129 CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(1, 1); | |
| 130 scoped_ptr<CCRenderPass> rootRenderPass = CCTestRenderPass::create(rootRende
rPassId, IntRect(IntPoint(), deviceViewportSize()), WebTransformationMatrix()); | |
| 131 CCTestRenderPass* testRenderPass = static_cast<CCTestRenderPass*>(rootRender
Pass.get()); | |
| 132 scoped_ptr<CCDrawQuad> outerQuad = CCTileDrawQuad::create(sharedQuadState.ge
t(), outerRect, outerRect, resourceYellow, IntPoint(), outerSize, 0, false, fals
e, false, false, false).PassAs<CCDrawQuad>(); | |
| 133 scoped_ptr<CCDrawQuad> innerQuad = CCTileDrawQuad::create(sharedQuadState.ge
t(), innerRect, innerRect, resourceCyan, IntPoint(), innerSize, 0, false, false,
false, false, false).PassAs<CCDrawQuad>(); | |
| 134 testRenderPass->appendQuad(innerQuad.Pass()); | |
| 135 testRenderPass->appendQuad(outerQuad.Pass()); | |
| 136 | |
| 137 CCRenderPassList list; | |
| 138 CCRenderPassIdHashMap hashmap; | |
| 139 list.push_back(rootRenderPass.get()); | |
| 140 hashmap.add(rootRenderPassId, rootRenderPass.Pass()); | |
| 141 renderer()->drawFrame(list, hashmap); | |
| 142 | |
| 143 OwnArrayPtr<SkColor> pixels = adoptArrayPtr(new SkColor[deviceViewportSize()
.width() * deviceViewportSize().height()]); | |
| 144 renderer()->getFramebufferPixels(pixels.get(), outerRect); | |
| 145 | |
| 146 EXPECT_EQ(SK_ColorYELLOW, pixels[0]); | |
| 147 EXPECT_EQ(SK_ColorYELLOW, pixels[outerPixels - 1]); | |
| 148 EXPECT_EQ(SK_ColorCYAN, pixels[outerSize.width() + 1]); | |
| 149 EXPECT_EQ(SK_ColorCYAN, pixels[outerPixels - outerSize.width() - 2]); | |
| 150 } | |
| 151 | |
| 152 } // namespace | |
| OLD | NEW |