CCRenderSurfaceTest.cpp [plain text]
#include "config.h"
#include "cc/CCRenderSurface.h"
#include "TransformationMatrix.h"
#include "cc/CCLayerImpl.h"
#include "cc/CCSharedQuadState.h"
#include "cc/CCSingleThreadProxy.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
using namespace WebCore;
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)
{
DebugScopedSetImplThread setImplThread;
OwnPtr<CCLayerImpl> owningLayer = CCLayerImpl::create(0);
owningLayer->createRenderSurface();
ASSERT_TRUE(owningLayer->renderSurface());
CCRenderSurface* renderSurface = owningLayer->renderSurface();
IntRect testRect = IntRect(IntPoint(3, 4), IntSize(5, 6));
owningLayer->resetAllChangeTrackingForSubtree();
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();
EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(renderSurface->setClipRect(testRect));
EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(renderSurface->setContentRect(testRect));
OwnPtr<CCLayerImpl> dummyMask = CCLayerImpl::create(1);
TransformationMatrix dummyMatrix;
dummyMatrix.translate(1.0, 2.0);
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->setOriginTransform(dummyMatrix));
EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(renderSurface->setSkipsDraw(true));
EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(renderSurface->clearLayerList());
EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(renderSurface->setMaskLayer(dummyMask.get()));
}
TEST(CCRenderSurfaceTest, sanityCheckSurfaceCreatesCorrectSharedQuadState)
{
DebugScopedSetImplThread setImplThread;
OwnPtr<CCLayerImpl> owningLayer = CCLayerImpl::create(0);
owningLayer->createRenderSurface();
ASSERT_TRUE(owningLayer->renderSurface());
CCRenderSurface* renderSurface = owningLayer->renderSurface();
IntRect contentRect = IntRect(IntPoint::zero(), IntSize(50, 50));
IntRect clipRect = IntRect(IntPoint(5, 5), IntSize(40, 40));
TransformationMatrix draw;
TransformationMatrix origin;
draw.translate(30, 40);
renderSurface->setDrawTransform(draw);
renderSurface->setOriginTransform(origin);
renderSurface->setContentRect(contentRect);
renderSurface->setClipRect(clipRect);
renderSurface->setDrawOpacity(1);
OwnPtr<CCSharedQuadState> sharedQuadState = renderSurface->createSharedQuadState();
EXPECT_TRUE(sharedQuadState->quadTransform().isIdentity());
EXPECT_EQ(30, sharedQuadState->layerTransform().m41());
EXPECT_EQ(40, sharedQuadState->layerTransform().m42());
EXPECT_EQ(contentRect, sharedQuadState->layerRect());
EXPECT_EQ(clipRect, sharedQuadState->clipRect());
EXPECT_EQ(1, sharedQuadState->opacity());
EXPECT_FALSE(sharedQuadState->isOpaque());
}
}