Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(831)

Side by Side Diff: cc/layers/picture_layer_unittest.cc

Issue 1982893002: [blimp] Add SkPicture caching support. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: git merge origin/master Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/layers/picture_layer.h" 5 #include "cc/layers/picture_layer.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 void set_update_source_frame_number(int number) { 54 void set_update_source_frame_number(int number) {
55 update_source_frame_number_ = number; 55 update_source_frame_number_ = number;
56 } 56 }
57 57
58 void set_is_mask(bool is_mask) { is_mask_ = is_mask; } 58 void set_is_mask(bool is_mask) { is_mask_ = is_mask; }
59 59
60 void set_nearest_neighbor(bool nearest_neighbor) { 60 void set_nearest_neighbor(bool nearest_neighbor) {
61 nearest_neighbor_ = nearest_neighbor; 61 nearest_neighbor_ = nearest_neighbor;
62 } 62 }
63 63
64 void ValidateSerialization() { 64 void ValidateSerialization(
65 proto::LayerProperties proto; 65 ImageSerializationProcessor* image_serialization_processor) {
66 LayerSpecificPropertiesToProto(&proto);
67
68 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D); 66 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D);
69 TestTaskGraphRunner task_graph_runner; 67 TestTaskGraphRunner task_graph_runner;
70 LayerTreeSettings settings; 68 LayerTreeSettings settings;
71 std::unique_ptr<FakeImageSerializationProcessor> 69 std::unique_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(
72 fake_image_serialization_processor = 70 &host_client, &task_graph_runner, settings,
73 base::WrapUnique(new FakeImageSerializationProcessor); 71 CompositorMode::SINGLE_THREADED, image_serialization_processor);
74 std::unique_ptr<FakeLayerTreeHost> host = 72 host->InitializePictureCacheForTesting();
75 FakeLayerTreeHost::Create(&host_client, &task_graph_runner, settings,
76 CompositorMode::SINGLE_THREADED,
77 fake_image_serialization_processor.get());
78 scoped_refptr<TestSerializationPictureLayer> layer = 73 scoped_refptr<TestSerializationPictureLayer> layer =
79 TestSerializationPictureLayer::Create(recording_source_viewport_); 74 TestSerializationPictureLayer::Create(recording_source_viewport_);
80 host->SetRootLayer(layer); 75 host->SetRootLayer(layer);
76
77 recording_source()->SetEnginePictureCache(host->engine_picture_cache());
78
79 proto::LayerProperties proto;
80 LayerSpecificPropertiesToProto(&proto);
81 // The EnginePictureCache will be invalid after this method ends, so ensure
82 // the recording source does not use it when the layer under test is
83 // destructed.
84 recording_source()->SetEnginePictureCache(nullptr);
85
86 // The client must have the ClientPictureCache available during
87 // deserialization.
88 layer->recording_source()->SetClientPictureCache(
89 host->client_picture_cache());
90
81 layer->FromLayerSpecificPropertiesProto(proto); 91 layer->FromLayerSpecificPropertiesProto(proto);
82 92
83 // Validate that the PictureLayer specific fields are properly set. 93 // Validate that the PictureLayer specific fields are properly set.
84 EXPECT_TRUE(recording_source()->EqualsTo(*layer->recording_source())); 94 EXPECT_TRUE(recording_source()->EqualsTo(*layer->recording_source()));
85 EXPECT_EQ(update_source_frame_number_, layer->update_source_frame_number_); 95 EXPECT_EQ(update_source_frame_number_, layer->update_source_frame_number_);
86 EXPECT_EQ(is_mask_, layer->is_mask_); 96 EXPECT_EQ(is_mask_, layer->is_mask_);
87 EXPECT_EQ(nearest_neighbor_, layer->nearest_neighbor_); 97 EXPECT_EQ(nearest_neighbor_, layer->nearest_neighbor_);
88 } 98 }
89 99
90 private: 100 private:
(...skipping 15 matching lines...) Expand all
106 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D); 116 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D);
107 TestTaskGraphRunner task_graph_runner; 117 TestTaskGraphRunner task_graph_runner;
108 LayerTreeSettings settings; 118 LayerTreeSettings settings;
109 std::unique_ptr<FakeImageSerializationProcessor> 119 std::unique_ptr<FakeImageSerializationProcessor>
110 fake_image_serialization_processor = 120 fake_image_serialization_processor =
111 base::WrapUnique(new FakeImageSerializationProcessor); 121 base::WrapUnique(new FakeImageSerializationProcessor);
112 std::unique_ptr<FakeLayerTreeHost> host = 122 std::unique_ptr<FakeLayerTreeHost> host =
113 FakeLayerTreeHost::Create(&host_client, &task_graph_runner, settings, 123 FakeLayerTreeHost::Create(&host_client, &task_graph_runner, settings,
114 CompositorMode::SINGLE_THREADED, 124 CompositorMode::SINGLE_THREADED,
115 fake_image_serialization_processor.get()); 125 fake_image_serialization_processor.get());
126 host->InitializePictureCacheForTesting();
116 127
117 gfx::Size recording_source_viewport(256, 256); 128 gfx::Size recording_source_viewport(256, 256);
118 scoped_refptr<TestSerializationPictureLayer> layer = 129 scoped_refptr<TestSerializationPictureLayer> layer =
119 TestSerializationPictureLayer::Create(recording_source_viewport); 130 TestSerializationPictureLayer::Create(recording_source_viewport);
120 host->SetRootLayer(layer); 131 host->SetRootLayer(layer);
121 132
122 Region region(gfx::Rect(14, 15, 16, 17)); 133 Region region(gfx::Rect(14, 15, 16, 17));
123 layer->set_invalidation(region); 134 layer->set_invalidation(region);
124 layer->set_is_mask(true); 135 layer->set_is_mask(true);
125 layer->set_nearest_neighbor(true); 136 layer->set_nearest_neighbor(true);
126 137
127 layer->SetBounds(recording_source_viewport); 138 layer->SetBounds(recording_source_viewport);
128 layer->set_update_source_frame_number(0); 139 layer->set_update_source_frame_number(0);
129 layer->recording_source()->SetDisplayListUsesCachedPicture(false); 140 layer->recording_source()->SetDisplayListUsesCachedPicture(false);
130 layer->recording_source()->add_draw_rect( 141 layer->recording_source()->add_draw_rect(
131 gfx::Rect(recording_source_viewport)); 142 gfx::Rect(recording_source_viewport));
132 layer->recording_source()->SetGenerateDiscardableImagesMetadata(true); 143 layer->recording_source()->SetGenerateDiscardableImagesMetadata(true);
133 layer->recording_source()->Rerecord(); 144 layer->recording_source()->Rerecord();
134 layer->ValidateSerialization(); 145 layer->ValidateSerialization(fake_image_serialization_processor.get());
135 } 146 }
136 147
137 TEST(PictureLayerTest, TestSerializationDeserialization) { 148 TEST(PictureLayerTest, TestSerializationDeserialization) {
138 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D); 149 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D);
139 TestTaskGraphRunner task_graph_runner; 150 TestTaskGraphRunner task_graph_runner;
140 std::unique_ptr<FakeImageSerializationProcessor> 151 std::unique_ptr<FakeImageSerializationProcessor>
141 fake_image_serialization_processor = 152 fake_image_serialization_processor =
142 base::WrapUnique(new FakeImageSerializationProcessor); 153 base::WrapUnique(new FakeImageSerializationProcessor);
143 std::unique_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create( 154 std::unique_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(
144 &host_client, &task_graph_runner, LayerTreeSettings(), 155 &host_client, &task_graph_runner, LayerTreeSettings(),
145 CompositorMode::SINGLE_THREADED, 156 CompositorMode::SINGLE_THREADED,
146 fake_image_serialization_processor.get()); 157 fake_image_serialization_processor.get());
158 host->InitializePictureCacheForTesting();
159
147 gfx::Size recording_source_viewport(256, 256); 160 gfx::Size recording_source_viewport(256, 256);
148 scoped_refptr<TestSerializationPictureLayer> layer = 161 scoped_refptr<TestSerializationPictureLayer> layer =
149 TestSerializationPictureLayer::Create(recording_source_viewport); 162 TestSerializationPictureLayer::Create(recording_source_viewport);
150 host->SetRootLayer(layer); 163 host->SetRootLayer(layer);
151 164
152 layer->SetBounds(recording_source_viewport); 165 layer->SetBounds(recording_source_viewport);
153 layer->set_update_source_frame_number(0); 166 layer->set_update_source_frame_number(0);
154 layer->recording_source()->SetDisplayListUsesCachedPicture(false); 167 layer->recording_source()->SetDisplayListUsesCachedPicture(false);
155 layer->recording_source()->add_draw_rect( 168 layer->recording_source()->add_draw_rect(
156 gfx::Rect(recording_source_viewport)); 169 gfx::Rect(recording_source_viewport));
157 layer->recording_source()->SetGenerateDiscardableImagesMetadata(true); 170 layer->recording_source()->SetGenerateDiscardableImagesMetadata(true);
158 layer->recording_source()->Rerecord(); 171 layer->recording_source()->Rerecord();
159 layer->ValidateSerialization(); 172 layer->ValidateSerialization(fake_image_serialization_processor.get());
160 } 173 }
161 174
162 TEST(PictureLayerTest, TestEmptySerializationDeserialization) { 175 TEST(PictureLayerTest, TestEmptySerializationDeserialization) {
176 std::unique_ptr<FakeImageSerializationProcessor>
177 fake_image_serialization_processor =
178 base::WrapUnique(new FakeImageSerializationProcessor);
163 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D); 179 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D);
164 TestTaskGraphRunner task_graph_runner; 180 TestTaskGraphRunner task_graph_runner;
165 std::unique_ptr<FakeLayerTreeHost> host = 181 std::unique_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(
166 FakeLayerTreeHost::Create(&host_client, &task_graph_runner); 182 &host_client, &task_graph_runner, LayerTreeSettings(),
183 CompositorMode::SINGLE_THREADED,
184 fake_image_serialization_processor.get());
167 185
168 gfx::Size recording_source_viewport(256, 256); 186 gfx::Size recording_source_viewport(256, 256);
169 scoped_refptr<TestSerializationPictureLayer> layer = 187 scoped_refptr<TestSerializationPictureLayer> layer =
170 TestSerializationPictureLayer::Create(recording_source_viewport); 188 TestSerializationPictureLayer::Create(recording_source_viewport);
171 host->SetRootLayer(layer); 189 host->SetRootLayer(layer);
172 layer->ValidateSerialization(); 190 layer->ValidateSerialization(fake_image_serialization_processor.get());
173 } 191 }
174 192
175 TEST(PictureLayerTest, NoTilesIfEmptyBounds) { 193 TEST(PictureLayerTest, NoTilesIfEmptyBounds) {
176 ContentLayerClient* client = EmptyContentLayerClient::GetInstance(); 194 ContentLayerClient* client = EmptyContentLayerClient::GetInstance();
177 scoped_refptr<PictureLayer> layer = PictureLayer::Create(client); 195 scoped_refptr<PictureLayer> layer = PictureLayer::Create(client);
178 layer->SetBounds(gfx::Size(10, 10)); 196 layer->SetBounds(gfx::Size(10, 10));
179 197
180 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D); 198 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D);
181 TestTaskGraphRunner task_graph_runner; 199 TestTaskGraphRunner task_graph_runner;
182 std::unique_ptr<FakeLayerTreeHost> host = 200 std::unique_ptr<FakeLayerTreeHost> host =
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 // Do a main frame, record the picture layers. The frame number has changed 497 // Do a main frame, record the picture layers. The frame number has changed
480 // non-monotonically. 498 // non-monotonically.
481 layer->SetNeedsDisplay(); 499 layer->SetNeedsDisplay();
482 host2->Composite(base::TimeTicks::Now()); 500 host2->Composite(base::TimeTicks::Now());
483 EXPECT_EQ(3, layer->update_count()); 501 EXPECT_EQ(3, layer->update_count());
484 EXPECT_EQ(1, host2->source_frame_number()); 502 EXPECT_EQ(1, host2->source_frame_number());
485 } 503 }
486 504
487 } // namespace 505 } // namespace
488 } // namespace cc 506 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698