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 |