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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/CCRendererSoftware.cpp ('k') | cc/CCResourceProvider.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/CCRendererSoftwareTest.cpp
diff --git a/cc/CCRendererSoftwareTest.cpp b/cc/CCRendererSoftwareTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..fee24cd6963f03c97ef012e4e0bf1e6b1dc51d95
--- /dev/null
+++ b/cc/CCRendererSoftwareTest.cpp
@@ -0,0 +1,162 @@
+// 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 "config.h"
+
+#include "CCRendererSoftware.h"
+
+#include "CCAnimationTestCommon.h"
+#include "CCGeometryTestUtils.h"
+#include "CCQuadSink.h"
+#include "CCRenderPass.h"
+#include "CCRenderPassDrawQuad.h"
+#include "CCSettings.h"
+#include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread
+#include "CCSolidColorDrawQuad.h"
+#include "CCTestCommon.h"
+#include "CCTileDrawQuad.h"
+#include "FakeWebCompositorSoftwareOutputDevice.h"
+#include "FakeWebCompositorOutputSurface.h"
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include <wtf/OwnArrayPtr.h>
+
+using namespace cc;
+using namespace WebKit;
+using namespace WebKitTests;
+
+namespace {
+
+class CCRendererSoftwareTest : public testing::Test, public CCRendererClient {
+public:
+ void initializeRenderer() {
+ m_outputSurface = FakeWebCompositorOutputSurface::createSoftware(adoptPtr(new FakeWebCompositorSoftwareOutputDevice));
+ m_resourceProvider = CCResourceProvider::create(m_outputSurface.get());
+ m_renderer = CCRendererSoftware::create(this, resourceProvider(), softwareDevice());
+ }
+
+ WebCompositorSoftwareOutputDevice* softwareDevice() const { return m_outputSurface->softwareDevice(); }
+ FakeWebCompositorOutputSurface* outputSurface() const { return m_outputSurface.get(); }
+ CCResourceProvider* resourceProvider() const { return m_resourceProvider.get(); }
+ CCRendererSoftware* renderer() const { return m_renderer.get(); }
+ void setViewportSize(IntSize viewportSize) { m_viewportSize = viewportSize; }
+
+ // CCRendererClient implementation.
+ virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewportSize; }
+ virtual const CCLayerTreeSettings& settings() const OVERRIDE { return m_settings; }
+ virtual void didLoseContext() OVERRIDE { }
+ virtual void onSwapBuffersComplete() OVERRIDE { }
+ virtual void setFullRootLayerDamage() OVERRIDE { }
+ virtual void releaseContentsTextures() OVERRIDE { }
+ virtual void setMemoryAllocationLimitBytes(size_t) OVERRIDE { }
+
+protected:
+ DebugScopedSetImplThread m_alwaysImplThread;
+
+ OwnPtr<FakeWebCompositorOutputSurface> m_outputSurface;
+ OwnPtr<CCResourceProvider> m_resourceProvider;
+ OwnPtr<CCRendererSoftware> m_renderer;
+ IntSize m_viewportSize;
+ CCLayerTreeSettings m_settings;
+};
+
+class CCTestRenderPass : public CCRenderPass {
+public:
+ static PassOwnPtr<CCTestRenderPass> create(CCRenderPass::Id id, IntRect outputRect, const WebTransformationMatrix& rootTransform) { return adoptPtr(new CCTestRenderPass(id, outputRect, rootTransform)); }
+
+ void appendQuad(PassOwnPtr<CCDrawQuad> quad) { m_quadList.append(quad); }
+
+protected:
+ CCTestRenderPass(CCRenderPass::Id id, IntRect outputRect, const WebTransformationMatrix& rootTransform) : CCRenderPass(id, outputRect, rootTransform) { }
+};
+
+
+TEST_F(CCRendererSoftwareTest, solidColorQuad)
+{
+ IntSize outerSize(100, 100);
+ int outerPixels = outerSize.width() * outerSize.height();
+ IntSize innerSize(98, 98);
+ IntRect outerRect(IntPoint(), outerSize);
+ IntRect innerRect(IntPoint(1, 1), innerSize);
+ setViewportSize(outerSize);
+
+ initializeRenderer();
+
+ OwnPtr<CCSharedQuadState> sharedQuadState = CCSharedQuadState::create(WebTransformationMatrix(), outerRect, outerRect, 1.0, true);
+ CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(1, 1);
+ OwnPtr<CCRenderPass> rootRenderPass = CCTestRenderPass::create(rootRenderPassId, outerRect, WebTransformationMatrix());
+ CCTestRenderPass* testRenderPass = static_cast<CCTestRenderPass*>(rootRenderPass.get());
+ OwnPtr<CCDrawQuad> outerQuad = CCSolidColorDrawQuad::create(sharedQuadState.get(), outerRect, SK_ColorYELLOW);
+ OwnPtr<CCDrawQuad> innerQuad = CCSolidColorDrawQuad::create(sharedQuadState.get(), innerRect, SK_ColorCYAN);
+ testRenderPass->appendQuad(innerQuad.release());
+ testRenderPass->appendQuad(outerQuad.release());
+
+ CCRenderPassList list;
+ CCRenderPassIdHashMap hashmap;
+ list.append(rootRenderPass.get());
+ hashmap.add(rootRenderPassId, rootRenderPass.release());
+ renderer()->drawFrame(list, hashmap);
+
+ OwnArrayPtr<SkColor> pixels = adoptArrayPtr(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(CCRendererSoftwareTest, tileQuad)
+{
+ IntSize outerSize(100, 100);
+ int outerPixels = outerSize.width() * outerSize.height();
+ IntSize innerSize(98, 98);
+ int innerPixels = innerSize.width() * innerSize.height();
+ IntRect outerRect(IntPoint(), outerSize);
+ IntRect innerRect(IntPoint(1, 1), innerSize);
+ setViewportSize(outerSize);
+ initializeRenderer();
+
+ CCResourceProvider::ResourceId resourceYellow = resourceProvider()->createResource(1, outerSize, GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny);
+ CCResourceProvider::ResourceId resourceCyan = resourceProvider()->createResource(1, innerSize, GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny);
+
+ SkColor yellow = SK_ColorYELLOW;
+ SkColor cyan = SK_ColorCYAN;
+ OwnArrayPtr<SkColor> yellowPixels = adoptArrayPtr(new SkColor[outerPixels]);
+ OwnArrayPtr<SkColor> cyanPixels = adoptArrayPtr(new SkColor[innerPixels]);
+ for (int i = 0; i < outerPixels; i++)
+ yellowPixels[i] = yellow;
+ for (int i = 0; i < innerPixels; i++)
+ cyanPixels[i] = cyan;
+
+ resourceProvider()->upload(resourceYellow, reinterpret_cast<uint8_t*>(yellowPixels.get()), IntRect(IntPoint(), outerSize), IntRect(IntPoint(), outerSize), IntSize());
+ resourceProvider()->upload(resourceCyan, reinterpret_cast<uint8_t*>(cyanPixels.get()), IntRect(IntPoint(), innerSize), IntRect(IntPoint(), innerSize), IntSize());
+
+ IntRect rect = IntRect(IntPoint(), deviceViewportSize());
+
+ OwnPtr<CCSharedQuadState> sharedQuadState = CCSharedQuadState::create(WebTransformationMatrix(), outerRect, outerRect, 1.0, true);
+ CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(1, 1);
+ OwnPtr<CCRenderPass> rootRenderPass = CCTestRenderPass::create(rootRenderPassId, IntRect(IntPoint(), deviceViewportSize()), WebTransformationMatrix());
+ CCTestRenderPass* testRenderPass = static_cast<CCTestRenderPass*>(rootRenderPass.get());
+ OwnPtr<CCDrawQuad> outerQuad = CCTileDrawQuad::create(sharedQuadState.get(), outerRect, outerRect, resourceYellow, IntPoint(), outerSize, 0, false, false, false, false, false);
+ OwnPtr<CCDrawQuad> innerQuad = CCTileDrawQuad::create(sharedQuadState.get(), innerRect, innerRect, resourceCyan, IntPoint(), innerSize, 0, false, false, false, false, false);
+ testRenderPass->appendQuad(innerQuad.release());
+ testRenderPass->appendQuad(outerQuad.release());
+
+ CCRenderPassList list;
+ CCRenderPassIdHashMap hashmap;
+ list.append(rootRenderPass.get());
+ hashmap.add(rootRenderPassId, rootRenderPass.release());
+ renderer()->drawFrame(list, hashmap);
+
+ OwnArrayPtr<SkColor> pixels = adoptArrayPtr(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]);
+}
+
+} // namespace
« 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