Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/trees/layer_tree_host.h" | 5 #include "cc/trees/layer_tree_host.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/synchronization/lock.h" | 10 #include "base/synchronization/lock.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 62 using testing::_; | 62 using testing::_; |
| 63 using testing::AnyNumber; | 63 using testing::AnyNumber; |
| 64 using testing::AtLeast; | 64 using testing::AtLeast; |
| 65 using testing::Mock; | 65 using testing::Mock; |
| 66 | 66 |
| 67 namespace cc { | 67 namespace cc { |
| 68 namespace { | 68 namespace { |
| 69 | 69 |
| 70 class LayerTreeHostTest : public LayerTreeTest {}; | 70 class LayerTreeHostTest : public LayerTreeTest {}; |
| 71 | 71 |
| 72 // Test if the LTHI receives ReadyToActivate notifications from the TileManager | |
| 73 // when no raster tasks get scheduled. | |
| 74 class LayerTreeHostTestReadyToActivate : public LayerTreeHostTest { | |
| 75 public: | |
| 76 LayerTreeHostTestReadyToActivate() | |
| 77 : did_notify_ready_to_activate_(false), | |
| 78 all_tiles_required_for_activation_are_ready_to_draw_(false) {} | |
| 79 | |
| 80 void BeginTest() override { PostSetNeedsCommitToMainThread(); } | |
| 81 | |
| 82 void NotifyReadyToActivateOnThread(LayerTreeHostImpl* impl) override { | |
| 83 did_notify_ready_to_activate_ = true; | |
| 84 const std::vector<PictureLayerImpl*>& layers = impl->GetPictureLayers(); | |
| 85 all_tiles_required_for_activation_are_ready_to_draw_ = true; | |
| 86 for (const auto& layer : layers) { | |
| 87 if (!layer->AllTilesRequiredForActivationAreReadyToDraw()) | |
| 88 all_tiles_required_for_activation_are_ready_to_draw_ = false; | |
| 89 } | |
| 90 EndTest(); | |
| 91 } | |
| 92 | |
| 93 void AfterTest() override { | |
| 94 EXPECT_TRUE(did_notify_ready_to_activate_); | |
| 95 EXPECT_TRUE(all_tiles_required_for_activation_are_ready_to_draw_); | |
| 96 } | |
| 97 | |
| 98 private: | |
| 99 bool did_notify_ready_to_activate_; | |
| 100 bool all_tiles_required_for_activation_are_ready_to_draw_; | |
| 101 }; | |
| 102 | |
| 103 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestReadyToActivate); | |
| 104 | |
| 105 // Test if the LTHI receives ReadyToActivate notifications from the TileManager | |
| 106 // when some raster tasks flagged as REQUIRED_FOR_ACTIVATION got scheduled. | |
| 107 class LayerTreeHostTestReadyToActivateNonEmpty | |
| 108 : public LayerTreeHostTestReadyToActivate { | |
| 109 public: | |
| 110 void SetupTree() override { | |
| 111 client_.set_fill_with_nonsolid_color(true); | |
| 112 scoped_refptr<FakePictureLayer> root_layer = | |
| 113 FakePictureLayer::Create(&client_); | |
| 114 root_layer->SetBounds(gfx::Size(1024, 1024)); | |
| 115 root_layer->SetIsDrawable(true); | |
| 116 | |
| 117 layer_tree_host()->SetRootLayer(root_layer); | |
| 118 LayerTreeHostTest::SetupTree(); | |
| 119 } | |
| 120 | |
| 121 private: | |
| 122 FakeContentLayerClient client_; | |
| 123 }; | |
| 124 | |
| 125 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestReadyToActivateNonEmpty); | |
| 126 | |
| 127 // Test if the LTHI receives ReadyToDraw notifications from the TileManager when | |
| 128 // no raster tasks get scheduled. | |
| 129 class LayerTreeHostTestReadyToDraw : public LayerTreeHostTest { | |
|
enne (OOO)
2014/11/10 20:02:12
Can you add some DCHECK that verifies that this is
ernstm
2014/11/11 01:36:39
Done.
| |
| 130 public: | |
| 131 LayerTreeHostTestReadyToDraw() | |
| 132 : did_notify_ready_to_draw_(false), | |
| 133 all_tiles_required_for_draw_are_ready_to_draw_(false) {} | |
| 134 | |
| 135 void BeginTest() override { PostSetNeedsCommitToMainThread(); } | |
| 136 | |
| 137 void NotifyReadyToDrawOnThread(LayerTreeHostImpl* impl) override { | |
| 138 did_notify_ready_to_draw_ = true; | |
| 139 const std::vector<PictureLayerImpl*>& layers = impl->GetPictureLayers(); | |
| 140 all_tiles_required_for_draw_are_ready_to_draw_ = true; | |
| 141 for (const auto& layer : layers) { | |
| 142 if (!layer->AllTilesRequiredForDrawAreReadyToDraw()) | |
| 143 all_tiles_required_for_draw_are_ready_to_draw_ = false; | |
| 144 } | |
| 145 EndTest(); | |
| 146 } | |
| 147 | |
| 148 void AfterTest() override { | |
| 149 EXPECT_TRUE(did_notify_ready_to_draw_); | |
| 150 EXPECT_TRUE(all_tiles_required_for_draw_are_ready_to_draw_); | |
| 151 } | |
| 152 | |
| 153 private: | |
| 154 bool did_notify_ready_to_draw_; | |
| 155 bool all_tiles_required_for_draw_are_ready_to_draw_; | |
| 156 }; | |
| 157 | |
| 158 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestReadyToDraw); | |
| 159 | |
| 160 // Test if the LTHI receives ReadyToDraw notifications from the TileManager when | |
| 161 // some raster tasks flagged as REQUIRED_FOR_DRAW got scheduled. | |
| 162 class LayerTreeHostTestReadyToDrawNonEmpty | |
|
enne (OOO)
2014/11/10 20:02:12
Can you add some DCHECK that verifies that this is
ernstm
2014/11/11 01:36:39
Done.
| |
| 163 : public LayerTreeHostTestReadyToDraw { | |
| 164 public: | |
| 165 void SetupTree() override { | |
| 166 client_.set_fill_with_nonsolid_color(true); | |
| 167 scoped_refptr<FakePictureLayer> root_layer = | |
| 168 FakePictureLayer::Create(&client_); | |
| 169 root_layer->SetBounds(gfx::Size(1024, 1024)); | |
| 170 root_layer->SetIsDrawable(true); | |
| 171 | |
| 172 layer_tree_host()->SetRootLayer(root_layer); | |
| 173 LayerTreeHostTest::SetupTree(); | |
| 174 } | |
| 175 | |
| 176 private: | |
| 177 FakeContentLayerClient client_; | |
| 178 }; | |
| 179 | |
| 180 // Note: With this test setup, we only get tiles flagged as REQUIRED_FOR_DRAW in | |
| 181 // single threaded mode. | |
| 182 SINGLE_THREAD_IMPL_TEST_F(LayerTreeHostTestReadyToDrawNonEmpty); | |
| 183 | |
| 72 // Two setNeedsCommits in a row should lead to at least 1 commit and at least 1 | 184 // Two setNeedsCommits in a row should lead to at least 1 commit and at least 1 |
| 73 // draw with frame 0. | 185 // draw with frame 0. |
| 74 class LayerTreeHostTestSetNeedsCommit1 : public LayerTreeHostTest { | 186 class LayerTreeHostTestSetNeedsCommit1 : public LayerTreeHostTest { |
| 75 public: | 187 public: |
| 76 LayerTreeHostTestSetNeedsCommit1() : num_commits_(0), num_draws_(0) {} | 188 LayerTreeHostTestSetNeedsCommit1() : num_commits_(0), num_draws_(0) {} |
| 77 | 189 |
| 78 void BeginTest() override { | 190 void BeginTest() override { |
| 79 PostSetNeedsCommitToMainThread(); | 191 PostSetNeedsCommitToMainThread(); |
| 80 PostSetNeedsCommitToMainThread(); | 192 PostSetNeedsCommitToMainThread(); |
| 81 } | 193 } |
| (...skipping 5117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5199 void AfterTest() override { | 5311 void AfterTest() override { |
| 5200 EXPECT_TRUE(deltas_sent_to_client_); | 5312 EXPECT_TRUE(deltas_sent_to_client_); |
| 5201 } | 5313 } |
| 5202 | 5314 |
| 5203 ScrollAndScaleSet info_; | 5315 ScrollAndScaleSet info_; |
| 5204 bool deltas_sent_to_client_; | 5316 bool deltas_sent_to_client_; |
| 5205 }; | 5317 }; |
| 5206 | 5318 |
| 5207 MULTI_THREAD_TEST_F(LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer); | 5319 MULTI_THREAD_TEST_F(LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer); |
| 5208 } // namespace cc | 5320 } // namespace cc |
| OLD | NEW |