diff options
author | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-18 01:13:49 +0000 |
---|---|---|
committer | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-18 01:13:49 +0000 |
commit | c7e95b41a0f80c8db514c221abe70044ae620edd (patch) | |
tree | 4e199452692946037b103aedeb0ac768e0d520b6 /cc/quad_culler_unittest.cc | |
parent | 739e2803109683fec6e24ecbca3ad16fde7b43c4 (diff) | |
download | chromium_src-c7e95b41a0f80c8db514c221abe70044ae620edd.zip chromium_src-c7e95b41a0f80c8db514c221abe70044ae620edd.tar.gz chromium_src-c7e95b41a0f80c8db514c221abe70044ae620edd.tar.bz2 |
cc: Chromify QuadSink, QuadCuller and test
R=jamesr@chromium.org
BUG=none
Review URL: https://chromiumcodereview.appspot.com/12911002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188662 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/quad_culler_unittest.cc')
-rw-r--r-- | cc/quad_culler_unittest.cc | 1172 |
1 files changed, 756 insertions, 416 deletions
diff --git a/cc/quad_culler_unittest.cc b/cc/quad_culler_unittest.cc index 20ab5e7..153a52e 100644 --- a/cc/quad_culler_unittest.cc +++ b/cc/quad_culler_unittest.cc @@ -22,463 +22,803 @@ namespace cc { namespace { class TestOcclusionTrackerImpl : public OcclusionTrackerImpl { -public: - TestOcclusionTrackerImpl(const gfx::Rect& scissorRectInScreen, bool recordMetricsForFrame = true) - : OcclusionTrackerImpl(scissorRectInScreen, recordMetricsForFrame) - , m_scissorRectInScreen(scissorRectInScreen) - { - } - -protected: - virtual gfx::Rect layerScissorRectInTargetSurface(const LayerImpl* layer) const { return m_scissorRectInScreen; } - -private: - gfx::Rect m_scissorRectInScreen; + public: + TestOcclusionTrackerImpl(gfx::Rect scissor_rect_in_screen, + bool record_metrics_for_frame = true) + : OcclusionTrackerImpl(scissor_rect_in_screen, record_metrics_for_frame), + scissor_rect_in_screen_(scissor_rect_in_screen) {} + + protected: + virtual gfx::Rect LayerScissorRectInTargetSurface( + const LayerImpl* layer) const { + return scissor_rect_in_screen_; + } + + private: + gfx::Rect scissor_rect_in_screen_; + + DISALLOW_COPY_AND_ASSIGN(TestOcclusionTrackerImpl); }; -typedef LayerIterator<LayerImpl, std::vector<LayerImpl*>, RenderSurfaceImpl, LayerIteratorActions::FrontToBack> LayerIteratorType; - -class QuadCullerTest : public testing::Test -{ -public: - QuadCullerTest() - : m_hostImpl(&m_proxy) - , layer_id_(1) - { - } - - scoped_ptr<TiledLayerImpl> makeLayer(TiledLayerImpl* parent, const gfx::Transform& drawTransform, const gfx::Rect& layerRect, float opacity, bool opaque, const gfx::Rect& layerOpaqueRect, std::vector<LayerImpl*>& surfaceLayerList) - { - scoped_ptr<TiledLayerImpl> layer = TiledLayerImpl::Create(m_hostImpl.active_tree(), layer_id_++); - scoped_ptr<LayerTilingData> tiler = LayerTilingData::create(gfx::Size(100, 100), LayerTilingData::NoBorderTexels); - tiler->setBounds(layerRect.size()); - layer->SetTilingData(*tiler); - layer->set_skips_draw(false); - layer->draw_properties().target_space_transform = drawTransform; - layer->draw_properties().screen_space_transform = drawTransform; - layer->draw_properties().visible_content_rect = layerRect; - layer->draw_properties().opacity = opacity; - layer->SetContentsOpaque(opaque); - layer->SetBounds(layerRect.size()); - layer->SetContentBounds(layerRect.size()); - - ResourceProvider::ResourceId resourceId = 1; - for (int i = 0; i < tiler->numTilesX(); ++i) - for (int j = 0; j < tiler->numTilesY(); ++j) { - gfx::Rect tileOpaqueRect = opaque ? tiler->tileBounds(i, j) : gfx::IntersectRects(tiler->tileBounds(i, j), layerOpaqueRect); - layer->PushTileProperties(i, j, resourceId++, tileOpaqueRect, false); - } - - gfx::Rect rectInTarget = MathUtil::mapClippedRect(layer->draw_transform(), layer->visible_content_rect()); - if (!parent) { - layer->CreateRenderSurface(); - layer->render_surface()->SetContentRect(rectInTarget); - surfaceLayerList.push_back(layer.get()); - layer->render_surface()->layer_list().push_back(layer.get()); - } else { - layer->draw_properties().render_target = parent->render_target(); - parent->render_surface()->layer_list().push_back(layer.get()); - rectInTarget.Union(MathUtil::mapClippedRect(parent->draw_transform(), parent->visible_content_rect())); - parent->render_surface()->SetContentRect(rectInTarget); - } - layer->draw_properties().drawable_content_rect = rectInTarget; - - return layer.Pass(); +typedef LayerIterator<LayerImpl, + std::vector<LayerImpl*>, + RenderSurfaceImpl, + LayerIteratorActions::FrontToBack> LayerIteratorType; + +class QuadCullerTest : public testing::Test { + public: + QuadCullerTest() + : host_impl_(&proxy_), + layer_id_(1) {} + + scoped_ptr<TiledLayerImpl> MakeLayer( + TiledLayerImpl* parent, + const gfx::Transform& draw_transform, + gfx::Rect layer_rect, + float opacity, + bool opaque, + gfx::Rect layer_opaque_rect, + std::vector<LayerImpl*>& surface_layer_list) { + scoped_ptr<TiledLayerImpl> layer = + TiledLayerImpl::Create(host_impl_.active_tree(), layer_id_++); + scoped_ptr<LayerTilingData> tiler = LayerTilingData::create( + gfx::Size(100, 100), LayerTilingData::NoBorderTexels); + tiler->setBounds(layer_rect.size()); + layer->SetTilingData(*tiler); + layer->set_skips_draw(false); + layer->draw_properties().target_space_transform = draw_transform; + layer->draw_properties().screen_space_transform = draw_transform; + layer->draw_properties().visible_content_rect = layer_rect; + layer->draw_properties().opacity = opacity; + layer->SetContentsOpaque(opaque); + layer->SetBounds(layer_rect.size()); + layer->SetContentBounds(layer_rect.size()); + + ResourceProvider::ResourceId resource_id = 1; + for (int i = 0; i < tiler->numTilesX(); ++i) { + for (int j = 0; j < tiler->numTilesY(); ++j) { + gfx::Rect tile_opaque_rect = + opaque + ? tiler->tileBounds(i, j) + : gfx::IntersectRects(tiler->tileBounds(i, j), layer_opaque_rect); + layer->PushTileProperties(i, j, resource_id++, tile_opaque_rect, false); + } } - void appendQuads(QuadList& quadList, SharedQuadStateList& sharedStateList, TiledLayerImpl* layer, LayerIteratorType& it, OcclusionTrackerImpl& occlusionTracker) - { - occlusionTracker.EnterLayer(it); - QuadCuller quadCuller(quadList, sharedStateList, layer, occlusionTracker, false, false); - AppendQuadsData data; - layer->AppendQuads(&quadCuller, &data); - occlusionTracker.LeaveLayer(it); - ++it; + gfx::Rect rect_in_target = MathUtil::mapClippedRect( + layer->draw_transform(), layer->visible_content_rect()); + if (!parent) { + layer->CreateRenderSurface(); + layer->render_surface()->SetContentRect(rect_in_target); + surface_layer_list.push_back(layer.get()); + layer->render_surface()->layer_list().push_back(layer.get()); + } else { + layer->draw_properties().render_target = parent->render_target(); + parent->render_surface()->layer_list().push_back(layer.get()); + rect_in_target.Union(MathUtil::mapClippedRect( + parent->draw_transform(), parent->visible_content_rect())); + parent->render_surface()->SetContentRect(rect_in_target); } - -protected: - FakeImplProxy m_proxy; - FakeLayerTreeHostImpl m_hostImpl; - int layer_id_; + layer->draw_properties().drawable_content_rect = rect_in_target; + + return layer.Pass(); + } + + void AppendQuads(QuadList& quad_list, + SharedQuadStateList& shared_state_list, + TiledLayerImpl* layer, + LayerIteratorType& it, + OcclusionTrackerImpl& occlusion_tracker) { + occlusion_tracker.EnterLayer(it); + QuadCuller quad_culler( + &quad_list, &shared_state_list, layer, occlusion_tracker, false, false); + AppendQuadsData data; + layer->AppendQuads(&quad_culler, &data); + occlusion_tracker.LeaveLayer(it); + ++it; + } + + protected: + FakeImplProxy proxy_; + FakeLayerTreeHostImpl host_impl_; + int layer_id_; + + DISALLOW_COPY_AND_ASSIGN(QuadCullerTest); }; -#define DECLARE_AND_INITIALIZE_TEST_QUADS \ - QuadList quadList; \ - SharedQuadStateList sharedStateList; \ - std::vector<LayerImpl*> renderSurfaceLayerList; \ - gfx::Transform childTransform; \ - gfx::Size rootSize = gfx::Size(300, 300); \ - gfx::Rect rootRect = gfx::Rect(rootSize); \ - gfx::Size childSize = gfx::Size(200, 200); \ - gfx::Rect childRect = gfx::Rect(childSize); - -TEST_F(QuadCullerTest, verifyNoCulling) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Transform(), childRect, 1, false, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 13u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 40000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); +#define DECLARE_AND_INITIALIZE_TEST_QUADS() \ + QuadList quad_list; \ + SharedQuadStateList shared_state_list; \ + std::vector<LayerImpl*> render_surface_layer_list; \ + gfx::Transform child_transform; \ + gfx::Size root_size = gfx::Size(300, 300); \ + gfx::Rect root_rect = gfx::Rect(root_size); \ + gfx::Size child_size = gfx::Size(200, 200); \ + gfx::Rect child_rect = gfx::Rect(child_size); + +TEST_F(QuadCullerTest, VerifyNoCulling) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + + scoped_ptr<TiledLayerImpl> root_layer = + MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + gfx::Transform(), + child_rect, + 1, + false, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(-100, -100, 1000, 1000)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 13u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), + 40000, + 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); } -TEST_F(QuadCullerTest, verifyCullChildLinesUpTopLeft) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Transform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 9u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 40000, 1); +TEST_F(QuadCullerTest, VerifyCullChildLinesUpTopLeft) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + + scoped_ptr<TiledLayerImpl> root_layer = + MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + gfx::Transform(), + child_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(-100, -100, 1000, 1000)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 9u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), + 40000, + 1); } -TEST_F(QuadCullerTest, verifyCullWhenChildOpacityNotOne) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 0.9f, true, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 13u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 40000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); +TEST_F(QuadCullerTest, VerifyCullWhenChildOpacityNotOne) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + + scoped_ptr<TiledLayerImpl> root_layer = + MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + child_transform, + child_rect, + 0.9f, + true, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(-100, -100, 1000, 1000)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 13u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), + 40000, + 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); } -TEST_F(QuadCullerTest, verifyCullWhenChildOpaqueFlagFalse) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, false, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 13u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 40000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); +TEST_F(QuadCullerTest, VerifyCullWhenChildOpaqueFlagFalse) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + + scoped_ptr<TiledLayerImpl> root_layer = + MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + child_transform, + child_rect, + 1, + false, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(-100, -100, 1000, 1000)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 13u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), + 40000, + 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); } -TEST_F(QuadCullerTest, verifyCullCenterTileOnly) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - childTransform.Translate(50, 50); - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - ASSERT_EQ(quadList.size(), 12u); - - gfx::Rect quadVisibleRect1 = quadList[5]->visible_rect; - EXPECT_EQ(quadVisibleRect1.height(), 50); - - gfx::Rect quadVisibleRect3 = quadList[7]->visible_rect; - EXPECT_EQ(quadVisibleRect3.width(), 50); - - // Next index is 8, not 9, since centre quad culled. - gfx::Rect quadVisibleRect4 = quadList[8]->visible_rect; - EXPECT_EQ(quadVisibleRect4.width(), 50); - EXPECT_EQ(quadVisibleRect4.x(), 250); - - gfx::Rect quadVisibleRect6 = quadList[10]->visible_rect; - EXPECT_EQ(quadVisibleRect6.height(), 50); - EXPECT_EQ(quadVisibleRect6.y(), 250); - - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 100000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 30000, 1); +TEST_F(QuadCullerTest, VerifyCullCenterTileOnly) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + + child_transform.Translate(50, 50); + scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + child_transform, + child_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(-100, -100, 1000, 1000)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + ASSERT_EQ(quad_list.size(), 12u); + + gfx::Rect quad_visible_rect1 = quad_list[5]->visible_rect; + EXPECT_EQ(quad_visible_rect1.height(), 50); + + gfx::Rect quad_visible_rect3 = quad_list[7]->visible_rect; + EXPECT_EQ(quad_visible_rect3.width(), 50); + + // Next index is 8, not 9, since centre quad culled. + gfx::Rect quad_visible_rect4 = quad_list[8]->visible_rect; + EXPECT_EQ(quad_visible_rect4.width(), 50); + EXPECT_EQ(quad_visible_rect4.x(), 250); + + gfx::Rect quad_visible_rect6 = quad_list[10]->visible_rect; + EXPECT_EQ(quad_visible_rect6.height(), 50); + EXPECT_EQ(quad_visible_rect6.y(), 250); + + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 100000, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), + 30000, + 1); } -TEST_F(QuadCullerTest, verifyCullCenterTileNonIntegralSize1) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - childTransform.Translate(100, 100); - - // Make the root layer's quad have extent (99.1, 99.1) -> (200.9, 200.9) to make - // sure it doesn't get culled due to transform rounding. - gfx::Transform rootTransform; - rootTransform.Translate(99.1, 99.1); - rootTransform.Scale(1.018, 1.018); - - rootRect = childRect = gfx::Rect(0, 0, 100, 100); - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, rootTransform, rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 2u); - - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 20363, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); +TEST_F(QuadCullerTest, VerifyCullCenterTileNonIntegralSize1) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + + child_transform.Translate(100, 100); + + // Make the root layer's quad have extent (99.1, 99.1) -> (200.9, 200.9) to + // make sure it doesn't get culled due to transform rounding. + gfx::Transform root_transform; + root_transform.Translate(99.1, 99.1); + root_transform.Scale(1.018, 1.018); + + root_rect = child_rect = gfx::Rect(0, 0, 100, 100); + + scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, + root_transform, + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + child_transform, + child_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(-100, -100, 1000, 1000)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 2u); + + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 20363, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); } -TEST_F(QuadCullerTest, verifyCullCenterTileNonIntegralSize2) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - // Make the child's quad slightly smaller than, and centred over, the root layer tile. - // Verify the child does not cause the quad below to be culled due to rounding. - childTransform.Translate(100.1, 100.1); - childTransform.Scale(0.982, 0.982); - - gfx::Transform rootTransform; - rootTransform.Translate(100, 100); - - rootRect = childRect = gfx::Rect(0, 0, 100, 100); - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, rootTransform, rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 2u); - - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 19643, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); +TEST_F(QuadCullerTest, VerifyCullCenterTileNonIntegralSize2) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + + // Make the child's quad slightly smaller than, and centred over, the root + // layer tile. Verify the child does not cause the quad below to be culled + // due to rounding. + child_transform.Translate(100.1, 100.1); + child_transform.Scale(0.982, 0.982); + + gfx::Transform root_transform; + root_transform.Translate(100, 100); + + root_rect = child_rect = gfx::Rect(0, 0, 100, 100); + + scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, + root_transform, + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + child_transform, + child_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(-100, -100, 1000, 1000)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 2u); + + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 19643, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); } -TEST_F(QuadCullerTest, verifyCullChildLinesUpBottomRight) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - childTransform.Translate(100, 100); - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 9u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 40000, 1); +TEST_F(QuadCullerTest, VerifyCullChildLinesUpBottomRight) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + + child_transform.Translate(100, 100); + scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + child_transform, + child_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(-100, -100, 1000, 1000)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 9u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), + 40000, + 1); } -TEST_F(QuadCullerTest, verifyCullSubRegion) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - childTransform.Translate(50, 50); - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - gfx::Rect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y() + childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 12u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 30000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 10000, 1); +TEST_F(QuadCullerTest, VerifyCullSubRegion) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + + child_transform.Translate(50, 50); + scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + gfx::Rect child_opaque_rect(child_rect.x() + child_rect.width() / 4, + child_rect.y() + child_rect.height() / 4, + child_rect.width() / 2, + child_rect.height() / 2); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + child_transform, + child_rect, + 1, + false, + child_opaque_rect, + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(-100, -100, 1000, 1000)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 12u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), + 30000, + 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), + 10000, + 1); } -TEST_F(QuadCullerTest, verifyCullSubRegion2) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - childTransform.Translate(50, 10); - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - gfx::Rect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y() + childRect.height() / 4, childRect.width() / 2, childRect.height() * 3 / 4); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 12u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 25000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 15000, 1); +TEST_F(QuadCullerTest, VerifyCullSubRegion2) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + + child_transform.Translate(50, 10); + scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + gfx::Rect child_opaque_rect(child_rect.x() + child_rect.width() / 4, + child_rect.y() + child_rect.height() / 4, + child_rect.width() / 2, + child_rect.height() * 3 / 4); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + child_transform, + child_rect, + 1, + false, + child_opaque_rect, + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(-100, -100, 1000, 1000)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 12u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), + 25000, + 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), + 15000, + 1); } -TEST_F(QuadCullerTest, verifyCullSubRegionCheckOvercull) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - childTransform.Translate(50, 49); - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - gfx::Rect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y() + childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, false, childOpaqueRect, renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 13u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 30000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 10000, 1); +TEST_F(QuadCullerTest, VerifyCullSubRegionCheckOvercull) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + + child_transform.Translate(50, 49); + scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + gfx::Rect child_opaque_rect(child_rect.x() + child_rect.width() / 4, + child_rect.y() + child_rect.height() / 4, + child_rect.width() / 2, + child_rect.height() / 2); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + child_transform, + child_rect, + 1, + false, + child_opaque_rect, + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(-100, -100, 1000, 1000)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 13u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), + 30000, + 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), + 10000, + 1); } -TEST_F(QuadCullerTest, verifyNonAxisAlignedQuadsDontOcclude) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - // Use a small rotation so as to not disturb the geometry significantly. - childTransform.Rotate(1); - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), childTransform, childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 13u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 130000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); +TEST_F(QuadCullerTest, VerifyNonAxisAlignedQuadsDontOcclude) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + + // Use a small rotation so as to not disturb the geometry significantly. + child_transform.Rotate(1); + + scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + child_transform, + child_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(-100, -100, 1000, 1000)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 13u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 130000, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); } -// This test requires some explanation: here we are rotating the quads to be culled. -// The 2x2 tile child layer remains in the top-left corner, unrotated, but the 3x3 -// tile parent layer is rotated by 1 degree. Of the four tiles the child would -// normally occlude, three will move (slightly) out from under the child layer, and -// one moves further under the child. Only this last tile should be culled. -TEST_F(QuadCullerTest, verifyNonAxisAlignedQuadsSafelyCulled) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - // Use a small rotation so as to not disturb the geometry significantly. - gfx::Transform parentTransform; - parentTransform.Rotate(1); - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, parentTransform, rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Transform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(-100, -100, 1000, 1000)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 12u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 100600, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 29400, 1); +// This test requires some explanation: here we are rotating the quads to be +// culled. The 2x2 tile child layer remains in the top-left corner, unrotated, +// but the 3x3 tile parent layer is rotated by 1 degree. Of the four tiles the +// child would normally occlude, three will move (slightly) out from under the +// child layer, and one moves further under the child. Only this last tile +// should be culled. +TEST_F(QuadCullerTest, VerifyNonAxisAlignedQuadsSafelyCulled) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + + // Use a small rotation so as to not disturb the geometry significantly. + gfx::Transform parent_transform; + parent_transform.Rotate(1); + + scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, + parent_transform, + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + gfx::Transform(), + child_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(-100, -100, 1000, 1000)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 12u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 100600, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), + 29400, + 1); } -TEST_F(QuadCullerTest, verifyCullOutsideScissorOverTile) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Transform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(200, 100, 100, 100)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 1u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 10000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 120000, 1); +TEST_F(QuadCullerTest, VerifyCullOutsideScissorOverTile) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + scoped_ptr<TiledLayerImpl> root_layer = + MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + gfx::Transform(), + child_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(200, 100, 100, 100)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 1u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 10000, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), + 120000, + 1); } -TEST_F(QuadCullerTest, verifyCullOutsideScissorOverCulledTile) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Transform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(100, 100, 100, 100)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 1u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 10000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 120000, 1); +TEST_F(QuadCullerTest, VerifyCullOutsideScissorOverCulledTile) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + scoped_ptr<TiledLayerImpl> root_layer = + MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + gfx::Transform(), + child_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(100, 100, 100, 100)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 1u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 10000, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), + 120000, + 1); } -TEST_F(QuadCullerTest, verifyCullOutsideScissorOverPartialTiles) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Transform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(50, 50, 200, 200)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 9u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 40000, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 90000, 1); +TEST_F(QuadCullerTest, VerifyCullOutsideScissorOverPartialTiles) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + scoped_ptr<TiledLayerImpl> root_layer = + MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + gfx::Transform(), + child_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(50, 50, 200, 200)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 9u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 40000, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), + 90000, + 1); } -TEST_F(QuadCullerTest, verifyCullOutsideScissorOverNoTiles) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Transform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(500, 500, 100, 100)); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 0u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 130000, 1); +TEST_F(QuadCullerTest, VerifyCullOutsideScissorOverNoTiles) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + scoped_ptr<TiledLayerImpl> root_layer = + MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + gfx::Transform(), + child_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(500, 500, 100, 100)); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 0u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 0, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); + EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), + 130000, + 1); } -TEST_F(QuadCullerTest, verifyWithoutMetrics) -{ - DECLARE_AND_INITIALIZE_TEST_QUADS - - scoped_ptr<TiledLayerImpl> rootLayer = makeLayer(0, gfx::Transform(), rootRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - scoped_ptr<TiledLayerImpl> childLayer = makeLayer(rootLayer.get(), gfx::Transform(), childRect, 1, true, gfx::Rect(), renderSurfaceLayerList); - TestOcclusionTrackerImpl occlusionTracker(gfx::Rect(50, 50, 200, 200), false); - LayerIteratorType it = LayerIteratorType::begin(&renderSurfaceLayerList); - - appendQuads(quadList, sharedStateList, childLayer.get(), it, occlusionTracker); - appendQuads(quadList, sharedStateList, rootLayer.get(), it, occlusionTracker); - EXPECT_EQ(quadList.size(), 9u); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_opaque(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); - EXPECT_NEAR(occlusionTracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); +TEST_F(QuadCullerTest, VerifyWithoutMetrics) { + DECLARE_AND_INITIALIZE_TEST_QUADS(); + scoped_ptr<TiledLayerImpl> root_layer = + MakeLayer(NULL, + gfx::Transform(), + root_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), + gfx::Transform(), + child_rect, + 1, + true, + gfx::Rect(), + render_surface_layer_list); + TestOcclusionTrackerImpl occlusion_tracker(gfx::Rect(50, 50, 200, 200), + false); + LayerIteratorType it = LayerIteratorType::begin(&render_surface_layer_list); + + AppendQuads( + quad_list, shared_state_list, child_layer.get(), it, occlusion_tracker); + AppendQuads( + quad_list, shared_state_list, root_layer.get(), it, occlusion_tracker); + EXPECT_EQ(quad_list.size(), 9u); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 0, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); + EXPECT_NEAR( + occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); } } // namespace |