template<typename LayerType, typename RenderSurfaceType>
CCOcclusionTrackerBase<LayerType, RenderSurfaceType>::CCOcclusionTrackerBase(IntRect scissorRectInScreenSpace)
: m_scissorRectInScreenSpace(scissorRectInScreenSpace)
- , m_surfaceDamageClient(0)
- , m_overdrawMetrics(CCOverdrawMetrics::create())
- , m_usePaintTracking(true) // FIXME: Remove this when paint tracking is on for paint culling.
-{
-}
-
-template<typename LayerType, typename RenderSurfaceType>
-CCOcclusionTrackerBase<LayerType, RenderSurfaceType>::CCOcclusionTrackerBase(IntRect scissorRectInScreenSpace, const DamageClientType* surfaceDamageClient)
- : m_scissorRectInScreenSpace(scissorRectInScreenSpace)
- , m_surfaceDamageClient(surfaceDamageClient)
, m_overdrawMetrics(CCOverdrawMetrics::create())
, m_usePaintTracking(true) // FIXME: Remove this when paint tracking is on for paint culling.
{
{
const RenderSurfaceType* targetSurface = m_stack.last().surface;
FloatRect totalScissor = targetSurface->contentRect();
- if (m_surfaceDamageClient)
- totalScissor.intersect(m_surfaceDamageClient->damageRect(targetSurface));
+ // FIXME: layer->clipRect() and layer->usesLayerClipping() is changing: https://bugs.webkit.org/show_bug.cgi?id=80622
if (!layer->clipRect().isEmpty())
totalScissor.intersect(layer->clipRect());
return enclosingIntRect(totalScissor);
// Declare the possible functions here for the linker.
template CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::CCOcclusionTrackerBase(IntRect scissorRectInScreenSpace);
-template CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::CCOcclusionTrackerBase(IntRect scissorRectInScreenSpace, const CCOcclusionTrackerDamageClient* surfaceDamageClient);
template void CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::enterTargetRenderSurface(const RenderSurfaceChromium* newTarget);
template void CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::finishedTargetRenderSurface(const LayerChromium* owningLayer, const RenderSurfaceChromium* finishedTarget);
template void CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::leaveToTargetRenderSurface(const RenderSurfaceChromium* newTarget);
template IntRect CCOcclusionTrackerBase<LayerChromium, RenderSurfaceChromium>::layerScissorRectInTargetSurface(const LayerChromium*) const;
template CCOcclusionTrackerBase<CCLayerImpl, CCRenderSurface>::CCOcclusionTrackerBase(IntRect scissorRectInScreenSpace);
-template CCOcclusionTrackerBase<CCLayerImpl, CCRenderSurface>::CCOcclusionTrackerBase(IntRect scissorRectInScreenSpace, const CCOcclusionTrackerDamageClientImpl* surfaceDamageClient);
template void CCOcclusionTrackerBase<CCLayerImpl, CCRenderSurface>::enterTargetRenderSurface(const CCRenderSurface* newTarget);
template void CCOcclusionTrackerBase<CCLayerImpl, CCRenderSurface>::finishedTargetRenderSurface(const CCLayerImpl* owningLayer, const CCRenderSurface* finishedTarget);
template void CCOcclusionTrackerBase<CCLayerImpl, CCRenderSurface>::leaveToTargetRenderSurface(const CCRenderSurface* newTarget);
{
}
- TestCCOcclusionTrackerBase(IntRect screenScissorRect, const CCOcclusionTrackerDamageClientBase<RenderSurfaceType>* damageClient)
- : CCOcclusionTrackerBase<LayerType, RenderSurfaceType>(screenScissorRect, damageClient)
- , m_overrideLayerScissorRect(false)
- {
- }
-
Region occlusionInScreenSpace() const { return CCOcclusionTrackerBase<LayerType, RenderSurfaceType>::m_stack.last().occlusionInScreen; }
Region occlusionInTargetSurface() const { return CCOcclusionTrackerBase<LayerType, RenderSurfaceType>::m_stack.last().occlusionInTarget; }
IntRect m_layerScissorRect;
};
-template<typename RenderSurfaceType>
-class TestDamageClient : public CCOcclusionTrackerDamageClientBase<RenderSurfaceType> {
-public:
- // The interface
- virtual FloatRect damageRect(const RenderSurfaceType*) const { return m_damageRect; }
-
- // Testing stuff
- TestDamageClient(const FloatRect& damageRect) : m_damageRect(damageRect) { }
- void setDamageRect(const FloatRect& damageRect) { m_damageRect = damageRect; }
-
-private:
- FloatRect m_damageRect;
-};
-
struct CCOcclusionTrackerTestMainThreadTypes {
typedef LayerChromium LayerType;
typedef RenderSurfaceChromium RenderSurfaceType;
ALL_CCOCCLUSIONTRACKER_TEST(CCOcclusionTrackerTestScreenScissorRectOutsideChild);
-template<class Types, bool opaqueLayers>
-class CCOcclusionTrackerTestDamageRectOutsideChild : public CCOcclusionTrackerTest<Types, opaqueLayers> {
-protected:
- void runMyTest()
- {
- typename Types::ContentLayerType* parent = this->createRoot(this->identityMatrix, FloatPoint(0, 0), IntSize(300, 300));
- typename Types::ContentLayerType* layer = this->createDrawingSurface(parent, this->identityMatrix, FloatPoint(0, 0), IntSize(200, 200), true);
- this->calcDrawEtc(parent);
-
- TestDamageClient<typename Types::RenderSurfaceType> damage(FloatRect(200, 100, 100, 100));
- TestCCOcclusionTrackerBase<typename Types::LayerType, typename Types::RenderSurfaceType> occlusion(IntRect(0, 0, 1000, 1000), &damage);
-
- occlusion.enterTargetRenderSurface(layer->renderSurface());
-
- EXPECT_TRUE(occlusion.unoccludedContentRect(layer, IntRect(0, 0, 200, 200)).isEmpty());
-
- occlusion.markOccludedBehindLayer(layer);
- occlusion.leaveToTargetRenderSurface(parent->renderSurface());
-
- EXPECT_EQ_RECT(IntRect(200, 100, 100, 100), occlusion.unoccludedContentRect(parent, IntRect(0, 0, 300, 300)));
- }
-};
-
-ALL_CCOCCLUSIONTRACKER_TEST(CCOcclusionTrackerTestDamageRectOutsideChild);
-
template<class Types, bool opaqueLayers>
class CCOcclusionTrackerTestLayerScissorRectOverChild : public CCOcclusionTrackerTest<Types, opaqueLayers> {
protected:
ALL_CCOCCLUSIONTRACKER_TEST(CCOcclusionTrackerTestScreenScissorRectOverChild);
-template<class Types, bool opaqueLayers>
-class CCOcclusionTrackerTestDamageRectOverChild : public CCOcclusionTrackerTest<Types, opaqueLayers> {
-protected:
- void runMyTest()
- {
- typename Types::ContentLayerType* parent = this->createRoot(this->identityMatrix, FloatPoint(0, 0), IntSize(300, 300));
- typename Types::ContentLayerType* layer = this->createDrawingSurface(parent, this->identityMatrix, FloatPoint(0, 0), IntSize(200, 200), true);
- this->calcDrawEtc(parent);
-
- TestDamageClient<typename Types::RenderSurfaceType> damage(FloatRect(100, 100, 100, 100));
- TestCCOcclusionTrackerBase<typename Types::LayerType, typename Types::RenderSurfaceType> occlusion(IntRect(0, 0, 1000, 1000), &damage);
-
- occlusion.enterTargetRenderSurface(layer->renderSurface());
-
- EXPECT_EQ_RECT(IntRect(100, 100, 100, 100), occlusion.unoccludedContentRect(layer, IntRect(0, 0, 200, 200)));
-
- occlusion.markOccludedBehindLayer(layer);
- occlusion.leaveToTargetRenderSurface(parent->renderSurface());
-
- EXPECT_TRUE(occlusion.unoccludedContentRect(parent, IntRect(0, 0, 300, 300)).isEmpty());
- }
-};
-
-ALL_CCOCCLUSIONTRACKER_TEST(CCOcclusionTrackerTestDamageRectOverChild);
-
template<class Types, bool opaqueLayers>
class CCOcclusionTrackerTestLayerScissorRectPartlyOverChild : public CCOcclusionTrackerTest<Types, opaqueLayers> {
protected:
ALL_CCOCCLUSIONTRACKER_TEST(CCOcclusionTrackerTestScreenScissorRectPartlyOverChild);
-template<class Types, bool opaqueLayers>
-class CCOcclusionTrackerTestDamageRectPartlyOverChild : public CCOcclusionTrackerTest<Types, opaqueLayers> {
-protected:
- void runMyTest()
- {
- typename Types::ContentLayerType* parent = this->createRoot(this->identityMatrix, FloatPoint(0, 0), IntSize(300, 300));
- typename Types::ContentLayerType* layer = this->createDrawingSurface(parent, this->identityMatrix, FloatPoint(0, 0), IntSize(200, 200), true);
- this->calcDrawEtc(parent);
-
- TestDamageClient<typename Types::RenderSurfaceType> damage(FloatRect(50, 50, 200, 200));
- TestCCOcclusionTrackerBase<typename Types::LayerType, typename Types::RenderSurfaceType> occlusion(IntRect(0, 0, 1000, 1000), &damage);
-
- occlusion.enterTargetRenderSurface(layer->renderSurface());
-
- EXPECT_EQ_RECT(IntRect(50, 50, 150, 150), occlusion.unoccludedContentRect(layer, IntRect(0, 0, 200, 200)));
-
- occlusion.markOccludedBehindLayer(layer);
- occlusion.leaveToTargetRenderSurface(parent->renderSurface());
-
- EXPECT_EQ_RECT(IntRect(50, 50, 200, 200), occlusion.unoccludedContentRect(parent, IntRect(0, 0, 300, 300)));
- }
-};
-
-ALL_CCOCCLUSIONTRACKER_TEST(CCOcclusionTrackerTestDamageRectPartlyOverChild);
-
template<class Types, bool opaqueLayers>
class CCOcclusionTrackerTestLayerScissorRectOverNothing : public CCOcclusionTrackerTest<Types, opaqueLayers> {
protected:
ALL_CCOCCLUSIONTRACKER_TEST(CCOcclusionTrackerTestScreenScissorRectOverNothing);
-template<class Types, bool opaqueLayers>
-class CCOcclusionTrackerTestDamageRectOverNothing : public CCOcclusionTrackerTest<Types, opaqueLayers> {
-protected:
- void runMyTest()
- {
- typename Types::ContentLayerType* parent = this->createRoot(this->identityMatrix, FloatPoint(0, 0), IntSize(300, 300));
- typename Types::ContentLayerType* layer = this->createDrawingSurface(parent, this->identityMatrix, FloatPoint(0, 0), IntSize(200, 200), true);
- this->calcDrawEtc(parent);
-
- TestDamageClient<typename Types::RenderSurfaceType> damage(FloatRect(500, 500, 100, 100));
- TestCCOcclusionTrackerBase<typename Types::LayerType, typename Types::RenderSurfaceType> occlusion(IntRect(0, 0, 1000, 1000), &damage);
-
- occlusion.enterTargetRenderSurface(layer->renderSurface());
-
- EXPECT_TRUE(occlusion.unoccludedContentRect(layer, IntRect(0, 0, 200, 200)).isEmpty());
-
- occlusion.markOccludedBehindLayer(layer);
- occlusion.leaveToTargetRenderSurface(parent->renderSurface());
-
- EXPECT_TRUE(occlusion.unoccludedContentRect(parent, IntRect(0, 0, 300, 300)).isEmpty());
- }
-};
-
-ALL_CCOCCLUSIONTRACKER_TEST(CCOcclusionTrackerTestDamageRectOverNothing);
-
template<class Types, bool opaqueLayers>
class CCOcclusionTrackerTestLayerScissorRectForLayerOffOrigin : public CCOcclusionTrackerTest<Types, opaqueLayers> {
protected: