15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2009 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/paint_aggregator.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, InitialState) { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(greg.HasPendingUpdate()); 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, SingleInvalidation) { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect rect(2, 4, 10, 16); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(rect); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(update.scroll_rect.IsEmpty()); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, update.paint_rects.size()); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(rect, update.paint_rects[0]); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, DoubleDisjointInvalidation) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect r1(2, 4, 2, 40); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect r2(4, 2, 40, 2); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(r1); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(r2); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect expected_bounds = gfx::UnionRects(r1, r2); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(update.scroll_rect.IsEmpty()); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, update.paint_rects.size()); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_bounds, update.GetPaintBounds()); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, DisjointInvalidationsCombined) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make the rectangles such that they don't overlap but cover a very large 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // percentage of the area of covered by their union. This is so we're not 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // very sensitive to the combining heuristic in the paint aggregator. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect r1(2, 4, 2, 1000); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect r2(5, 2, 2, 1000); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(r1); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(r2); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect expected_bounds = gfx::UnionRects(r1, r2); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(update.scroll_rect.IsEmpty()); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, update.paint_rects.size()); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_bounds, update.paint_rects[0]); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, SingleScroll) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect rect(1, 2, 3, 4); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d delta(1, 0); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(delta, rect); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(update.paint_rects.empty()); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(update.scroll_rect.IsEmpty()); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(rect, update.scroll_rect); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(delta.x(), update.scroll_delta.x()); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(delta.y(), update.scroll_delta.y()); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect resulting_damage = update.GetScrollDamage(); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect expected_damage(1, 2, 1, 4); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_damage, resulting_damage); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, DoubleOverlappingScroll) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect rect(1, 2, 3, 4); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d delta1(1, 0); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d delta2(1, 0); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(delta1, rect); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(delta2, rect); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(update.paint_rects.empty()); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(update.scroll_rect.IsEmpty()); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(rect, update.scroll_rect); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d expected_delta = delta1 + delta2; 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_delta.ToString(), update.scroll_delta.ToString()); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect resulting_damage = update.GetScrollDamage(); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect expected_damage(1, 2, 2, 4); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_damage, resulting_damage); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, NegatingScroll) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Scroll twice in opposite directions by equal amounts. The result 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should be no scrolling. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect rect(1, 2, 3, 4); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d delta1(1, 0); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d delta2(-1, 0); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(delta1, rect); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(delta2, rect); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(greg.HasPendingUpdate()); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, DiagonalScroll) { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We don't support optimized diagonal scrolling, so this should result in 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // repainting. 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect rect(1, 2, 3, 4); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d delta(1, 1); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(delta, rect); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(update.scroll_rect.IsEmpty()); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, update.paint_rects.size()); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(rect, update.paint_rects[0]); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, ContainedPaintAfterScroll) { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect scroll_rect(0, 0, 10, 10); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect(4, 4, 2, 2); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expecting a paint rect inside the scroll rect 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(update.scroll_rect.IsEmpty()); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, update.paint_rects.size()); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(scroll_rect, update.scroll_rect); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(paint_rect, update.paint_rects[0]); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, ContainedPaintBeforeScroll) { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect(4, 4, 2, 2); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect scroll_rect(0, 0, 10, 10); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expecting a paint rect inside the scroll rect 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(update.scroll_rect.IsEmpty()); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, update.paint_rects.size()); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) paint_rect.Offset(2, 0); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(scroll_rect, update.scroll_rect); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(paint_rect, update.paint_rects[0]); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, ContainedPaintsBeforeAndAfterScroll) { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect1(4, 4, 2, 2); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect1); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect scroll_rect(0, 0, 10, 10); 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect2(6, 4, 2, 2); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect2); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect expected_paint_rect = paint_rect2; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expecting a paint rect inside the scroll rect 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(update.scroll_rect.IsEmpty()); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, update.paint_rects.size()); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(scroll_rect, update.scroll_rect); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_paint_rect, update.paint_rects[0]); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, LargeContainedPaintAfterScroll) { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect scroll_rect(0, 0, 10, 10); 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(gfx::Vector2d(0, 1), scroll_rect); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect(0, 0, 10, 9); // Repaint 90% 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(update.scroll_rect.IsEmpty()); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, update.paint_rects.size()); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(scroll_rect, update.paint_rects[0]); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, LargeContainedPaintBeforeScroll) { 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect(0, 0, 10, 9); // Repaint 90% 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect scroll_rect(0, 0, 10, 10); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(gfx::Vector2d(0, 1), scroll_rect); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(update.scroll_rect.IsEmpty()); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, update.paint_rects.size()); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(scroll_rect, update.paint_rects[0]); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, OverlappingPaintBeforeScroll) { 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect(4, 4, 10, 2); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect scroll_rect(0, 0, 10, 10); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect expected_paint_rect = gfx::UnionRects(scroll_rect, paint_rect); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(update.scroll_rect.IsEmpty()); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, update.paint_rects.size()); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_paint_rect, update.paint_rects[0]); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, OverlappingPaintAfterScroll) { 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect scroll_rect(0, 0, 10, 10); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect(4, 4, 10, 2); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect expected_paint_rect = gfx::UnionRects(scroll_rect, paint_rect); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(update.scroll_rect.IsEmpty()); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, update.paint_rects.size()); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_paint_rect, update.paint_rects[0]); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, DisjointPaintBeforeScroll) { 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect(4, 4, 10, 2); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect scroll_rect(0, 0, 2, 10); 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(update.scroll_rect.IsEmpty()); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, update.paint_rects.size()); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(paint_rect, update.paint_rects[0]); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(scroll_rect, update.scroll_rect); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, DisjointPaintAfterScroll) { 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect scroll_rect(0, 0, 2, 10); 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect(4, 4, 10, 2); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(update.scroll_rect.IsEmpty()); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, update.paint_rects.size()); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(paint_rect, update.paint_rects[0]); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(scroll_rect, update.scroll_rect); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, ContainedPaintTrimmedByScroll) { 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect(4, 4, 6, 6); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect scroll_rect(0, 0, 10, 10); 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The paint rect should have become narrower. 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect expected_paint_rect(6, 4, 4, 6); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(update.scroll_rect.IsEmpty()); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, update.paint_rects.size()); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_paint_rect, update.paint_rects[0]); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(scroll_rect, update.scroll_rect); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, ContainedPaintEliminatedByScroll) { 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect(4, 4, 6, 6); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect scroll_rect(0, 0, 10, 10); 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(gfx::Vector2d(6, 0), scroll_rect); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(update.scroll_rect.IsEmpty()); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(update.paint_rects.empty()); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(scroll_rect, update.scroll_rect); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, ContainedPaintAfterScrollTrimmedByScrollDamage) { 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect scroll_rect(0, 0, 10, 10); 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(gfx::Vector2d(4, 0), scroll_rect); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect(2, 0, 4, 10); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect expected_scroll_damage(0, 0, 4, 10); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect expected_paint_rect(4, 0, 2, 10); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(update.scroll_rect.IsEmpty()); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, update.paint_rects.size()); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(scroll_rect, update.scroll_rect); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_scroll_damage, update.GetScrollDamage()); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_paint_rect, update.paint_rects[0]); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PaintAggregator, ContainedPaintAfterScrollEliminatedByScrollDamage) { 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator greg; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect scroll_rect(0, 0, 10, 10); 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) greg.ScrollRect(gfx::Vector2d(4, 0), scroll_rect); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect paint_rect(2, 0, 2, 10); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.InvalidateRect(paint_rect); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect expected_scroll_damage(0, 0, 4, 10); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(greg.HasPendingUpdate()); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PaintAggregator::PendingUpdate update; 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) greg.PopPendingUpdate(&update); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(update.scroll_rect.IsEmpty()); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(update.paint_rects.empty()); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(scroll_rect, update.scroll_rect); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_scroll_damage, update.GetScrollDamage()); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 440