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

Unified 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: nit 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/layer_impl.cc ('k') | cc/layer_tree_settings.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/layer_tree_host_unittest.cc
diff --git a/cc/layer_tree_host_unittest.cc b/cc/layer_tree_host_unittest.cc
index 331de3b3fe6bb2ab570ba94dc9e8bea6fee4e981..1e1334dfd28af283638bbaa8af466b8416bf87c7 100644
--- a/cc/layer_tree_host_unittest.cc
+++ b/cc/layer_tree_host_unittest.cc
@@ -12,10 +12,12 @@
#include "cc/layer_tree_impl.h"
#include "cc/output_surface.h"
#include "cc/single_thread_proxy.h"
+#include "cc/test/fake_content_layer.h"
#include "cc/test/fake_content_layer_client.h"
#include "cc/test/fake_layer_tree_host_client.h"
#include "cc/test/fake_output_surface.h"
#include "cc/test/fake_proxy.h"
+#include "cc/test/fake_scrollbar_layer.h"
#include "cc/test/geometry_test_utils.h"
#include "cc/test/layer_tree_test_common.h"
#include "cc/resource_update_queue.h"
@@ -995,49 +997,64 @@ TEST_F(LayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers, runMultiThread
class LayerTreeHostTestAtomicCommit : public LayerTreeHostTest {
public:
LayerTreeHostTestAtomicCommit()
- : m_layer(ContentLayerWithUpdateTracking::create(&m_client))
{
// Make sure partial texture updates are turned off.
m_settings.maxPartialTextureUpdates = 0;
+ // Linear fade animator prevents scrollbars from drawing immediately.
+ m_settings.useLinearFadeScrollbarAnimator = false;
}
- virtual void beginTest() OVERRIDE
+ virtual void setupTree() OVERRIDE
{
+ m_layer = FakeContentLayer::Create(&m_client);
+ m_layer->setBounds(gfx::Size(10, 20));
+
+ m_scrollbar = FakeScrollbarLayer::Create(true, m_layer->id());
+ m_scrollbar->setPosition(gfx::Point(0, 10));
+ m_scrollbar->setBounds(gfx::Size(10, 10));
+
+ m_layer->addChild(m_scrollbar);
+
m_layerTreeHost->setRootLayer(m_layer);
- m_layerTreeHost->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10));
+ LayerTreeHostTest::setupTree();
+ }
- ASSERT_TRUE(m_layerTreeHost->initializeRendererIfNeeded());
- ResourceUpdateQueue queue;
- m_layerTreeHost->updateLayers(queue, std::numeric_limits<size_t>::max());
+ virtual void beginTest() OVERRIDE
+ {
postSetNeedsCommitToMainThread();
}
virtual void commitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE
{
+ ASSERT_EQ(0u, m_layerTreeHost->settings().maxPartialTextureUpdates);
+
FakeWebGraphicsContext3D* context = static_cast<FakeWebGraphicsContext3D*>(impl->outputSurface()->Context3D());
switch (impl->activeTree()->source_frame_number()) {
case 0:
- // Number of textures should be one.
- ASSERT_EQ(1, context->NumTextures());
- // Number of textures used for commit should be one.
- EXPECT_EQ(1, context->NumUsedTextures());
+ // Number of textures should be one for each layer
+ ASSERT_EQ(2, context->NumTextures());
+ // Number of textures used for commit should be one for each layer.
+ EXPECT_EQ(2, context->NumUsedTextures());
// Verify that used texture is correct.
EXPECT_TRUE(context->UsedTexture(context->TextureAt(0)));
+ EXPECT_TRUE(context->UsedTexture(context->TextureAt(1)));
context->ResetUsedTextures();
postSetNeedsCommitToMainThread();
break;
case 1:
- // Number of textures should be two as the first texture
- // is used by impl thread and cannot by used for update.
- ASSERT_EQ(2, context->NumTextures());
- // Number of textures used for commit should still be one.
- EXPECT_EQ(1, context->NumUsedTextures());
- // First texture should not have been used.
+ // Number of textures should be doubled as the first textures
+ // are used by impl thread and cannot by used for update.
+ ASSERT_EQ(4, context->NumTextures());
+ // Number of textures used for commit should still be one for each layer.
+ EXPECT_EQ(2, context->NumUsedTextures());
+ // First textures should not have been used.
EXPECT_FALSE(context->UsedTexture(context->TextureAt(0)));
- // New texture should have been used.
- EXPECT_TRUE(context->UsedTexture(context->TextureAt(1)));
+ EXPECT_FALSE(context->UsedTexture(context->TextureAt(1)));
+ // New textures should have been used.
+ EXPECT_TRUE(context->UsedTexture(context->TextureAt(2)));
+ EXPECT_TRUE(context->UsedTexture(context->TextureAt(3)));
context->ResetUsedTextures();
postSetNeedsCommitToMainThread();
@@ -1055,14 +1072,15 @@ public:
{
FakeWebGraphicsContext3D* context = static_cast<FakeWebGraphicsContext3D*>(impl->outputSurface()->Context3D());
- // Number of textures used for draw should always be one.
- EXPECT_EQ(1, context->NumUsedTextures());
+ // Number of textures used for draw should always be one for each layer.
+ EXPECT_EQ(2, context->NumUsedTextures());
context->ResetUsedTextures();
}
virtual void layout() OVERRIDE
{
m_layer->setNeedsDisplay();
+ m_scrollbar->setNeedsDisplay();
}
virtual void afterTest() OVERRIDE
@@ -1071,7 +1089,8 @@ public:
private:
FakeContentLayerClient m_client;
- scoped_refptr<ContentLayerWithUpdateTracking> m_layer;
+ scoped_refptr<FakeContentLayer> m_layer;
+ scoped_refptr<FakeScrollbarLayer> m_scrollbar;
};
TEST_F(LayerTreeHostTestAtomicCommit, runMultiThread)
@@ -1094,62 +1113,104 @@ static void setLayerPropertiesForTesting(Layer* layer, Layer* parent, const gfx:
class LayerTreeHostTestAtomicCommitWithPartialUpdate : public LayerTreeHostTest {
public:
LayerTreeHostTestAtomicCommitWithPartialUpdate()
- : m_parent(ContentLayerWithUpdateTracking::create(&m_client))
- , m_child(ContentLayerWithUpdateTracking::create(&m_client))
- , m_numCommits(0)
+ : m_numCommits(0)
{
// Allow one partial texture update.
m_settings.maxPartialTextureUpdates = 1;
+ // Linear fade animator prevents scrollbars from drawing immediately.
+ m_settings.useLinearFadeScrollbarAnimator = false;
}
- virtual void beginTest() OVERRIDE
+ virtual void setupTree() OVERRIDE
{
- m_layerTreeHost->setRootLayer(m_parent);
- m_layerTreeHost->setViewportSize(gfx::Size(10, 20), gfx::Size(10, 20));
+ m_parent = FakeContentLayer::Create(&m_client);
+ m_parent->setBounds(gfx::Size(10, 20));
- gfx::Transform identityMatrix;
- setLayerPropertiesForTesting(m_parent.get(), 0, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(10, 20), true);
- setLayerPropertiesForTesting(m_child.get(), m_parent.get(), identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 10), gfx::Size(10, 10), false);
+ m_child = FakeContentLayer::Create(&m_client);
+ m_child->setPosition(gfx::Point(0, 10));
+ m_child->setBounds(gfx::Size(3, 10));
- ASSERT_TRUE(m_layerTreeHost->initializeRendererIfNeeded());
- ResourceUpdateQueue queue;
- m_layerTreeHost->updateLayers(queue, std::numeric_limits<size_t>::max());
+ m_scrollbarWithPaints =
+ FakeScrollbarLayer::Create(true, m_parent->id());
+ m_scrollbarWithPaints->setPosition(gfx::Point(3, 10));
+ m_scrollbarWithPaints->setBounds(gfx::Size(3, 10));
+
+ m_scrollbarWithoutPaints =
+ FakeScrollbarLayer::Create(false, m_parent->id());
+ m_scrollbarWithoutPaints->setPosition(gfx::Point(6, 10));
+ m_scrollbarWithoutPaints->setBounds(gfx::Size(3, 10));
+
+ m_parent->addChild(m_child);
+ m_parent->addChild(m_scrollbarWithPaints);
+ m_parent->addChild(m_scrollbarWithoutPaints);
+
+ m_layerTreeHost->setRootLayer(m_parent);
+ LayerTreeHostTest::setupTree();
+ }
+
+ virtual void beginTest() OVERRIDE
+ {
postSetNeedsCommitToMainThread();
}
virtual void commitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE
{
+ ASSERT_EQ(1u, m_layerTreeHost->settings().maxPartialTextureUpdates);
+
FakeWebGraphicsContext3D* context = static_cast<FakeWebGraphicsContext3D*>(impl->outputSurface()->Context3D());
switch (impl->activeTree()->source_frame_number()) {
case 0:
- // Number of textures should be two.
- ASSERT_EQ(2, context->NumTextures());
- // Number of textures used for commit should be two.
- EXPECT_EQ(2, context->NumUsedTextures());
+ // Number of textures should be one for each layer.
+ ASSERT_EQ(4, context->NumTextures());
+ // Number of textures used for commit should be one for each layer.
+ EXPECT_EQ(4, context->NumUsedTextures());
// Verify that used textures are correct.
EXPECT_TRUE(context->UsedTexture(context->TextureAt(0)));
EXPECT_TRUE(context->UsedTexture(context->TextureAt(1)));
+ EXPECT_TRUE(context->UsedTexture(context->TextureAt(2)));
+ EXPECT_TRUE(context->UsedTexture(context->TextureAt(3)));
context->ResetUsedTextures();
postSetNeedsCommitToMainThread();
break;
case 1:
- // Number of textures used for commit should still be two.
- EXPECT_EQ(2, context->NumUsedTextures());
- // First two textures should not have been used.
+ // Number of textures should be two for each content layer and one
+ // for each scrollbar, since they always do a partial update.
+ ASSERT_EQ(6, context->NumTextures());
+ // Number of textures used for commit should be one for each content
+ // layer, and one for the scrollbar layer that paints.
+ EXPECT_EQ(3, context->NumUsedTextures());
+
+ // First content textures should not have been used.
EXPECT_FALSE(context->UsedTexture(context->TextureAt(0)));
EXPECT_FALSE(context->UsedTexture(context->TextureAt(1)));
- // New textures should have been used.
- EXPECT_TRUE(context->UsedTexture(context->TextureAt(2)));
+ // The non-painting scrollbar's texture wasn't updated.
+ EXPECT_FALSE(context->UsedTexture(context->TextureAt(2)));
+ // The painting scrollbar's partial update texture was used.
EXPECT_TRUE(context->UsedTexture(context->TextureAt(3)));
+ // New textures should have been used.
+ EXPECT_TRUE(context->UsedTexture(context->TextureAt(4)));
+ EXPECT_TRUE(context->UsedTexture(context->TextureAt(5)));
context->ResetUsedTextures();
postSetNeedsCommitToMainThread();
break;
case 2:
- // Number of textures used for commit should still be two.
- EXPECT_EQ(2, context->NumUsedTextures());
+ // Number of textures should be two for each content layer and one
+ // for each scrollbar, since they always do a partial update.
+ ASSERT_EQ(6, context->NumTextures());
+ // Number of textures used for commit should be one for each content
+ // layer, and one for the scrollbar layer that paints.
+ EXPECT_EQ(3, context->NumUsedTextures());
+
+ // The non-painting scrollbar's texture wasn't updated.
+ EXPECT_FALSE(context->UsedTexture(context->TextureAt(2)));
+ // The painting scrollbar does a partial update.
+ EXPECT_TRUE(context->UsedTexture(context->TextureAt(3)));
+ // One content layer does a partial update also.
+ EXPECT_TRUE(context->UsedTexture(context->TextureAt(4)));
+ EXPECT_FALSE(context->UsedTexture(context->TextureAt(5)));
context->ResetUsedTextures();
postSetNeedsCommitToMainThread();
@@ -1162,8 +1223,10 @@ public:
postSetNeedsCommitToMainThread();
break;
case 4:
- // Number of textures used for commit should be one.
- EXPECT_EQ(1, context->NumUsedTextures());
+ // Number of textures used for commit should be two. One for the
+ // content layer, and one for the painting scrollbar. The
+ // non-painting scrollbar doesn't update its texture.
+ EXPECT_EQ(2, context->NumUsedTextures());
context->ResetUsedTextures();
postSetNeedsCommitToMainThread();
@@ -1181,12 +1244,12 @@ public:
{
FakeWebGraphicsContext3D* context = static_cast<FakeWebGraphicsContext3D*>(impl->outputSurface()->Context3D());
- // Number of textures used for drawing should two except for frame 4
- // where the viewport only contains one layer.
+ // Number of textures used for drawing should one per layer except for
+ // frame 3 where the viewport only contains one layer.
if (impl->activeTree()->source_frame_number() == 3)
EXPECT_EQ(1, context->NumUsedTextures());
else
- EXPECT_EQ(2, context->NumUsedTextures());
+ EXPECT_EQ(4, context->NumUsedTextures());
context->ResetUsedTextures();
}
@@ -1198,14 +1261,20 @@ public:
case 1:
m_parent->setNeedsDisplay();
m_child->setNeedsDisplay();
+ m_scrollbarWithPaints->setNeedsDisplay();
+ m_scrollbarWithoutPaints->setNeedsDisplay();
break;
case 2:
// Damage part of layers.
m_parent->setNeedsDisplayRect(gfx::RectF(0, 0, 5, 5));
m_child->setNeedsDisplayRect(gfx::RectF(0, 0, 5, 5));
+ m_scrollbarWithPaints->setNeedsDisplayRect(gfx::RectF(0, 0, 5, 5));
+ m_scrollbarWithoutPaints->setNeedsDisplayRect(gfx::RectF(0, 0, 5, 5));
break;
case 3:
m_child->setNeedsDisplay();
+ m_scrollbarWithPaints->setNeedsDisplay();
+ m_scrollbarWithoutPaints->setNeedsDisplay();
m_layerTreeHost->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10));
break;
case 4:
@@ -1225,8 +1294,10 @@ public:
private:
FakeContentLayerClient m_client;
- scoped_refptr<ContentLayerWithUpdateTracking> m_parent;
- scoped_refptr<ContentLayerWithUpdateTracking> m_child;
+ scoped_refptr<FakeContentLayer> m_parent;
+ scoped_refptr<FakeContentLayer> m_child;
+ scoped_refptr<FakeScrollbarLayer> m_scrollbarWithPaints;
+ scoped_refptr<FakeScrollbarLayer> m_scrollbarWithoutPaints;
int m_numCommits;
};
« no previous file with comments | « cc/layer_impl.cc ('k') | cc/layer_tree_settings.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698