Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: cc/layer_tree_host_unittest.cc

Issue 11464041: cc: Don't use partial updates for scrollbars when they are not allowed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | cc/scrollbar_layer.h » ('j') | cc/scrollbar_layer.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/layer_tree_host.h" 5 #include "cc/layer_tree_host.h"
6 6
7 #include "base/synchronization/lock.h" 7 #include "base/synchronization/lock.h"
8 #include "cc/content_layer.h" 8 #include "cc/content_layer.h"
9 #include "cc/content_layer_client.h" 9 #include "cc/content_layer_client.h"
10 #include "cc/layer_impl.h" 10 #include "cc/layer_impl.h"
11 #include "cc/layer_tree_host_impl.h" 11 #include "cc/layer_tree_host_impl.h"
12 #include "cc/layer_tree_impl.h" 12 #include "cc/layer_tree_impl.h"
13 #include "cc/output_surface.h" 13 #include "cc/output_surface.h"
14 #include "cc/scrollbar_layer.h"
14 #include "cc/single_thread_proxy.h" 15 #include "cc/single_thread_proxy.h"
15 #include "cc/test/fake_content_layer_client.h" 16 #include "cc/test/fake_content_layer_client.h"
16 #include "cc/test/fake_layer_tree_host_client.h" 17 #include "cc/test/fake_layer_tree_host_client.h"
17 #include "cc/test/fake_output_surface.h" 18 #include "cc/test/fake_output_surface.h"
18 #include "cc/test/fake_proxy.h" 19 #include "cc/test/fake_proxy.h"
20 #include "cc/test/fake_scrollbar_theme_painter.h"
21 #include "cc/test/fake_web_scrollbar.h"
22 #include "cc/test/fake_web_scrollbar_theme_geometry.h"
19 #include "cc/test/geometry_test_utils.h" 23 #include "cc/test/geometry_test_utils.h"
20 #include "cc/test/layer_tree_test_common.h" 24 #include "cc/test/layer_tree_test_common.h"
21 #include "cc/test/occlusion_tracker_test_common.h" 25 #include "cc/test/occlusion_tracker_test_common.h"
22 #include "cc/resource_update_queue.h" 26 #include "cc/resource_update_queue.h"
23 #include "cc/timing_function.h" 27 #include "cc/timing_function.h"
24 #include "testing/gmock/include/gmock/gmock.h" 28 #include "testing/gmock/include/gmock/gmock.h"
25 #include "third_party/khronos/GLES2/gl2.h" 29 #include "third_party/khronos/GLES2/gl2.h"
26 #include "third_party/khronos/GLES2/gl2ext.h" 30 #include "third_party/khronos/GLES2/gl2ext.h"
27 #include "ui/gfx/point_conversions.h" 31 #include "ui/gfx/point_conversions.h"
28 #include "ui/gfx/size_conversions.h" 32 #include "ui/gfx/size_conversions.h"
(...skipping 1136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 setBounds(gfx::Size(10, 10)); 1169 setBounds(gfx::Size(10, 10));
1166 setIsDrawable(true); 1170 setIsDrawable(true);
1167 } 1171 }
1168 virtual ~ContentLayerWithUpdateTracking() 1172 virtual ~ContentLayerWithUpdateTracking()
1169 { 1173 {
1170 } 1174 }
1171 1175
1172 int m_paintContentsCount; 1176 int m_paintContentsCount;
1173 }; 1177 };
1174 1178
1179 class ScrollbarLayerWithUpdateTracking : public ScrollbarLayer {
1180 public:
1181 static scoped_refptr<ScrollbarLayerWithUpdateTracking> create(int scrollLaye rId, bool paintContentsDuringUpdate)
1182 {
1183 return make_scoped_refptr(new ScrollbarLayerWithUpdateTracking(scrollLay erId, paintContentsDuringUpdate));
1184 }
1185
1186 int updateCount() { return m_updateCount; }
1187 void resetUpdateCount() { m_updateCount = 0; }
1188
1189 virtual void update(ResourceUpdateQueue& queue, const OcclusionTracker* occl usion, RenderingStats& stats) OVERRIDE
1190 {
1191 ScrollbarLayer::update(queue, occlusion, stats);
1192 m_updateCount++;
1193 }
1194
1195 private:
1196 explicit ScrollbarLayerWithUpdateTracking(int scrollLayerId, bool paintConte ntsDuringUpdate)
1197 : ScrollbarLayer(
1198 FakeWebScrollbar::create().PassAs<WebKit::WebScrollbar>(),
1199 FakeScrollbarThemePainter::Create(paintContentsDuringUpdate).PassAs< ScrollbarThemePainter>(),
1200 FakeWebScrollbarThemeGeometry::create().PassAs<WebKit::WebScrollbarT hemeGeometry>(),
1201 scrollLayerId)
1202 , m_updateCount(0)
1203 {
1204 setAnchorPoint(gfx::PointF(0, 0));
1205 setBounds(gfx::Size(10, 10));
1206 setIsDrawable(true);
1207 }
1208 virtual ~ScrollbarLayerWithUpdateTracking()
1209 {
1210 }
1211
1212 int m_updateCount;
1213 };
1214
1175 // Layer opacity change during paint should not prevent compositor resources fro m being updated during commit. 1215 // Layer opacity change during paint should not prevent compositor resources fro m being updated during commit.
1176 class LayerTreeHostTestOpacityChange : public LayerTreeHostTest { 1216 class LayerTreeHostTestOpacityChange : public LayerTreeHostTest {
1177 public: 1217 public:
1178 LayerTreeHostTestOpacityChange() 1218 LayerTreeHostTestOpacityChange()
1179 : m_testOpacityChangeDelegate() 1219 : m_testOpacityChangeDelegate()
1180 , m_updateCheckLayer(ContentLayerWithUpdateTracking::create(&m_testOpaci tyChangeDelegate)) 1220 , m_updateCheckLayer(ContentLayerWithUpdateTracking::create(&m_testOpaci tyChangeDelegate))
1181 { 1221 {
1182 m_testOpacityChangeDelegate.setTestLayer(m_updateCheckLayer.get()); 1222 m_testOpacityChangeDelegate.setTestLayer(m_updateCheckLayer.get());
1183 } 1223 }
1184 1224
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
1391 TEST_F(LayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers, FLAKY_runMulti Thread) 1431 TEST_F(LayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers, FLAKY_runMulti Thread)
1392 { 1432 {
1393 runTest(true); 1433 runTest(true);
1394 } 1434 }
1395 1435
1396 // Verify atomicity of commits and reuse of textures. 1436 // Verify atomicity of commits and reuse of textures.
1397 class LayerTreeHostTestAtomicCommit : public LayerTreeHostTest { 1437 class LayerTreeHostTestAtomicCommit : public LayerTreeHostTest {
1398 public: 1438 public:
1399 LayerTreeHostTestAtomicCommit() 1439 LayerTreeHostTestAtomicCommit()
1400 : m_layer(ContentLayerWithUpdateTracking::create(&m_client)) 1440 : m_layer(ContentLayerWithUpdateTracking::create(&m_client))
1441 , m_scrollbar(ScrollbarLayerWithUpdateTracking::create(m_layer->id(), tr ue))
1401 { 1442 {
1402 // Make sure partial texture updates are turned off. 1443 // Make sure partial texture updates are turned off.
1403 m_settings.maxPartialTextureUpdates = 0; 1444 m_settings.maxPartialTextureUpdates = 0;
1404 } 1445 }
1405 1446
1406 virtual void beginTest() OVERRIDE 1447 virtual void beginTest() OVERRIDE
1407 { 1448 {
1449 m_layer->addChild(m_scrollbar);
1408 m_layerTreeHost->setRootLayer(m_layer); 1450 m_layerTreeHost->setRootLayer(m_layer);
1409 m_layerTreeHost->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); 1451 m_layerTreeHost->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10));
1410 1452
1411 ASSERT_TRUE(m_layerTreeHost->initializeRendererIfNeeded()); 1453 ASSERT_TRUE(m_layerTreeHost->initializeRendererIfNeeded());
1412 ResourceUpdateQueue queue; 1454 ResourceUpdateQueue queue;
1413 m_layerTreeHost->updateLayers(queue, std::numeric_limits<size_t>::max()) ; 1455 m_layerTreeHost->updateLayers(queue, std::numeric_limits<size_t>::max()) ;
1414 postSetNeedsCommitToMainThread(); 1456 postSetNeedsCommitToMainThread();
1415 postSetNeedsRedrawToMainThread(); 1457 postSetNeedsRedrawToMainThread();
1416 } 1458 }
1417 1459
1418 virtual void commitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE 1460 virtual void commitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE
1419 { 1461 {
1420 CompositorFakeWebGraphicsContext3DWithTextureTracking* context = static_ cast<CompositorFakeWebGraphicsContext3DWithTextureTracking*>(impl->outputSurface ()->Context3D()); 1462 CompositorFakeWebGraphicsContext3DWithTextureTracking* context = static_ cast<CompositorFakeWebGraphicsContext3DWithTextureTracking*>(impl->outputSurface ()->Context3D());
1421 1463
1422 switch (impl->activeTree()->source_frame_number()) { 1464 switch (impl->activeTree()->source_frame_number()) {
1423 case 0: 1465 case 0:
1424 // Number of textures should be one. 1466 // Number of textures should be one for each layer
1425 ASSERT_EQ(1, context->numTextures()); 1467 ASSERT_EQ(2, context->numTextures());
1426 // Number of textures used for commit should be one. 1468 // Number of textures used for commit should be one for each layer.
1427 EXPECT_EQ(1, context->numUsedTextures()); 1469 EXPECT_EQ(2, context->numUsedTextures());
1428 // Verify that used texture is correct. 1470 // Verify that used texture is correct.
1429 EXPECT_TRUE(context->usedTexture(context->texture(0))); 1471 EXPECT_TRUE(context->usedTexture(context->texture(0)));
1472 EXPECT_TRUE(context->usedTexture(context->texture(1)));
1430 1473
1431 context->resetUsedTextures(); 1474 context->resetUsedTextures();
1432 break; 1475 break;
1433 case 1: 1476 case 1:
1434 // Number of textures should be two as the first texture 1477 // Number of textures should be doubled as the first textures
1435 // is used by impl thread and cannot by used for update. 1478 // are used by impl thread and cannot by used for update.
1436 ASSERT_EQ(2, context->numTextures()); 1479 ASSERT_EQ(4, context->numTextures());
1437 // Number of textures used for commit should still be one. 1480 // Number of textures used for commit should still be one for each l ayer.
1438 EXPECT_EQ(1, context->numUsedTextures()); 1481 EXPECT_EQ(2, context->numUsedTextures());
1439 // First texture should not have been used. 1482 // First textures should not have been used.
1440 EXPECT_FALSE(context->usedTexture(context->texture(0))); 1483 EXPECT_FALSE(context->usedTexture(context->texture(0)));
1441 // New texture should have been used. 1484 EXPECT_FALSE(context->usedTexture(context->texture(1)));
1442 EXPECT_TRUE(context->usedTexture(context->texture(1))); 1485 // New textures should have been used.
1486 EXPECT_TRUE(context->usedTexture(context->texture(2)));
1487 EXPECT_TRUE(context->usedTexture(context->texture(3)));
1443 1488
1444 context->resetUsedTextures(); 1489 context->resetUsedTextures();
1445 break; 1490 break;
1446 default: 1491 default:
1447 NOTREACHED(); 1492 NOTREACHED();
1448 break; 1493 break;
1449 } 1494 }
1450 } 1495 }
1451 1496
1452 virtual void drawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE 1497 virtual void drawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE
1453 { 1498 {
1454 CompositorFakeWebGraphicsContext3DWithTextureTracking* context = static_ cast<CompositorFakeWebGraphicsContext3DWithTextureTracking*>(impl->outputSurface ()->Context3D()); 1499 CompositorFakeWebGraphicsContext3DWithTextureTracking* context = static_ cast<CompositorFakeWebGraphicsContext3DWithTextureTracking*>(impl->outputSurface ()->Context3D());
1455 1500
1456 // Number of textures used for draw should always be one. 1501 // Number of textures used for draw should always be one for each layer.
1457 EXPECT_EQ(1, context->numUsedTextures()); 1502 EXPECT_EQ(2, context->numUsedTextures());
1458 1503
1459 if (impl->activeTree()->source_frame_number() < 1) { 1504 if (impl->activeTree()->source_frame_number() < 1) {
1460 context->resetUsedTextures(); 1505 context->resetUsedTextures();
1461 postSetNeedsCommitToMainThread(); 1506 postSetNeedsCommitToMainThread();
1462 postSetNeedsRedrawToMainThread(); 1507 postSetNeedsRedrawToMainThread();
1463 } else 1508 } else
1464 endTest(); 1509 endTest();
1465 } 1510 }
1466 1511
1467 virtual void layout() OVERRIDE 1512 virtual void layout() OVERRIDE
1468 { 1513 {
1469 m_layer->setNeedsDisplay(); 1514 m_layer->setNeedsDisplay();
1515 m_scrollbar->setNeedsDisplay();
1470 } 1516 }
1471 1517
1472 virtual void afterTest() OVERRIDE 1518 virtual void afterTest() OVERRIDE
1473 { 1519 {
1474 } 1520 }
1475 1521
1476 private: 1522 private:
1477 FakeContentLayerClient m_client; 1523 FakeContentLayerClient m_client;
1478 scoped_refptr<ContentLayerWithUpdateTracking> m_layer; 1524 scoped_refptr<ContentLayerWithUpdateTracking> m_layer;
1525 scoped_refptr<ScrollbarLayerWithUpdateTracking> m_scrollbar;
1479 }; 1526 };
1480 1527
1481 TEST_F(LayerTreeHostTestAtomicCommit, runMultiThread) 1528 TEST_F(LayerTreeHostTestAtomicCommit, runMultiThread)
1482 { 1529 {
1483 runTest(true); 1530 runTest(true);
1484 } 1531 }
1485 1532
1486 static void setLayerPropertiesForTesting(Layer* layer, Layer* parent, const gfx: :Transform& transform, const gfx::PointF& anchor, const gfx::PointF& position, c onst gfx::Size& bounds, bool opaque) 1533 static void setLayerPropertiesForTesting(Layer* layer, Layer* parent, const gfx: :Transform& transform, const gfx::PointF& anchor, const gfx::PointF& position, c onst gfx::Size& bounds, bool opaque)
1487 { 1534 {
1488 layer->removeAllChildren(); 1535 layer->removeAllChildren();
1489 if (parent) 1536 if (parent)
1490 parent->addChild(layer); 1537 parent->addChild(layer);
1491 layer->setTransform(transform); 1538 layer->setTransform(transform);
1492 layer->setAnchorPoint(anchor); 1539 layer->setAnchorPoint(anchor);
1493 layer->setPosition(position); 1540 layer->setPosition(position);
1494 layer->setBounds(bounds); 1541 layer->setBounds(bounds);
1495 layer->setContentsOpaque(opaque); 1542 layer->setContentsOpaque(opaque);
1496 } 1543 }
1497 1544
1498 class LayerTreeHostTestAtomicCommitWithPartialUpdate : public LayerTreeHostTest { 1545 class LayerTreeHostTestAtomicCommitWithPartialUpdate : public LayerTreeHostTest {
1499 public: 1546 public:
1500 LayerTreeHostTestAtomicCommitWithPartialUpdate() 1547 LayerTreeHostTestAtomicCommitWithPartialUpdate()
1501 : m_parent(ContentLayerWithUpdateTracking::create(&m_client)) 1548 : m_parent(ContentLayerWithUpdateTracking::create(&m_client))
1502 , m_child(ContentLayerWithUpdateTracking::create(&m_client)) 1549 , m_child(ContentLayerWithUpdateTracking::create(&m_client))
1550 , m_scrollbarWithPaints(ScrollbarLayerWithUpdateTracking::create(m_paren t->id(), true))
1551 , m_scrollbarWithoutPaints(ScrollbarLayerWithUpdateTracking::create(m_pa rent->id(), false))
1503 , m_numCommits(0) 1552 , m_numCommits(0)
1504 { 1553 {
1505 // Allow one partial texture update. 1554 // Allow one partial texture update.
1506 m_settings.maxPartialTextureUpdates = 1; 1555 m_settings.maxPartialTextureUpdates = 1;
1507 } 1556 }
1508 1557
1509 virtual void beginTest() OVERRIDE 1558 virtual void beginTest() OVERRIDE
1510 { 1559 {
1511 m_layerTreeHost->setRootLayer(m_parent); 1560 m_layerTreeHost->setRootLayer(m_parent);
1512 m_layerTreeHost->setViewportSize(gfx::Size(10, 20), gfx::Size(10, 20)); 1561 m_layerTreeHost->setViewportSize(gfx::Size(10, 20), gfx::Size(10, 20));
1513 1562
1514 gfx::Transform identityMatrix; 1563 gfx::Transform identityMatrix;
1515 setLayerPropertiesForTesting(m_parent.get(), 0, identityMatrix, gfx::Poi ntF(0, 0), gfx::PointF(0, 0), gfx::Size(10, 20), true); 1564 setLayerPropertiesForTesting(m_parent.get(), 0, identityMatrix, gfx::Poi ntF(0, 0), gfx::PointF(0, 0), gfx::Size(10, 20), true);
1516 setLayerPropertiesForTesting(m_child.get(), m_parent.get(), identityMatr ix, gfx::PointF(0, 0), gfx::PointF(0, 10), gfx::Size(10, 10), false); 1565 setLayerPropertiesForTesting(m_child.get(), m_parent.get(), identityMatr ix, gfx::PointF(0, 0), gfx::PointF(0, 10), gfx::Size(10, 10), false);
1566 setLayerPropertiesForTesting(m_scrollbarWithPaints.get(), m_parent.get() , identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 10), gfx::Size(10, 10), fals e);
1567 setLayerPropertiesForTesting(m_scrollbarWithoutPaints.get(), m_parent.ge t(), identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 10), gfx::Size(10, 10), f alse);
1517 1568
1518 ASSERT_TRUE(m_layerTreeHost->initializeRendererIfNeeded()); 1569 ASSERT_TRUE(m_layerTreeHost->initializeRendererIfNeeded());
1519 ResourceUpdateQueue queue; 1570 ResourceUpdateQueue queue;
1520 m_layerTreeHost->updateLayers(queue, std::numeric_limits<size_t>::max()) ; 1571 m_layerTreeHost->updateLayers(queue, std::numeric_limits<size_t>::max()) ;
1521 postSetNeedsCommitToMainThread(); 1572 postSetNeedsCommitToMainThread();
1522 postSetNeedsRedrawToMainThread(); 1573 postSetNeedsRedrawToMainThread();
1523 } 1574 }
1524 1575
1525 virtual void commitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE 1576 virtual void commitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE
1526 { 1577 {
1527 CompositorFakeWebGraphicsContext3DWithTextureTracking* context = static_ cast<CompositorFakeWebGraphicsContext3DWithTextureTracking*>(impl->outputSurface ()->Context3D()); 1578 CompositorFakeWebGraphicsContext3DWithTextureTracking* context = static_ cast<CompositorFakeWebGraphicsContext3DWithTextureTracking*>(impl->outputSurface ()->Context3D());
1528 1579
1529 switch (impl->activeTree()->source_frame_number()) { 1580 switch (impl->activeTree()->source_frame_number()) {
1530 case 0: 1581 case 0:
1531 // Number of textures should be two. 1582 // Number of textures should be one for each layer.
1532 ASSERT_EQ(2, context->numTextures()); 1583 ASSERT_EQ(4, context->numTextures());
1533 // Number of textures used for commit should be two. 1584 // Number of textures used for commit should be one for each layer.
1534 EXPECT_EQ(2, context->numUsedTextures()); 1585 EXPECT_EQ(4, context->numUsedTextures());
1535 // Verify that used textures are correct. 1586 // Verify that used textures are correct.
1536 EXPECT_TRUE(context->usedTexture(context->texture(0))); 1587 EXPECT_TRUE(context->usedTexture(context->texture(0)));
1537 EXPECT_TRUE(context->usedTexture(context->texture(1))); 1588 EXPECT_TRUE(context->usedTexture(context->texture(1)));
1538
1539 context->resetUsedTextures();
1540 break;
1541 case 1:
1542 // Number of textures used for commit should still be two.
1543 EXPECT_EQ(2, context->numUsedTextures());
1544 // First two textures should not have been used.
1545 EXPECT_FALSE(context->usedTexture(context->texture(0)));
1546 EXPECT_FALSE(context->usedTexture(context->texture(1)));
1547 // New textures should have been used.
1548 EXPECT_TRUE(context->usedTexture(context->texture(2))); 1589 EXPECT_TRUE(context->usedTexture(context->texture(2)));
1549 EXPECT_TRUE(context->usedTexture(context->texture(3))); 1590 EXPECT_TRUE(context->usedTexture(context->texture(3)));
1550 1591
1551 context->resetUsedTextures(); 1592 context->resetUsedTextures();
1552 break; 1593 break;
1553 case 2: 1594 case 1:
1554 // Number of textures used for commit should still be two. 1595 // Number of textures should be two for each content layer and one
1555 EXPECT_EQ(2, context->numUsedTextures()); 1596 // for each scrollbar, since they always do a partial update.
1597 ASSERT_EQ(6, context->numTextures());
1598 // Number of textures used for commit should be one for each content
1599 // layer, and one for the scrollbar layer that paints.
1600 EXPECT_EQ(3, context->numUsedTextures());
1601
1602 // First content textures should not have been used.
1603 EXPECT_FALSE(context->usedTexture(context->texture(0)));
1604 EXPECT_FALSE(context->usedTexture(context->texture(1)));
1605 // The non-painting scrollbar's texture wasn't updated.
1606 EXPECT_FALSE(context->usedTexture(context->texture(2)));
1607 // The painting scrollbar's partial update texture was used.
1608 EXPECT_TRUE(context->usedTexture(context->texture(3)));
1609 // New textures should have been used.
1610 EXPECT_TRUE(context->usedTexture(context->texture(4)));
1611 EXPECT_TRUE(context->usedTexture(context->texture(5)));
1556 1612
1557 context->resetUsedTextures(); 1613 context->resetUsedTextures();
1558 break; 1614 break;
1615 case 2:
1616 // Number of textures should be two for each content layer and one
1617 // for each scrollbar, since they always do a partial update.
1618 ASSERT_EQ(6, context->numTextures());
1619 // Number of textures used for commit should be one for each content
1620 // layer, and one for the scrollbar layer that paints.
1621 EXPECT_EQ(3, context->numUsedTextures());
1622
1623 // The non-painting scrollbar's texture wasn't updated.
1624 EXPECT_FALSE(context->usedTexture(context->texture(2)));
1625 // The painting scrollbar does a partial update.
1626 EXPECT_TRUE(context->usedTexture(context->texture(3)));
1627 // One content layer does a partial update also.
1628 EXPECT_TRUE(context->usedTexture(context->texture(4)));
1629 EXPECT_FALSE(context->usedTexture(context->texture(5)));
1630
1631 context->resetUsedTextures();
1632 break;
1559 case 3: 1633 case 3:
1560 // No textures should be used for commit. 1634 // No textures should be used for commit.
1561 EXPECT_EQ(0, context->numUsedTextures()); 1635 EXPECT_EQ(0, context->numUsedTextures());
1562 1636
1563 context->resetUsedTextures(); 1637 context->resetUsedTextures();
1564 break; 1638 break;
1565 case 4: 1639 case 4:
1566 // Number of textures used for commit should be one. 1640 // Number of textures used for commit should be two. One for the
1567 EXPECT_EQ(1, context->numUsedTextures()); 1641 // content layer, and one for the painting scrollbar. The
1642 // non-painting scrollbar doesn't update its texture.
1643 EXPECT_EQ(2, context->numUsedTextures());
1568 1644
1569 context->resetUsedTextures(); 1645 context->resetUsedTextures();
1570 break; 1646 break;
1571 default: 1647 default:
1572 NOTREACHED(); 1648 NOTREACHED();
1573 break; 1649 break;
1574 } 1650 }
1575 } 1651 }
1576 1652
1577 virtual void drawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE 1653 virtual void drawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE
1578 { 1654 {
1579 CompositorFakeWebGraphicsContext3DWithTextureTracking* context = static_ cast<CompositorFakeWebGraphicsContext3DWithTextureTracking*>(impl->outputSurface ()->Context3D()); 1655 CompositorFakeWebGraphicsContext3DWithTextureTracking* context = static_ cast<CompositorFakeWebGraphicsContext3DWithTextureTracking*>(impl->outputSurface ()->Context3D());
1580 1656
1581 // Number of textures used for drawing should two except for frame 4 1657 // Number of textures used for drawing should one per layer except for
1582 // where the viewport only contains one layer. 1658 // frame 3 where the viewport only contains one layer.
1583 if (impl->activeTree()->source_frame_number() == 3) 1659 if (impl->activeTree()->source_frame_number() == 3)
1584 EXPECT_EQ(1, context->numUsedTextures()); 1660 EXPECT_EQ(1, context->numUsedTextures());
1585 else 1661 else
1586 EXPECT_EQ(2, context->numUsedTextures()); 1662 EXPECT_EQ(4, context->numUsedTextures());
1587 1663
1588 if (impl->activeTree()->source_frame_number() < 4) { 1664 if (impl->activeTree()->source_frame_number() < 4) {
1589 context->resetUsedTextures(); 1665 context->resetUsedTextures();
1590 postSetNeedsCommitToMainThread(); 1666 postSetNeedsCommitToMainThread();
1591 postSetNeedsRedrawToMainThread(); 1667 postSetNeedsRedrawToMainThread();
1592 } else 1668 } else
1593 endTest(); 1669 endTest();
1594 } 1670 }
1595 1671
1596 virtual void layout() OVERRIDE 1672 virtual void layout() OVERRIDE
1597 { 1673 {
1598 switch (m_numCommits++) { 1674 switch (m_numCommits++) {
1599 case 0: 1675 case 0:
1600 case 1: 1676 case 1:
1601 m_parent->setNeedsDisplay(); 1677 m_parent->setNeedsDisplay();
1602 m_child->setNeedsDisplay(); 1678 m_child->setNeedsDisplay();
1679 m_scrollbarWithPaints->setNeedsDisplay();
1680 m_scrollbarWithoutPaints->setNeedsDisplay();
1603 break; 1681 break;
1604 case 2: 1682 case 2:
1605 // Damage part of layers. 1683 // Damage part of layers.
1606 m_parent->setNeedsDisplayRect(gfx::RectF(0, 0, 5, 5)); 1684 m_parent->setNeedsDisplayRect(gfx::RectF(0, 0, 5, 5));
1607 m_child->setNeedsDisplayRect(gfx::RectF(0, 0, 5, 5)); 1685 m_child->setNeedsDisplayRect(gfx::RectF(0, 0, 5, 5));
1686 m_scrollbarWithPaints->setNeedsDisplayRect(gfx::RectF(0, 0, 5, 5));
1687 m_scrollbarWithoutPaints->setNeedsDisplayRect(gfx::RectF(0, 0, 5, 5) );
1608 break; 1688 break;
1609 case 3: 1689 case 3:
1610 m_child->setNeedsDisplay(); 1690 m_child->setNeedsDisplay();
1691 m_scrollbarWithPaints->setNeedsDisplay();
1692 m_scrollbarWithoutPaints->setNeedsDisplay();
1611 m_layerTreeHost->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10 )); 1693 m_layerTreeHost->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10 ));
1612 break; 1694 break;
1613 case 4: 1695 case 4:
1614 m_layerTreeHost->setViewportSize(gfx::Size(10, 20), gfx::Size(10, 20 )); 1696 m_layerTreeHost->setViewportSize(gfx::Size(10, 20), gfx::Size(10, 20 ));
1615 break; 1697 break;
1616 default: 1698 default:
1617 NOTREACHED(); 1699 NOTREACHED();
1618 break; 1700 break;
1619 } 1701 }
1620 } 1702 }
1621 1703
1622 virtual void afterTest() OVERRIDE 1704 virtual void afterTest() OVERRIDE
1623 { 1705 {
1624 } 1706 }
1625 1707
1626 private: 1708 private:
1627 FakeContentLayerClient m_client; 1709 FakeContentLayerClient m_client;
1628 scoped_refptr<ContentLayerWithUpdateTracking> m_parent; 1710 scoped_refptr<ContentLayerWithUpdateTracking> m_parent;
1629 scoped_refptr<ContentLayerWithUpdateTracking> m_child; 1711 scoped_refptr<ContentLayerWithUpdateTracking> m_child;
1712 scoped_refptr<ScrollbarLayerWithUpdateTracking> m_scrollbarWithPaints;
1713 scoped_refptr<ScrollbarLayerWithUpdateTracking> m_scrollbarWithoutPaints;
1630 int m_numCommits; 1714 int m_numCommits;
1631 }; 1715 };
1632 1716
1633 TEST_F(LayerTreeHostTestAtomicCommitWithPartialUpdate, runMultiThread) 1717 TEST_F(LayerTreeHostTestAtomicCommitWithPartialUpdate, runMultiThread)
1634 { 1718 {
1635 runTest(true); 1719 runTest(true);
1636 } 1720 }
1637 1721
1638 class TestLayer : public Layer { 1722 class TestLayer : public Layer {
1639 public: 1723 public:
(...skipping 1740 matching lines...) Expand 10 before | Expand all | Expand 10 after
3380 LayerTreeSettings settings; 3464 LayerTreeSettings settings;
3381 settings.maxPartialTextureUpdates = 4; 3465 settings.maxPartialTextureUpdates = 4;
3382 3466
3383 scoped_ptr<LayerTreeHost> host = LayerTreeHost::create(&client, settings, sc oped_ptr<Thread>()); 3467 scoped_ptr<LayerTreeHost> host = LayerTreeHost::create(&client, settings, sc oped_ptr<Thread>());
3384 EXPECT_TRUE(host->initializeRendererIfNeeded()); 3468 EXPECT_TRUE(host->initializeRendererIfNeeded());
3385 EXPECT_EQ(0u, host->settings().maxPartialTextureUpdates); 3469 EXPECT_EQ(0u, host->settings().maxPartialTextureUpdates);
3386 } 3470 }
3387 3471
3388 } // namespace 3472 } // namespace
3389 } // namespace cc 3473 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/scrollbar_layer.h » ('j') | cc/scrollbar_layer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698