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 74e73a25dccf4550cf8aa4d94b0a6b763809103c..cd7862f08c139ff001064e8a2153bb7600d2b2eb 100644 |
--- a/cc/trees/layer_tree_host_unittest.cc |
+++ b/cc/trees/layer_tree_host_unittest.cc |
@@ -4965,7 +4965,7 @@ class LayerTreeHostTestGpuRasterizationEnabled : public LayerTreeHostTest { |
EXPECT_TRUE(layer_tree_host()->has_gpu_rasterization_trigger()); |
// Content-based veto is relevant as well. |
- recording_source_->SetUnsuitableForGpuRasterization(); |
+ recording_source_->SetForceUnsuitableForGpuRasterization(true); |
// Veto will take effect when layers are updated. |
// The results will be verified after commit is completed below. |
@@ -5002,6 +5002,93 @@ class LayerTreeHostTestGpuRasterizationEnabled : public LayerTreeHostTest { |
MULTI_THREAD_TEST_F(LayerTreeHostTestGpuRasterizationEnabled); |
+class LayerTreeHostTestGpuRasterizationReenabled : public LayerTreeHostTest { |
+ protected: |
+ void InitializeSettings(LayerTreeSettings* settings) override { |
+ EXPECT_FALSE(settings->gpu_rasterization_enabled); |
+ settings->gpu_rasterization_enabled = true; |
+ } |
+ |
+ void SetupTree() override { |
+ LayerTreeHostTest::SetupTree(); |
+ |
+ std::unique_ptr<FakeRecordingSource> recording_source( |
+ new FakeRecordingSource); |
+ recording_source_ = recording_source.get(); |
+ |
+ scoped_refptr<FakePictureLayer> layer = |
+ FakePictureLayer::CreateWithRecordingSource( |
+ &layer_client_, std::move(recording_source)); |
+ layer_ = layer.get(); |
+ layer->SetBounds(gfx::Size(10, 10)); |
+ layer->SetIsDrawable(true); |
+ layer_tree_host()->root_layer()->AddChild(layer); |
+ layer_client_.set_bounds(layer_->bounds()); |
+ } |
+ |
+ void BeginTest() override { |
+ // Verify default value. |
+ EXPECT_FALSE(layer_tree_host()->has_gpu_rasterization_trigger()); |
+ |
+ // Gpu rasterization trigger is relevant. |
+ layer_tree_host()->SetHasGpuRasterizationTrigger(true); |
+ EXPECT_TRUE(layer_tree_host()->has_gpu_rasterization_trigger()); |
+ |
+ // Content-based veto is relevant as well. |
+ recording_source_->SetForceUnsuitableForGpuRasterization(true); |
+ |
+ // Veto will take effect when layers are updated. |
+ // The results will be verified after commit is completed below. |
+ // Since we are manually marking the source as unsuitable, |
+ // make sure that the layer gets a chance to update. |
+ layer_->SetNeedsDisplay(); |
+ PostSetNeedsCommitToMainThread(); |
+ } |
+ |
+ void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
+ SCOPED_TRACE(base::StringPrintf("commit %d", num_commits_)); |
+ if (expected_gpu_enabled_) { |
+ EXPECT_TRUE(host_impl->use_gpu_rasterization()); |
+ } else { |
+ EXPECT_FALSE(host_impl->use_gpu_rasterization()); |
+ } |
+ |
+ ++num_commits_; |
+ // Every 10 commits, we will try to reenable the gpu rasterization until |
+ // (and we won't reenable after we've done it 5 times). |
+ // |
+ // So, the test expects on a multiple of 10 commits to have gpu enabled, |
+ // next commit we'll disable it and expect that it's disabled, and the next |
+ // commit we'll make content suitable again which should be picked up on the |
+ // next multiple of 10. At commit 60, we would've re-enabled it 5 times |
+ // already, so we expect it to remain disabled. |
+ if (num_commits_ >= 60) { |
+ expected_gpu_enabled_ = false; |
+ } else if ((num_commits_ % 10) == 0) { |
+ expected_gpu_enabled_ = true; |
+ } else if ((num_commits_ % 10) == 1) { |
+ recording_source_->SetForceUnsuitableForGpuRasterization(true); |
+ expected_gpu_enabled_ = false; |
+ } else if ((num_commits_ % 10) == 2) { |
+ recording_source_->SetForceUnsuitableForGpuRasterization(false); |
+ } |
+ |
+ PostSetNeedsCommitToMainThread(); |
+ if (num_commits_ > 80) |
+ EndTest(); |
+ } |
+ |
+ void AfterTest() override {} |
+ |
+ FakeContentLayerClient layer_client_; |
+ FakePictureLayer* layer_; |
+ FakeRecordingSource* recording_source_; |
+ int num_commits_ = 0; |
+ bool expected_gpu_enabled_ = false; |
+}; |
+ |
+MULTI_THREAD_TEST_F(LayerTreeHostTestGpuRasterizationReenabled); |
+ |
class LayerTreeHostTestGpuRasterizationForced : public LayerTreeHostTest { |
protected: |
void InitializeSettings(LayerTreeSettings* settings) override { |
@@ -5036,7 +5123,7 @@ class LayerTreeHostTestGpuRasterizationForced : public LayerTreeHostTest { |
EXPECT_TRUE(layer_tree_host()->has_gpu_rasterization_trigger()); |
// Content-based veto is irrelevant as well. |
- recording_source_->SetUnsuitableForGpuRasterization(); |
+ recording_source_->SetForceUnsuitableForGpuRasterization(true); |
// Veto will take effect when layers are updated. |
// The results will be verified after commit is completed below. |