| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <set> | 5 #include <set> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/location.h" | 8 #include "base/location.h" |
| 9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" |
| 10 #include "base/thread_task_runner_handle.h" | 10 #include "base/thread_task_runner_handle.h" |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 layer_tree_host()->SetRootLayer(layer_); | 136 layer_tree_host()->SetRootLayer(layer_); |
| 137 | 137 |
| 138 // Should have SurfaceSequence from first tree. | 138 // Should have SurfaceSequence from first tree. |
| 139 SurfaceSequence expected(1u, 1u); | 139 SurfaceSequence expected(1u, 1u); |
| 140 EXPECT_TRUE(required_id_ == SurfaceId(1)); | 140 EXPECT_TRUE(required_id_ == SurfaceId(1)); |
| 141 EXPECT_EQ(1u, required_set_.size()); | 141 EXPECT_EQ(1u, required_set_.size()); |
| 142 EXPECT_TRUE(required_set_.count(expected)); | 142 EXPECT_TRUE(required_set_.count(expected)); |
| 143 | 143 |
| 144 gfx::Size bounds(100, 100); | 144 gfx::Size bounds(100, 100); |
| 145 layer_tree_host()->SetViewportSize(bounds); | 145 layer_tree_host()->SetViewportSize(bounds); |
| 146 |
| 147 blank_layer_ = SolidColorLayer::Create(layer_settings()); |
| 148 blank_layer_->SetIsDrawable(true); |
| 149 blank_layer_->SetBounds(gfx::Size(10, 10)); |
| 150 |
| 146 PostSetNeedsCommitToMainThread(); | 151 PostSetNeedsCommitToMainThread(); |
| 147 } | 152 } |
| 148 | 153 |
| 154 virtual void ChangeTree() = 0; |
| 155 |
| 149 void DidCommitAndDrawFrame() override { | 156 void DidCommitAndDrawFrame() override { |
| 150 base::ThreadTaskRunnerHandle::Get()->PostTask( | 157 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 151 FROM_HERE, base::Bind(&SurfaceLayerSwapPromise::ChangeTree, | 158 FROM_HERE, base::Bind(&SurfaceLayerSwapPromise::ChangeTree, |
| 152 base::Unretained(this))); | 159 base::Unretained(this))); |
| 153 } | 160 } |
| 154 | 161 |
| 155 void ChangeTree() { | 162 protected: |
| 163 int commit_count_; |
| 164 bool sequence_was_satisfied_; |
| 165 scoped_refptr<SurfaceLayer> layer_; |
| 166 scoped_refptr<Layer> blank_layer_; |
| 167 SurfaceSequence satisfied_sequence_; |
| 168 |
| 169 SurfaceId required_id_; |
| 170 std::set<SurfaceSequence> required_set_; |
| 171 }; |
| 172 |
| 173 // Check that SurfaceSequence is sent through swap promise. |
| 174 class SurfaceLayerSwapPromiseWithDraw : public SurfaceLayerSwapPromise { |
| 175 public: |
| 176 SurfaceLayerSwapPromiseWithDraw() : SurfaceLayerSwapPromise() {} |
| 177 |
| 178 void ChangeTree() override { |
| 156 ++commit_count_; | 179 ++commit_count_; |
| 157 switch (commit_count_) { | 180 switch (commit_count_) { |
| 158 case 1: | 181 case 1: |
| 159 // Remove SurfaceLayer from tree to cause SwapPromise to be created. | 182 // Remove SurfaceLayer from tree to cause SwapPromise to be created. |
| 160 blank_layer_ = SolidColorLayer::Create(layer_settings()); | |
| 161 blank_layer_->SetIsDrawable(true); | |
| 162 blank_layer_->SetBounds(gfx::Size(10, 10)); | |
| 163 layer_tree_host()->SetRootLayer(blank_layer_); | 183 layer_tree_host()->SetRootLayer(blank_layer_); |
| 164 break; | 184 break; |
| 165 case 2: | 185 case 2: |
| 166 break; | 186 break; |
| 167 default: | 187 default: |
| 168 NOTREACHED(); | 188 NOTREACHED(); |
| 169 break; | 189 break; |
| 170 } | 190 } |
| 171 } | 191 } |
| 172 | 192 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 186 } | 206 } |
| 187 } | 207 } |
| 188 | 208 |
| 189 void AfterTest() override { | 209 void AfterTest() override { |
| 190 EXPECT_TRUE(required_id_ == SurfaceId(1)); | 210 EXPECT_TRUE(required_id_ == SurfaceId(1)); |
| 191 EXPECT_EQ(1u, required_set_.size()); | 211 EXPECT_EQ(1u, required_set_.size()); |
| 192 // Sequence should have been satisfied through Swap, not with the | 212 // Sequence should have been satisfied through Swap, not with the |
| 193 // callback. | 213 // callback. |
| 194 EXPECT_TRUE(satisfied_sequence_.is_null()); | 214 EXPECT_TRUE(satisfied_sequence_.is_null()); |
| 195 } | 215 } |
| 196 | |
| 197 private: | |
| 198 int commit_count_; | |
| 199 bool sequence_was_satisfied_; | |
| 200 scoped_refptr<SurfaceLayer> layer_; | |
| 201 scoped_refptr<Layer> blank_layer_; | |
| 202 SurfaceSequence satisfied_sequence_; | |
| 203 | |
| 204 SurfaceId required_id_; | |
| 205 std::set<SurfaceSequence> required_set_; | |
| 206 }; | 216 }; |
| 207 | 217 |
| 208 // TODO(jbauman): Reenable on single thread once http://crbug.com/421923 is | 218 // TODO(jbauman): Reenable on single thread once http://crbug.com/421923 is |
| 209 // fixed. | 219 // fixed. |
| 210 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromise); | 220 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithDraw); |
| 221 |
| 222 // Check that SurfaceSequence is sent through swap promise and resolved when |
| 223 // swap fails. |
| 224 class SurfaceLayerSwapPromiseWithoutDraw : public SurfaceLayerSwapPromise { |
| 225 public: |
| 226 SurfaceLayerSwapPromiseWithoutDraw() : SurfaceLayerSwapPromise() {} |
| 227 |
| 228 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
| 229 LayerTreeHostImpl::FrameData* frame, |
| 230 DrawResult draw_result) override { |
| 231 return DRAW_ABORTED_MISSING_HIGH_RES_CONTENT; |
| 232 } |
| 233 |
| 234 void ChangeTree() override { |
| 235 ++commit_count_; |
| 236 switch (commit_count_) { |
| 237 case 1: |
| 238 // Remove SurfaceLayer from tree to cause SwapPromise to be created. |
| 239 layer_tree_host()->SetRootLayer(blank_layer_); |
| 240 break; |
| 241 case 2: |
| 242 layer_tree_host()->SetNeedsCommit(); |
| 243 break; |
| 244 default: |
| 245 EndTest(); |
| 246 break; |
| 247 } |
| 248 } |
| 249 |
| 250 void AfterTest() override { |
| 251 EXPECT_TRUE(required_id_ == SurfaceId(1)); |
| 252 EXPECT_EQ(1u, required_set_.size()); |
| 253 // Sequence should have been satisfied with the callback. |
| 254 EXPECT_TRUE(satisfied_sequence_ == SurfaceSequence(1u, 1u)); |
| 255 } |
| 256 }; |
| 257 |
| 258 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithoutDraw); |
| 211 | 259 |
| 212 } // namespace | 260 } // namespace |
| 213 } // namespace cc | 261 } // namespace cc |
| OLD | NEW |