Index: cc/trees/layer_tree_host_unittest.cc |
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc |
index 0a4c23602b416eddd9dafb3217e693fb628e6d47..05a65b2bc42b8e7818185dc85fcb592e082905a2 100644 |
--- a/cc/trees/layer_tree_host_unittest.cc |
+++ b/cc/trees/layer_tree_host_unittest.cc |
@@ -16,7 +16,6 @@ |
#include "cc/layers/layer_impl.h" |
#include "cc/layers/picture_layer.h" |
#include "cc/layers/scrollbar_layer.h" |
-#include "cc/layers/video_layer.h" |
#include "cc/output/begin_frame_args.h" |
#include "cc/output/copy_output_request.h" |
#include "cc/output/copy_output_result.h" |
@@ -34,7 +33,6 @@ |
#include "cc/test/fake_proxy.h" |
#include "cc/test/fake_scoped_ui_resource.h" |
#include "cc/test/fake_scrollbar_layer.h" |
-#include "cc/test/fake_video_frame_provider.h" |
#include "cc/test/geometry_test_utils.h" |
#include "cc/test/layer_tree_test.h" |
#include "cc/test/occlusion_tracker_test_common.h" |
@@ -1110,7 +1108,7 @@ class LayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers |
MULTI_THREAD_TEST_F(LayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers); |
// Verify atomicity of commits and reuse of textures. |
-class LayerTreeHostTestAtomicCommit : public LayerTreeHostTest { |
+class LayerTreeHostTestDirectRendererAtomicCommit : public LayerTreeHostTest { |
public: |
virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { |
// Make sure partial texture updates are turned off. |
@@ -1161,19 +1159,18 @@ class LayerTreeHostTestAtomicCommit : public LayerTreeHostTest { |
PostSetNeedsCommitToMainThread(); |
break; |
case 1: |
- // Number of textures should be doubled as the first textures |
- // are used by impl thread and cannot by used for update. |
- ASSERT_EQ(4u, context->NumTextures()); |
- // Number of textures used for commit should still be |
- // one for each layer. |
+ // Number of textures should be one for scrollbar layer since it was |
+ // requested and deleted on the impl-thread, and double for the content |
+ // layer since its first texture is used by impl thread and cannot by |
+ // used for update. |
+ ASSERT_EQ(3u, context->NumTextures()); |
+ // Number of textures used for commit should be one for each layer. |
EXPECT_EQ(2u, context->NumUsedTextures()); |
// First textures should not have been used. |
EXPECT_FALSE(context->UsedTexture(context->TextureAt(0))); |
- EXPECT_FALSE(context->UsedTexture(context->TextureAt(1))); |
+ EXPECT_TRUE(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(); |
break; |
@@ -1208,14 +1205,68 @@ class LayerTreeHostTestAtomicCommit : public LayerTreeHostTest { |
virtual void AfterTest() OVERRIDE {} |
- private: |
+ protected: |
FakeContentLayerClient client_; |
scoped_refptr<FakeContentLayer> layer_; |
scoped_refptr<FakeScrollbarLayer> scrollbar_; |
int drew_frame_; |
}; |
-MULTI_THREAD_TEST_F(LayerTreeHostTestAtomicCommit); |
+MULTI_THREAD_DIRECT_RENDERER_TEST_F( |
+ LayerTreeHostTestDirectRendererAtomicCommit); |
+ |
+class LayerTreeHostTestDelegatingRendererAtomicCommit |
+ : public LayerTreeHostTestDirectRendererAtomicCommit { |
+ public: |
+ virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
+ ASSERT_EQ(0u, layer_tree_host()->settings().max_partial_texture_updates); |
+ |
+ TestWebGraphicsContext3D* context = static_cast<TestWebGraphicsContext3D*>( |
+ impl->output_surface()->context3d()); |
+ |
+ switch (impl->active_tree()->source_frame_number()) { |
+ case 0: |
+ // Number of textures should be one for each layer |
+ ASSERT_EQ(2u, context->NumTextures()); |
+ // Number of textures used for commit should be one for each layer. |
+ EXPECT_EQ(2u, 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 doubled as the first context layer |
+ // texture is being used by the impl-thread and cannot be used for |
+ // update. The scrollbar behavior is different direct renderer because |
+ // UI resource deletion with delegating renderer occurs after tree |
+ // activation. |
+ ASSERT_EQ(4u, context->NumTextures()); |
+ // Number of textures used for commit should still be |
+ // one for each layer. |
+ EXPECT_EQ(2u, context->NumUsedTextures()); |
+ // First 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))); |
+ EXPECT_TRUE(context->UsedTexture(context->TextureAt(3))); |
+ context->ResetUsedTextures(); |
+ PostSetNeedsCommitToMainThread(); |
+ break; |
+ case 2: |
+ EndTest(); |
+ break; |
+ default: |
+ NOTREACHED(); |
+ break; |
+ } |
+ } |
+}; |
+ |
+MULTI_THREAD_DELEGATING_RENDERER_TEST_F( |
+ LayerTreeHostTestDelegatingRendererAtomicCommit); |
static void SetLayerPropertiesForTesting(Layer* layer, |
Layer* parent, |
@@ -4023,55 +4074,5 @@ TEST_F(LayerTreeHostTestTreeActivationCallback, DelegatingRenderer) { |
RunTest(true, true, true); |
} |
-// VideoLayer must support being invalidated and then passing that along |
-// to the compositor thread, even though no resources are updated in |
-// response to that invalidation. |
-class LayerTreeHostTestVideoLayerInvalidate : public LayerTreeHostTest { |
- public: |
- LayerTreeHostTestVideoLayerInvalidate() : num_commits_(0), num_draws_(0) {} |
- |
- virtual void SetupTree() OVERRIDE { |
- LayerTreeHostTest::SetupTree(); |
- video_layer_ = VideoLayer::Create(&provider_); |
- video_layer_->SetBounds(gfx::Size(10, 10)); |
- video_layer_->SetIsDrawable(true); |
- layer_tree_host()->root_layer()->AddChild(video_layer_); |
- } |
- |
- virtual void BeginTest() OVERRIDE { |
- // One initial commit. |
- PostSetNeedsCommitToMainThread(); |
- } |
- |
- virtual void DidCommitAndDrawFrame() OVERRIDE { |
- // After commit, invalidate the video layer. This should cause a commit. |
- if (layer_tree_host()->source_frame_number() == 1) |
- video_layer_->SetNeedsDisplay(); |
- } |
- |
- virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
- num_draws_++; |
- if (impl->active_tree()->source_frame_number() == 1) |
- EndTest(); |
- } |
- |
- virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
- num_commits_++; |
- } |
- |
- virtual void AfterTest() OVERRIDE { |
- EXPECT_GE(2, num_commits_); |
- EXPECT_GE(2, num_draws_); |
- } |
- |
- private: |
- FakeVideoFrameProvider provider_; |
- scoped_refptr<VideoLayer> video_layer_; |
- int num_commits_; |
- int num_draws_; |
-}; |
- |
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestVideoLayerInvalidate); |
- |
} // namespace |
} // namespace cc |