summaryrefslogtreecommitdiffstats
path: root/cc/render_surface_unittest.cc
diff options
context:
space:
mode:
authorenne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-12 19:40:56 +0000
committerenne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-12 19:40:56 +0000
commitc79f147c0474a311a83829a44b55aaffa42c6237 (patch)
tree8bb41fcb74068042828da31c279b0d53dd0844fa /cc/render_surface_unittest.cc
parente62f2909e0aabf37131a65c7e50e85c1f07473f8 (diff)
downloadchromium_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.cc165
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