diff options
author | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-12 19:40:56 +0000 |
---|---|---|
committer | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-12 19:40:56 +0000 |
commit | c79f147c0474a311a83829a44b55aaffa42c6237 (patch) | |
tree | 8bb41fcb74068042828da31c279b0d53dd0844fa /cc/render_surface_unittest.cc | |
parent | e62f2909e0aabf37131a65c7e50e85c1f07473f8 (diff) | |
download | chromium_src-c79f147c0474a311a83829a44b55aaffa42c6237.zip chromium_src-c79f147c0474a311a83829a44b55aaffa42c6237.tar.gz chromium_src-c79f147c0474a311a83829a44b55aaffa42c6237.tar.bz2 |
[cc] Change cc_tests.gyp filenames to Chromium style
BUG=155413
Review URL: https://codereview.chromium.org/11108020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@161642 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/render_surface_unittest.cc')
-rw-r--r-- | cc/render_surface_unittest.cc | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/cc/render_surface_unittest.cc b/cc/render_surface_unittest.cc new file mode 100644 index 0000000..c0cb19d --- /dev/null +++ b/cc/render_surface_unittest.cc @@ -0,0 +1,165 @@ +// Copyright 2011 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 "CCRenderSurface.h" + +#include "CCAppendQuadsData.h" +#include "CCLayerImpl.h" +#include "CCRenderPassSink.h" +#include "CCSharedQuadState.h" +#include "CCSingleThreadProxy.h" +#include "MockCCQuadCuller.h" +#include "cc/own_ptr_vector.h" +#include "cc/scoped_ptr_vector.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include <public/WebTransformationMatrix.h> + +using namespace cc; +using WebKit::WebTransformationMatrix; + +namespace { + +#define EXECUTE_AND_VERIFY_SURFACE_CHANGED(codeToTest) \ + renderSurface->resetPropertyChangedFlag(); \ + codeToTest; \ + EXPECT_TRUE(renderSurface->surfacePropertyChanged()) + +#define EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(codeToTest) \ + renderSurface->resetPropertyChangedFlag(); \ + codeToTest; \ + EXPECT_FALSE(renderSurface->surfacePropertyChanged()) + +TEST(CCRenderSurfaceTest, verifySurfaceChangesAreTrackedProperly) +{ + // + // This test checks that surfacePropertyChanged() has the correct behavior. + // + + // This will fake that we are on the correct thread for testing purposes. + DebugScopedSetImplThread setImplThread; + + scoped_ptr<CCLayerImpl> owningLayer = CCLayerImpl::create(1); + owningLayer->createRenderSurface(); + ASSERT_TRUE(owningLayer->renderSurface()); + CCRenderSurface* renderSurface = owningLayer->renderSurface(); + IntRect testRect = IntRect(IntPoint(3, 4), IntSize(5, 6)); + owningLayer->resetAllChangeTrackingForSubtree(); + + // Currently, the contentRect, clipRect, and owningLayer->layerPropertyChanged() are + // the only sources of change. + EXECUTE_AND_VERIFY_SURFACE_CHANGED(renderSurface->setClipRect(testRect)); + EXECUTE_AND_VERIFY_SURFACE_CHANGED(renderSurface->setContentRect(testRect)); + + owningLayer->setOpacity(0.5f); + EXPECT_TRUE(renderSurface->surfacePropertyChanged()); + owningLayer->resetAllChangeTrackingForSubtree(); + + // Setting the surface properties to the same values again should not be considered "change". + EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(renderSurface->setClipRect(testRect)); + EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(renderSurface->setContentRect(testRect)); + + scoped_ptr<CCLayerImpl> dummyMask = CCLayerImpl::create(1); + WebTransformationMatrix dummyMatrix; + dummyMatrix.translate(1.0, 2.0); + + // The rest of the surface properties are either internal and should not cause change, + // or they are already accounted for by the owninglayer->layerPropertyChanged(). + EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(renderSurface->setDrawOpacity(0.5)); + EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(renderSurface->setDrawTransform(dummyMatrix)); + EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(renderSurface->setReplicaDrawTransform(dummyMatrix)); + EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(renderSurface->clearLayerLists()); +} + +TEST(CCRenderSurfaceTest, sanityCheckSurfaceCreatesCorrectSharedQuadState) +{ + // This will fake that we are on the correct thread for testing purposes. + DebugScopedSetImplThread setImplThread; + + scoped_ptr<CCLayerImpl> rootLayer = CCLayerImpl::create(1); + + scoped_ptr<CCLayerImpl> owningLayer = CCLayerImpl::create(2); + owningLayer->createRenderSurface(); + ASSERT_TRUE(owningLayer->renderSurface()); + owningLayer->setRenderTarget(owningLayer.get()); + CCRenderSurface* renderSurface = owningLayer->renderSurface(); + + rootLayer->addChild(owningLayer.Pass()); + + IntRect contentRect = IntRect(IntPoint::zero(), IntSize(50, 50)); + IntRect clipRect = IntRect(IntPoint(5, 5), IntSize(40, 40)); + WebTransformationMatrix origin; + + origin.translate(30, 40); + + renderSurface->setDrawTransform(origin); + renderSurface->setContentRect(contentRect); + renderSurface->setClipRect(clipRect); + renderSurface->setDrawOpacity(1); + + CCQuadList quadList; + CCSharedQuadStateList sharedStateList; + MockCCQuadCuller mockQuadCuller(quadList, sharedStateList); + CCAppendQuadsData appendQuadsData; + + bool forReplica = false; + renderSurface->appendQuads(mockQuadCuller, appendQuadsData, forReplica, CCRenderPass::Id(2, 0)); + + ASSERT_EQ(1u, sharedStateList.size()); + CCSharedQuadState* sharedQuadState = sharedStateList[0]; + + EXPECT_EQ(30, sharedQuadState->quadTransform.m41()); + EXPECT_EQ(40, sharedQuadState->quadTransform.m42()); + EXPECT_EQ(contentRect, IntRect(sharedQuadState->visibleContentRect)); + EXPECT_EQ(1, sharedQuadState->opacity); + EXPECT_FALSE(sharedQuadState->opaque); +} + +class TestCCRenderPassSink : public CCRenderPassSink { +public: + virtual void appendRenderPass(scoped_ptr<CCRenderPass> renderPass) OVERRIDE { m_renderPasses.append(renderPass.Pass()); } + + const ScopedPtrVector<CCRenderPass>& renderPasses() const { return m_renderPasses; } + +private: + ScopedPtrVector<CCRenderPass> m_renderPasses; +}; + +TEST(CCRenderSurfaceTest, sanityCheckSurfaceCreatesCorrectRenderPass) +{ + // This will fake that we are on the correct thread for testing purposes. + DebugScopedSetImplThread setImplThread; + + scoped_ptr<CCLayerImpl> rootLayer = CCLayerImpl::create(1); + + scoped_ptr<CCLayerImpl> owningLayer = CCLayerImpl::create(2); + owningLayer->createRenderSurface(); + ASSERT_TRUE(owningLayer->renderSurface()); + owningLayer->setRenderTarget(owningLayer.get()); + CCRenderSurface* renderSurface = owningLayer->renderSurface(); + + rootLayer->addChild(owningLayer.Pass()); + + IntRect contentRect = IntRect(IntPoint::zero(), IntSize(50, 50)); + WebTransformationMatrix origin; + origin.translate(30, 40); + + renderSurface->setScreenSpaceTransform(origin); + renderSurface->setContentRect(contentRect); + + TestCCRenderPassSink passSink; + + renderSurface->appendRenderPasses(passSink); + + ASSERT_EQ(1u, passSink.renderPasses().size()); + CCRenderPass* pass = passSink.renderPasses()[0]; + + EXPECT_EQ(CCRenderPass::Id(2, 0), pass->id()); + EXPECT_EQ(contentRect, pass->outputRect()); + EXPECT_EQ(origin, pass->transformToRootTarget()); +} + +} // namespace |