| 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 "cc/surfaces/surface_aggregator.h" | 5 #include "cc/surfaces/surface_aggregator.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 namespace { | 35 namespace { |
| 36 | 36 |
| 37 static constexpr FrameSinkId kArbitraryRootFrameSinkId(1, 1); | 37 static constexpr FrameSinkId kArbitraryRootFrameSinkId(1, 1); |
| 38 static constexpr FrameSinkId kArbitraryChildFrameSinkId(2, 2); | 38 static constexpr FrameSinkId kArbitraryChildFrameSinkId(2, 2); |
| 39 static constexpr FrameSinkId kArbitraryMiddleFrameSinkId(3, 3); | 39 static constexpr FrameSinkId kArbitraryMiddleFrameSinkId(3, 3); |
| 40 static const base::UnguessableToken kArbitraryToken = | 40 static const base::UnguessableToken kArbitraryToken = |
| 41 base::UnguessableToken::Create(); | 41 base::UnguessableToken::Create(); |
| 42 | 42 |
| 43 SurfaceId InvalidSurfaceId() { | 43 SurfaceId InvalidSurfaceId() { |
| 44 static SurfaceId invalid(kArbitraryRootFrameSinkId, | 44 static SurfaceId invalid(kArbitraryRootFrameSinkId, |
| 45 LocalFrameId(0xdeadbeef, kArbitraryToken)); | 45 LocalSurfaceId(0xdeadbeef, kArbitraryToken)); |
| 46 return invalid; | 46 return invalid; |
| 47 } | 47 } |
| 48 | 48 |
| 49 gfx::Size SurfaceSize() { | 49 gfx::Size SurfaceSize() { |
| 50 static gfx::Size size(100, 100); | 50 static gfx::Size size(100, 100); |
| 51 return size; | 51 return size; |
| 52 } | 52 } |
| 53 | 53 |
| 54 class EmptySurfaceFactoryClient : public SurfaceFactoryClient { | 54 class EmptySurfaceFactoryClient : public SurfaceFactoryClient { |
| 55 public: | 55 public: |
| 56 void ReturnResources(const ReturnedResourceArray& resources) override {} | 56 void ReturnResources(const ReturnedResourceArray& resources) override {} |
| 57 | 57 |
| 58 void WillDrawSurface(const LocalFrameId& id, | 58 void WillDrawSurface(const LocalSurfaceId& id, |
| 59 const gfx::Rect& damage_rect) override { | 59 const gfx::Rect& damage_rect) override { |
| 60 last_local_frame_id_ = id; | 60 last_local_surface_id_ = id; |
| 61 last_damage_rect_ = damage_rect; | 61 last_damage_rect_ = damage_rect; |
| 62 } | 62 } |
| 63 | 63 |
| 64 void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override {} | 64 void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override {} |
| 65 | 65 |
| 66 gfx::Rect last_damage_rect_; | 66 gfx::Rect last_damage_rect_; |
| 67 LocalFrameId last_local_frame_id_; | 67 LocalSurfaceId last_local_surface_id_; |
| 68 }; | 68 }; |
| 69 | 69 |
| 70 class SurfaceAggregatorTest : public testing::Test { | 70 class SurfaceAggregatorTest : public testing::Test { |
| 71 public: | 71 public: |
| 72 explicit SurfaceAggregatorTest(bool use_damage_rect) | 72 explicit SurfaceAggregatorTest(bool use_damage_rect) |
| 73 : factory_(kArbitraryRootFrameSinkId, &manager_, &empty_client_), | 73 : factory_(kArbitraryRootFrameSinkId, &manager_, &empty_client_), |
| 74 aggregator_(&manager_, NULL, use_damage_rect) {} | 74 aggregator_(&manager_, NULL, use_damage_rect) {} |
| 75 | 75 |
| 76 SurfaceAggregatorTest() : SurfaceAggregatorTest(false) {} | 76 SurfaceAggregatorTest() : SurfaceAggregatorTest(false) {} |
| 77 | 77 |
| 78 void TearDown() override { | 78 void TearDown() override { |
| 79 factory_.EvictSurface(); | 79 factory_.EvictSurface(); |
| 80 testing::Test::TearDown(); | 80 testing::Test::TearDown(); |
| 81 } | 81 } |
| 82 | 82 |
| 83 protected: | 83 protected: |
| 84 SurfaceManager manager_; | 84 SurfaceManager manager_; |
| 85 EmptySurfaceFactoryClient empty_client_; | 85 EmptySurfaceFactoryClient empty_client_; |
| 86 SurfaceFactory factory_; | 86 SurfaceFactory factory_; |
| 87 SurfaceAggregator aggregator_; | 87 SurfaceAggregator aggregator_; |
| 88 }; | 88 }; |
| 89 | 89 |
| 90 TEST_F(SurfaceAggregatorTest, ValidSurfaceNoFrame) { | 90 TEST_F(SurfaceAggregatorTest, ValidSurfaceNoFrame) { |
| 91 LocalFrameId local_frame_id(7, base::UnguessableToken::Create()); | 91 LocalSurfaceId local_surface_id(7, base::UnguessableToken::Create()); |
| 92 SurfaceId one_id(kArbitraryRootFrameSinkId, local_frame_id); | 92 SurfaceId one_id(kArbitraryRootFrameSinkId, local_surface_id); |
| 93 factory_.SubmitCompositorFrame(local_frame_id, CompositorFrame(), | 93 factory_.SubmitCompositorFrame(local_surface_id, CompositorFrame(), |
| 94 SurfaceFactory::DrawCallback()); | 94 SurfaceFactory::DrawCallback()); |
| 95 | 95 |
| 96 CompositorFrame frame = aggregator_.Aggregate(one_id); | 96 CompositorFrame frame = aggregator_.Aggregate(one_id); |
| 97 EXPECT_TRUE(frame.render_pass_list.empty()); | 97 EXPECT_TRUE(frame.render_pass_list.empty()); |
| 98 } | 98 } |
| 99 | 99 |
| 100 class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { | 100 class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { |
| 101 public: | 101 public: |
| 102 explicit SurfaceAggregatorValidSurfaceTest(bool use_damage_rect) | 102 explicit SurfaceAggregatorValidSurfaceTest(bool use_damage_rect) |
| 103 : SurfaceAggregatorTest(use_damage_rect), | 103 : SurfaceAggregatorTest(use_damage_rect), |
| 104 child_factory_(kArbitraryChildFrameSinkId, | 104 child_factory_(kArbitraryChildFrameSinkId, |
| 105 &manager_, | 105 &manager_, |
| 106 &empty_child_client_) {} | 106 &empty_child_client_) {} |
| 107 SurfaceAggregatorValidSurfaceTest() | 107 SurfaceAggregatorValidSurfaceTest() |
| 108 : SurfaceAggregatorValidSurfaceTest(false) {} | 108 : SurfaceAggregatorValidSurfaceTest(false) {} |
| 109 | 109 |
| 110 void SetUp() override { | 110 void SetUp() override { |
| 111 SurfaceAggregatorTest::SetUp(); | 111 SurfaceAggregatorTest::SetUp(); |
| 112 root_local_frame_id_ = allocator_.GenerateId(); | 112 root_local_surface_id_ = allocator_.GenerateId(); |
| 113 root_surface_ = manager_.GetSurfaceForId( | 113 root_surface_ = manager_.GetSurfaceForId( |
| 114 SurfaceId(factory_.frame_sink_id(), root_local_frame_id_)); | 114 SurfaceId(factory_.frame_sink_id(), root_local_surface_id_)); |
| 115 } | 115 } |
| 116 | 116 |
| 117 void TearDown() override { | 117 void TearDown() override { |
| 118 child_factory_.EvictSurface(); | 118 child_factory_.EvictSurface(); |
| 119 SurfaceAggregatorTest::TearDown(); | 119 SurfaceAggregatorTest::TearDown(); |
| 120 } | 120 } |
| 121 | 121 |
| 122 void AggregateAndVerify(test::Pass* expected_passes, | 122 void AggregateAndVerify(test::Pass* expected_passes, |
| 123 size_t expected_pass_count, | 123 size_t expected_pass_count, |
| 124 SurfaceId* surface_ids, | 124 SurfaceId* surface_ids, |
| 125 size_t expected_surface_count) { | 125 size_t expected_surface_count) { |
| 126 CompositorFrame aggregated_frame = aggregator_.Aggregate( | 126 CompositorFrame aggregated_frame = aggregator_.Aggregate( |
| 127 SurfaceId(factory_.frame_sink_id(), root_local_frame_id_)); | 127 SurfaceId(factory_.frame_sink_id(), root_local_surface_id_)); |
| 128 | 128 |
| 129 TestPassesMatchExpectations(expected_passes, expected_pass_count, | 129 TestPassesMatchExpectations(expected_passes, expected_pass_count, |
| 130 &aggregated_frame.render_pass_list); | 130 &aggregated_frame.render_pass_list); |
| 131 | 131 |
| 132 // Ensure no duplicate pass ids output. | 132 // Ensure no duplicate pass ids output. |
| 133 std::set<int> used_passes; | 133 std::set<int> used_passes; |
| 134 for (const auto& pass : aggregated_frame.render_pass_list) { | 134 for (const auto& pass : aggregated_frame.render_pass_list) { |
| 135 EXPECT_TRUE(used_passes.insert(pass->id).second); | 135 EXPECT_TRUE(used_passes.insert(pass->id).second); |
| 136 } | 136 } |
| 137 | 137 |
| 138 EXPECT_EQ(expected_surface_count, | 138 EXPECT_EQ(expected_surface_count, |
| 139 aggregator_.previous_contained_surfaces().size()); | 139 aggregator_.previous_contained_surfaces().size()); |
| 140 for (size_t i = 0; i < expected_surface_count; i++) { | 140 for (size_t i = 0; i < expected_surface_count; i++) { |
| 141 EXPECT_TRUE( | 141 EXPECT_TRUE( |
| 142 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != | 142 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != |
| 143 aggregator_.previous_contained_surfaces().end()); | 143 aggregator_.previous_contained_surfaces().end()); |
| 144 } | 144 } |
| 145 } | 145 } |
| 146 | 146 |
| 147 void SubmitPassListAsFrame(SurfaceFactory* factory, | 147 void SubmitPassListAsFrame(SurfaceFactory* factory, |
| 148 const LocalFrameId& local_frame_id, | 148 const LocalSurfaceId& local_surface_id, |
| 149 RenderPassList* pass_list) { | 149 RenderPassList* pass_list) { |
| 150 CompositorFrame frame; | 150 CompositorFrame frame; |
| 151 pass_list->swap(frame.render_pass_list); | 151 pass_list->swap(frame.render_pass_list); |
| 152 | 152 |
| 153 factory->SubmitCompositorFrame(local_frame_id, std::move(frame), | 153 factory->SubmitCompositorFrame(local_surface_id, std::move(frame), |
| 154 SurfaceFactory::DrawCallback()); | 154 SurfaceFactory::DrawCallback()); |
| 155 } | 155 } |
| 156 | 156 |
| 157 void SubmitCompositorFrame(SurfaceFactory* factory, | 157 void SubmitCompositorFrame(SurfaceFactory* factory, |
| 158 test::Pass* passes, | 158 test::Pass* passes, |
| 159 size_t pass_count, | 159 size_t pass_count, |
| 160 const LocalFrameId& local_frame_id) { | 160 const LocalSurfaceId& local_surface_id) { |
| 161 RenderPassList pass_list; | 161 RenderPassList pass_list; |
| 162 AddPasses(&pass_list, gfx::Rect(SurfaceSize()), passes, pass_count); | 162 AddPasses(&pass_list, gfx::Rect(SurfaceSize()), passes, pass_count); |
| 163 SubmitPassListAsFrame(factory, local_frame_id, &pass_list); | 163 SubmitPassListAsFrame(factory, local_surface_id, &pass_list); |
| 164 } | 164 } |
| 165 | 165 |
| 166 void QueuePassAsFrame(std::unique_ptr<RenderPass> pass, | 166 void QueuePassAsFrame(std::unique_ptr<RenderPass> pass, |
| 167 const LocalFrameId& local_frame_id, | 167 const LocalSurfaceId& local_surface_id, |
| 168 SurfaceFactory* factory) { | 168 SurfaceFactory* factory) { |
| 169 CompositorFrame child_frame; | 169 CompositorFrame child_frame; |
| 170 child_frame.render_pass_list.push_back(std::move(pass)); | 170 child_frame.render_pass_list.push_back(std::move(pass)); |
| 171 | 171 |
| 172 factory->SubmitCompositorFrame(local_frame_id, std::move(child_frame), | 172 factory->SubmitCompositorFrame(local_surface_id, std::move(child_frame), |
| 173 SurfaceFactory::DrawCallback()); | 173 SurfaceFactory::DrawCallback()); |
| 174 } | 174 } |
| 175 | 175 |
| 176 protected: | 176 protected: |
| 177 LocalFrameId root_local_frame_id_; | 177 LocalSurfaceId root_local_surface_id_; |
| 178 Surface* root_surface_; | 178 Surface* root_surface_; |
| 179 SurfaceIdAllocator allocator_; | 179 SurfaceIdAllocator allocator_; |
| 180 EmptySurfaceFactoryClient empty_child_client_; | 180 EmptySurfaceFactoryClient empty_child_client_; |
| 181 SurfaceFactory child_factory_; | 181 SurfaceFactory child_factory_; |
| 182 SurfaceIdAllocator child_allocator_; | 182 SurfaceIdAllocator child_allocator_; |
| 183 }; | 183 }; |
| 184 | 184 |
| 185 // Tests that a very simple frame containing only two solid color quads makes it | 185 // Tests that a very simple frame containing only two solid color quads makes it |
| 186 // through the aggregator correctly. | 186 // through the aggregator correctly. |
| 187 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleFrame) { | 187 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleFrame) { |
| 188 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorRED), | 188 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorRED), |
| 189 test::Quad::SolidColorQuad(SK_ColorBLUE)}; | 189 test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
| 190 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; | 190 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
| 191 | 191 |
| 192 SubmitCompositorFrame(&factory_, passes, arraysize(passes), | 192 SubmitCompositorFrame(&factory_, passes, arraysize(passes), |
| 193 root_local_frame_id_); | 193 root_local_surface_id_); |
| 194 | 194 |
| 195 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 195 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 196 SurfaceId ids[] = {root_surface_id}; | 196 SurfaceId ids[] = {root_surface_id}; |
| 197 | 197 |
| 198 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); | 198 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); |
| 199 | 199 |
| 200 // Check that WillDrawSurface was called. | 200 // Check that WillDrawSurface was called. |
| 201 EXPECT_EQ(gfx::Rect(SurfaceSize()), empty_client_.last_damage_rect_); | 201 EXPECT_EQ(gfx::Rect(SurfaceSize()), empty_client_.last_damage_rect_); |
| 202 EXPECT_EQ(root_local_frame_id_, empty_client_.last_local_frame_id_); | 202 EXPECT_EQ(root_local_surface_id_, empty_client_.last_local_surface_id_); |
| 203 } | 203 } |
| 204 | 204 |
| 205 TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCopied) { | 205 TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCopied) { |
| 206 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, | 206 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, |
| 207 &empty_client_); | 207 &empty_client_); |
| 208 LocalFrameId embedded_local_frame_id = allocator_.GenerateId(); | 208 LocalSurfaceId embedded_local_surface_id = allocator_.GenerateId(); |
| 209 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), | 209 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), |
| 210 embedded_local_frame_id); | 210 embedded_local_surface_id); |
| 211 | 211 |
| 212 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), | 212 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
| 213 test::Quad::SolidColorQuad(SK_ColorBLUE)}; | 213 test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
| 214 test::Pass embedded_passes[] = { | 214 test::Pass embedded_passes[] = { |
| 215 test::Pass(embedded_quads, arraysize(embedded_quads))}; | 215 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
| 216 | 216 |
| 217 SubmitCompositorFrame(&embedded_factory, embedded_passes, | 217 SubmitCompositorFrame(&embedded_factory, embedded_passes, |
| 218 arraysize(embedded_passes), embedded_local_frame_id); | 218 arraysize(embedded_passes), embedded_local_surface_id); |
| 219 | 219 |
| 220 test::Quad quads[] = {test::Quad::SurfaceQuad(embedded_surface_id, .5f)}; | 220 test::Quad quads[] = {test::Quad::SurfaceQuad(embedded_surface_id, .5f)}; |
| 221 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; | 221 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
| 222 | 222 |
| 223 SubmitCompositorFrame(&factory_, passes, arraysize(passes), | 223 SubmitCompositorFrame(&factory_, passes, arraysize(passes), |
| 224 root_local_frame_id_); | 224 root_local_surface_id_); |
| 225 | 225 |
| 226 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 226 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 227 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 227 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 228 | 228 |
| 229 RenderPassList& render_pass_list(aggregated_frame.render_pass_list); | 229 RenderPassList& render_pass_list(aggregated_frame.render_pass_list); |
| 230 ASSERT_EQ(2u, render_pass_list.size()); | 230 ASSERT_EQ(2u, render_pass_list.size()); |
| 231 SharedQuadStateList& shared_quad_state_list( | 231 SharedQuadStateList& shared_quad_state_list( |
| 232 render_pass_list[0]->shared_quad_state_list); | 232 render_pass_list[0]->shared_quad_state_list); |
| 233 ASSERT_EQ(2u, shared_quad_state_list.size()); | 233 ASSERT_EQ(2u, shared_quad_state_list.size()); |
| 234 EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(0)->opacity); | 234 EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(0)->opacity); |
| 235 EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(1)->opacity); | 235 EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(1)->opacity); |
| 236 | 236 |
| 237 SharedQuadStateList& shared_quad_state_list2( | 237 SharedQuadStateList& shared_quad_state_list2( |
| 238 render_pass_list[1]->shared_quad_state_list); | 238 render_pass_list[1]->shared_quad_state_list); |
| 239 ASSERT_EQ(1u, shared_quad_state_list2.size()); | 239 ASSERT_EQ(1u, shared_quad_state_list2.size()); |
| 240 EXPECT_EQ(.5f, shared_quad_state_list2.ElementAt(0)->opacity); | 240 EXPECT_EQ(.5f, shared_quad_state_list2.ElementAt(0)->opacity); |
| 241 | 241 |
| 242 embedded_factory.EvictSurface(); | 242 embedded_factory.EvictSurface(); |
| 243 } | 243 } |
| 244 | 244 |
| 245 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSimpleFrame) { | 245 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSimpleFrame) { |
| 246 test::Quad quads[][2] = {{test::Quad::SolidColorQuad(SK_ColorWHITE), | 246 test::Quad quads[][2] = {{test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 247 test::Quad::SolidColorQuad(SK_ColorLTGRAY)}, | 247 test::Quad::SolidColorQuad(SK_ColorLTGRAY)}, |
| 248 {test::Quad::SolidColorQuad(SK_ColorGRAY), | 248 {test::Quad::SolidColorQuad(SK_ColorGRAY), |
| 249 test::Quad::SolidColorQuad(SK_ColorDKGRAY)}}; | 249 test::Quad::SolidColorQuad(SK_ColorDKGRAY)}}; |
| 250 test::Pass passes[] = {test::Pass(quads[0], arraysize(quads[0]), 1), | 250 test::Pass passes[] = {test::Pass(quads[0], arraysize(quads[0]), 1), |
| 251 test::Pass(quads[1], arraysize(quads[1]), 2)}; | 251 test::Pass(quads[1], arraysize(quads[1]), 2)}; |
| 252 | 252 |
| 253 SubmitCompositorFrame(&factory_, passes, arraysize(passes), | 253 SubmitCompositorFrame(&factory_, passes, arraysize(passes), |
| 254 root_local_frame_id_); | 254 root_local_surface_id_); |
| 255 | 255 |
| 256 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 256 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 257 SurfaceId ids[] = {root_surface_id}; | 257 SurfaceId ids[] = {root_surface_id}; |
| 258 | 258 |
| 259 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); | 259 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); |
| 260 } | 260 } |
| 261 | 261 |
| 262 // Ensure that the render pass ID map properly keeps and deletes entries. | 262 // Ensure that the render pass ID map properly keeps and deletes entries. |
| 263 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassDeallocation) { | 263 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassDeallocation) { |
| 264 test::Quad quads[][2] = {{test::Quad::SolidColorQuad(SK_ColorWHITE), | 264 test::Quad quads[][2] = {{test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 265 test::Quad::SolidColorQuad(SK_ColorLTGRAY)}, | 265 test::Quad::SolidColorQuad(SK_ColorLTGRAY)}, |
| 266 {test::Quad::SolidColorQuad(SK_ColorGRAY), | 266 {test::Quad::SolidColorQuad(SK_ColorGRAY), |
| 267 test::Quad::SolidColorQuad(SK_ColorDKGRAY)}}; | 267 test::Quad::SolidColorQuad(SK_ColorDKGRAY)}}; |
| 268 test::Pass passes[] = {test::Pass(quads[0], arraysize(quads[0]), 2), | 268 test::Pass passes[] = {test::Pass(quads[0], arraysize(quads[0]), 2), |
| 269 test::Pass(quads[1], arraysize(quads[1]), 1)}; | 269 test::Pass(quads[1], arraysize(quads[1]), 1)}; |
| 270 | 270 |
| 271 SubmitCompositorFrame(&factory_, passes, arraysize(passes), | 271 SubmitCompositorFrame(&factory_, passes, arraysize(passes), |
| 272 root_local_frame_id_); | 272 root_local_surface_id_); |
| 273 | 273 |
| 274 SurfaceId surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 274 SurfaceId surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 275 | 275 |
| 276 CompositorFrame aggregated_frame; | 276 CompositorFrame aggregated_frame; |
| 277 aggregated_frame = aggregator_.Aggregate(surface_id); | 277 aggregated_frame = aggregator_.Aggregate(surface_id); |
| 278 auto id0 = aggregated_frame.render_pass_list[0]->id; | 278 auto id0 = aggregated_frame.render_pass_list[0]->id; |
| 279 auto id1 = aggregated_frame.render_pass_list[1]->id; | 279 auto id1 = aggregated_frame.render_pass_list[1]->id; |
| 280 EXPECT_NE(id1, id0); | 280 EXPECT_NE(id1, id0); |
| 281 | 281 |
| 282 // Aggregated RenderPass ids should remain the same between frames. | 282 // Aggregated RenderPass ids should remain the same between frames. |
| 283 aggregated_frame = aggregator_.Aggregate(surface_id); | 283 aggregated_frame = aggregator_.Aggregate(surface_id); |
| 284 EXPECT_EQ(id0, aggregated_frame.render_pass_list[0]->id); | 284 EXPECT_EQ(id0, aggregated_frame.render_pass_list[0]->id); |
| 285 EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id); | 285 EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id); |
| 286 | 286 |
| 287 test::Pass passes2[] = {test::Pass(quads[0], arraysize(quads[0]), 3), | 287 test::Pass passes2[] = {test::Pass(quads[0], arraysize(quads[0]), 3), |
| 288 test::Pass(quads[1], arraysize(quads[1]), 1)}; | 288 test::Pass(quads[1], arraysize(quads[1]), 1)}; |
| 289 | 289 |
| 290 SubmitCompositorFrame(&factory_, passes2, arraysize(passes2), | 290 SubmitCompositorFrame(&factory_, passes2, arraysize(passes2), |
| 291 root_local_frame_id_); | 291 root_local_surface_id_); |
| 292 | 292 |
| 293 // The RenderPass that still exists should keep the same ID. | 293 // The RenderPass that still exists should keep the same ID. |
| 294 aggregated_frame = aggregator_.Aggregate(surface_id); | 294 aggregated_frame = aggregator_.Aggregate(surface_id); |
| 295 auto id2 = aggregated_frame.render_pass_list[0]->id; | 295 auto id2 = aggregated_frame.render_pass_list[0]->id; |
| 296 EXPECT_NE(id2, id1); | 296 EXPECT_NE(id2, id1); |
| 297 EXPECT_NE(id2, id0); | 297 EXPECT_NE(id2, id0); |
| 298 EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id); | 298 EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id); |
| 299 | 299 |
| 300 SubmitCompositorFrame(&factory_, passes, arraysize(passes), | 300 SubmitCompositorFrame(&factory_, passes, arraysize(passes), |
| 301 root_local_frame_id_); | 301 root_local_surface_id_); |
| 302 | 302 |
| 303 // |id1| didn't exist in the previous frame, so it should be | 303 // |id1| didn't exist in the previous frame, so it should be |
| 304 // mapped to a new ID. | 304 // mapped to a new ID. |
| 305 aggregated_frame = aggregator_.Aggregate(surface_id); | 305 aggregated_frame = aggregator_.Aggregate(surface_id); |
| 306 auto id3 = aggregated_frame.render_pass_list[0]->id; | 306 auto id3 = aggregated_frame.render_pass_list[0]->id; |
| 307 EXPECT_NE(id3, id2); | 307 EXPECT_NE(id3, id2); |
| 308 EXPECT_NE(id3, id1); | 308 EXPECT_NE(id3, id1); |
| 309 EXPECT_NE(id3, id0); | 309 EXPECT_NE(id3, id0); |
| 310 EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id); | 310 EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id); |
| 311 } | 311 } |
| 312 | 312 |
| 313 // This tests very simple embedding. root_surface has a frame containing a few | 313 // This tests very simple embedding. root_surface has a frame containing a few |
| 314 // solid color quads and a surface quad referencing embedded_surface. | 314 // solid color quads and a surface quad referencing embedded_surface. |
| 315 // embedded_surface has a frame containing only a solid color quad. The solid | 315 // embedded_surface has a frame containing only a solid color quad. The solid |
| 316 // color quad should be aggregated into the final frame. | 316 // color quad should be aggregated into the final frame. |
| 317 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleSurfaceReference) { | 317 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleSurfaceReference) { |
| 318 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, | 318 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, |
| 319 &empty_client_); | 319 &empty_client_); |
| 320 LocalFrameId embedded_local_frame_id = allocator_.GenerateId(); | 320 LocalSurfaceId embedded_local_surface_id = allocator_.GenerateId(); |
| 321 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), | 321 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), |
| 322 embedded_local_frame_id); | 322 embedded_local_surface_id); |
| 323 | 323 |
| 324 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; | 324 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| 325 test::Pass embedded_passes[] = { | 325 test::Pass embedded_passes[] = { |
| 326 test::Pass(embedded_quads, arraysize(embedded_quads))}; | 326 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
| 327 | 327 |
| 328 SubmitCompositorFrame(&embedded_factory, embedded_passes, | 328 SubmitCompositorFrame(&embedded_factory, embedded_passes, |
| 329 arraysize(embedded_passes), embedded_local_frame_id); | 329 arraysize(embedded_passes), embedded_local_surface_id); |
| 330 | 330 |
| 331 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 331 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 332 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), | 332 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
| 333 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 333 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 334 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 334 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
| 335 | 335 |
| 336 SubmitCompositorFrame(&factory_, root_passes, arraysize(root_passes), | 336 SubmitCompositorFrame(&factory_, root_passes, arraysize(root_passes), |
| 337 root_local_frame_id_); | 337 root_local_surface_id_); |
| 338 | 338 |
| 339 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 339 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 340 test::Quad::SolidColorQuad(SK_ColorGREEN), | 340 test::Quad::SolidColorQuad(SK_ColorGREEN), |
| 341 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 341 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 342 test::Pass expected_passes[] = { | 342 test::Pass expected_passes[] = { |
| 343 test::Pass(expected_quads, arraysize(expected_quads))}; | 343 test::Pass(expected_quads, arraysize(expected_quads))}; |
| 344 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 344 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 345 SurfaceId ids[] = {root_surface_id, embedded_surface_id}; | 345 SurfaceId ids[] = {root_surface_id, embedded_surface_id}; |
| 346 AggregateAndVerify( | 346 AggregateAndVerify( |
| 347 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); | 347 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
| 348 | 348 |
| 349 embedded_factory.EvictSurface(); | 349 embedded_factory.EvictSurface(); |
| 350 } | 350 } |
| 351 | 351 |
| 352 TEST_F(SurfaceAggregatorValidSurfaceTest, CopyRequest) { | 352 TEST_F(SurfaceAggregatorValidSurfaceTest, CopyRequest) { |
| 353 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, | 353 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, |
| 354 &empty_client_); | 354 &empty_client_); |
| 355 LocalFrameId embedded_local_frame_id = allocator_.GenerateId(); | 355 LocalSurfaceId embedded_local_surface_id = allocator_.GenerateId(); |
| 356 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), | 356 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), |
| 357 embedded_local_frame_id); | 357 embedded_local_surface_id); |
| 358 | 358 |
| 359 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; | 359 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| 360 test::Pass embedded_passes[] = { | 360 test::Pass embedded_passes[] = { |
| 361 test::Pass(embedded_quads, arraysize(embedded_quads))}; | 361 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
| 362 | 362 |
| 363 SubmitCompositorFrame(&embedded_factory, embedded_passes, | 363 SubmitCompositorFrame(&embedded_factory, embedded_passes, |
| 364 arraysize(embedded_passes), embedded_local_frame_id); | 364 arraysize(embedded_passes), embedded_local_surface_id); |
| 365 std::unique_ptr<CopyOutputRequest> copy_request( | 365 std::unique_ptr<CopyOutputRequest> copy_request( |
| 366 CopyOutputRequest::CreateEmptyRequest()); | 366 CopyOutputRequest::CreateEmptyRequest()); |
| 367 CopyOutputRequest* copy_request_ptr = copy_request.get(); | 367 CopyOutputRequest* copy_request_ptr = copy_request.get(); |
| 368 embedded_factory.RequestCopyOfSurface(std::move(copy_request)); | 368 embedded_factory.RequestCopyOfSurface(std::move(copy_request)); |
| 369 | 369 |
| 370 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 370 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 371 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), | 371 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
| 372 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 372 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 373 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 373 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
| 374 | 374 |
| 375 SubmitCompositorFrame(&factory_, root_passes, arraysize(root_passes), | 375 SubmitCompositorFrame(&factory_, root_passes, arraysize(root_passes), |
| 376 root_local_frame_id_); | 376 root_local_surface_id_); |
| 377 | 377 |
| 378 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 378 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 379 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 379 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 380 | 380 |
| 381 test::Quad expected_quads[] = { | 381 test::Quad expected_quads[] = { |
| 382 test::Quad::SolidColorQuad(SK_ColorWHITE), | 382 test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 383 test::Quad::RenderPassQuad(aggregated_frame.render_pass_list[0]->id), | 383 test::Quad::RenderPassQuad(aggregated_frame.render_pass_list[0]->id), |
| 384 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 384 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 385 test::Pass expected_passes[] = { | 385 test::Pass expected_passes[] = { |
| 386 test::Pass(embedded_quads, arraysize(embedded_quads)), | 386 test::Pass(embedded_quads, arraysize(embedded_quads)), |
| 387 test::Pass(expected_quads, arraysize(expected_quads))}; | 387 test::Pass(expected_quads, arraysize(expected_quads))}; |
| 388 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), | 388 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), |
| (...skipping 12 matching lines...) Expand all Loading... |
| 401 aggregator_.previous_contained_surfaces().end()); | 401 aggregator_.previous_contained_surfaces().end()); |
| 402 } | 402 } |
| 403 | 403 |
| 404 embedded_factory.EvictSurface(); | 404 embedded_factory.EvictSurface(); |
| 405 } | 405 } |
| 406 | 406 |
| 407 // Root surface may contain copy requests. | 407 // Root surface may contain copy requests. |
| 408 TEST_F(SurfaceAggregatorValidSurfaceTest, RootCopyRequest) { | 408 TEST_F(SurfaceAggregatorValidSurfaceTest, RootCopyRequest) { |
| 409 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, | 409 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, |
| 410 &empty_client_); | 410 &empty_client_); |
| 411 LocalFrameId embedded_local_frame_id = allocator_.GenerateId(); | 411 LocalSurfaceId embedded_local_surface_id = allocator_.GenerateId(); |
| 412 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), | 412 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), |
| 413 embedded_local_frame_id); | 413 embedded_local_surface_id); |
| 414 | 414 |
| 415 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; | 415 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| 416 test::Pass embedded_passes[] = { | 416 test::Pass embedded_passes[] = { |
| 417 test::Pass(embedded_quads, arraysize(embedded_quads))}; | 417 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
| 418 | 418 |
| 419 SubmitCompositorFrame(&embedded_factory, embedded_passes, | 419 SubmitCompositorFrame(&embedded_factory, embedded_passes, |
| 420 arraysize(embedded_passes), embedded_local_frame_id); | 420 arraysize(embedded_passes), embedded_local_surface_id); |
| 421 std::unique_ptr<CopyOutputRequest> copy_request( | 421 std::unique_ptr<CopyOutputRequest> copy_request( |
| 422 CopyOutputRequest::CreateEmptyRequest()); | 422 CopyOutputRequest::CreateEmptyRequest()); |
| 423 CopyOutputRequest* copy_request_ptr = copy_request.get(); | 423 CopyOutputRequest* copy_request_ptr = copy_request.get(); |
| 424 std::unique_ptr<CopyOutputRequest> copy_request2( | 424 std::unique_ptr<CopyOutputRequest> copy_request2( |
| 425 CopyOutputRequest::CreateEmptyRequest()); | 425 CopyOutputRequest::CreateEmptyRequest()); |
| 426 CopyOutputRequest* copy_request2_ptr = copy_request2.get(); | 426 CopyOutputRequest* copy_request2_ptr = copy_request2.get(); |
| 427 | 427 |
| 428 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 428 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 429 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), | 429 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
| 430 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 430 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 431 test::Quad root_quads2[] = {test::Quad::SolidColorQuad(SK_ColorRED)}; | 431 test::Quad root_quads2[] = {test::Quad::SolidColorQuad(SK_ColorRED)}; |
| 432 test::Pass root_passes[] = { | 432 test::Pass root_passes[] = { |
| 433 test::Pass(root_quads, arraysize(root_quads), 1), | 433 test::Pass(root_quads, arraysize(root_quads), 1), |
| 434 test::Pass(root_quads2, arraysize(root_quads2), 2)}; | 434 test::Pass(root_quads2, arraysize(root_quads2), 2)}; |
| 435 { | 435 { |
| 436 CompositorFrame frame; | 436 CompositorFrame frame; |
| 437 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 437 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
| 438 arraysize(root_passes)); | 438 arraysize(root_passes)); |
| 439 frame.render_pass_list[0]->copy_requests.push_back(std::move(copy_request)); | 439 frame.render_pass_list[0]->copy_requests.push_back(std::move(copy_request)); |
| 440 frame.render_pass_list[1]->copy_requests.push_back( | 440 frame.render_pass_list[1]->copy_requests.push_back( |
| 441 std::move(copy_request2)); | 441 std::move(copy_request2)); |
| 442 | 442 |
| 443 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(frame), | 443 factory_.SubmitCompositorFrame(root_local_surface_id_, std::move(frame), |
| 444 SurfaceFactory::DrawCallback()); | 444 SurfaceFactory::DrawCallback()); |
| 445 } | 445 } |
| 446 | 446 |
| 447 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 447 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 448 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 448 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 449 | 449 |
| 450 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 450 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 451 test::Quad::SolidColorQuad(SK_ColorGREEN), | 451 test::Quad::SolidColorQuad(SK_ColorGREEN), |
| 452 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 452 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 453 test::Pass expected_passes[] = { | 453 test::Pass expected_passes[] = { |
| 454 test::Pass(expected_quads, arraysize(expected_quads)), | 454 test::Pass(expected_quads, arraysize(expected_quads)), |
| 455 test::Pass(root_quads2, arraysize(root_quads2))}; | 455 test::Pass(root_quads2, arraysize(root_quads2))}; |
| 456 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), | 456 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), |
| 457 &aggregated_frame.render_pass_list); | 457 &aggregated_frame.render_pass_list); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 481 DCHECK(original_pass_list[1]->copy_requests.empty()); | 481 DCHECK(original_pass_list[1]->copy_requests.empty()); |
| 482 | 482 |
| 483 embedded_factory.EvictSurface(); | 483 embedded_factory.EvictSurface(); |
| 484 } | 484 } |
| 485 | 485 |
| 486 TEST_F(SurfaceAggregatorValidSurfaceTest, UnreferencedSurface) { | 486 TEST_F(SurfaceAggregatorValidSurfaceTest, UnreferencedSurface) { |
| 487 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, | 487 SurfaceFactory embedded_factory(kArbitraryChildFrameSinkId, &manager_, |
| 488 &empty_client_); | 488 &empty_client_); |
| 489 SurfaceFactory parent_factory(kArbitraryRootFrameSinkId, &manager_, | 489 SurfaceFactory parent_factory(kArbitraryRootFrameSinkId, &manager_, |
| 490 &empty_client_); | 490 &empty_client_); |
| 491 LocalFrameId embedded_local_frame_id = allocator_.GenerateId(); | 491 LocalSurfaceId embedded_local_surface_id = allocator_.GenerateId(); |
| 492 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), | 492 SurfaceId embedded_surface_id(embedded_factory.frame_sink_id(), |
| 493 embedded_local_frame_id); | 493 embedded_local_surface_id); |
| 494 SurfaceId nonexistent_surface_id(factory_.frame_sink_id(), | 494 SurfaceId nonexistent_surface_id(factory_.frame_sink_id(), |
| 495 allocator_.GenerateId()); | 495 allocator_.GenerateId()); |
| 496 | 496 |
| 497 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; | 497 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| 498 test::Pass embedded_passes[] = { | 498 test::Pass embedded_passes[] = { |
| 499 test::Pass(embedded_quads, arraysize(embedded_quads))}; | 499 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
| 500 | 500 |
| 501 SubmitCompositorFrame(&embedded_factory, embedded_passes, | 501 SubmitCompositorFrame(&embedded_factory, embedded_passes, |
| 502 arraysize(embedded_passes), embedded_local_frame_id); | 502 arraysize(embedded_passes), embedded_local_surface_id); |
| 503 std::unique_ptr<CopyOutputRequest> copy_request( | 503 std::unique_ptr<CopyOutputRequest> copy_request( |
| 504 CopyOutputRequest::CreateEmptyRequest()); | 504 CopyOutputRequest::CreateEmptyRequest()); |
| 505 CopyOutputRequest* copy_request_ptr = copy_request.get(); | 505 CopyOutputRequest* copy_request_ptr = copy_request.get(); |
| 506 embedded_factory.RequestCopyOfSurface(std::move(copy_request)); | 506 embedded_factory.RequestCopyOfSurface(std::move(copy_request)); |
| 507 | 507 |
| 508 LocalFrameId parent_local_frame_id = allocator_.GenerateId(); | 508 LocalSurfaceId parent_local_surface_id = allocator_.GenerateId(); |
| 509 SurfaceId parent_surface_id(parent_factory.frame_sink_id(), | 509 SurfaceId parent_surface_id(parent_factory.frame_sink_id(), |
| 510 parent_local_frame_id); | 510 parent_local_surface_id); |
| 511 | 511 |
| 512 test::Quad parent_quads[] = { | 512 test::Quad parent_quads[] = { |
| 513 test::Quad::SolidColorQuad(SK_ColorWHITE), | 513 test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 514 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), | 514 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
| 515 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 515 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 516 test::Pass parent_passes[] = { | 516 test::Pass parent_passes[] = { |
| 517 test::Pass(parent_quads, arraysize(parent_quads))}; | 517 test::Pass(parent_quads, arraysize(parent_quads))}; |
| 518 | 518 |
| 519 { | 519 { |
| 520 CompositorFrame frame; | 520 CompositorFrame frame; |
| 521 | 521 |
| 522 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), parent_passes, | 522 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), parent_passes, |
| 523 arraysize(parent_passes)); | 523 arraysize(parent_passes)); |
| 524 | 524 |
| 525 frame.metadata.referenced_surfaces.push_back(embedded_surface_id); | 525 frame.metadata.referenced_surfaces.push_back(embedded_surface_id); |
| 526 | 526 |
| 527 parent_factory.SubmitCompositorFrame(parent_local_frame_id, | 527 parent_factory.SubmitCompositorFrame(parent_local_surface_id, |
| 528 std::move(frame), | 528 std::move(frame), |
| 529 SurfaceFactory::DrawCallback()); | 529 SurfaceFactory::DrawCallback()); |
| 530 } | 530 } |
| 531 | 531 |
| 532 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 532 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 533 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 533 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 534 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 534 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
| 535 | 535 |
| 536 { | 536 { |
| 537 CompositorFrame frame; | 537 CompositorFrame frame; |
| 538 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 538 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
| 539 arraysize(root_passes)); | 539 arraysize(root_passes)); |
| 540 | 540 |
| 541 frame.metadata.referenced_surfaces.push_back(parent_surface_id); | 541 frame.metadata.referenced_surfaces.push_back(parent_surface_id); |
| 542 // Reference to Surface ID of a Surface that doesn't exist should be | 542 // Reference to Surface ID of a Surface that doesn't exist should be |
| 543 // included in previous_contained_surfaces, but otherwise ignored. | 543 // included in previous_contained_surfaces, but otherwise ignored. |
| 544 frame.metadata.referenced_surfaces.push_back(nonexistent_surface_id); | 544 frame.metadata.referenced_surfaces.push_back(nonexistent_surface_id); |
| 545 | 545 |
| 546 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(frame), | 546 factory_.SubmitCompositorFrame(root_local_surface_id_, std::move(frame), |
| 547 SurfaceFactory::DrawCallback()); | 547 SurfaceFactory::DrawCallback()); |
| 548 } | 548 } |
| 549 | 549 |
| 550 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 550 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 551 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 551 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 552 | 552 |
| 553 // First pass should come from surface that had a copy request but was not | 553 // First pass should come from surface that had a copy request but was not |
| 554 // referenced directly. The second pass comes from the root surface. | 554 // referenced directly. The second pass comes from the root surface. |
| 555 // parent_quad should be ignored because it is neither referenced through a | 555 // parent_quad should be ignored because it is neither referenced through a |
| 556 // SurfaceDrawQuad nor has a copy request on it. | 556 // SurfaceDrawQuad nor has a copy request on it. |
| 557 test::Pass expected_passes[] = { | 557 test::Pass expected_passes[] = { |
| 558 test::Pass(embedded_quads, arraysize(embedded_quads)), | 558 test::Pass(embedded_quads, arraysize(embedded_quads)), |
| 559 test::Pass(root_quads, arraysize(root_quads))}; | 559 test::Pass(root_quads, arraysize(root_quads))}; |
| 560 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), | 560 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), |
| 561 &aggregated_frame.render_pass_list); | 561 &aggregated_frame.render_pass_list); |
| 562 ASSERT_EQ(2u, aggregated_frame.render_pass_list.size()); | 562 ASSERT_EQ(2u, aggregated_frame.render_pass_list.size()); |
| 563 ASSERT_EQ(1u, aggregated_frame.render_pass_list[0]->copy_requests.size()); | 563 ASSERT_EQ(1u, aggregated_frame.render_pass_list[0]->copy_requests.size()); |
| 564 DCHECK_EQ(copy_request_ptr, | 564 DCHECK_EQ(copy_request_ptr, |
| 565 aggregated_frame.render_pass_list[0]->copy_requests[0].get()); | 565 aggregated_frame.render_pass_list[0]->copy_requests[0].get()); |
| 566 | 566 |
| 567 SurfaceId surface_ids[] = { | 567 SurfaceId surface_ids[] = { |
| 568 SurfaceId(factory_.frame_sink_id(), root_local_frame_id_), | 568 SurfaceId(factory_.frame_sink_id(), root_local_surface_id_), |
| 569 parent_surface_id, embedded_surface_id, nonexistent_surface_id}; | 569 parent_surface_id, embedded_surface_id, nonexistent_surface_id}; |
| 570 EXPECT_EQ(arraysize(surface_ids), | 570 EXPECT_EQ(arraysize(surface_ids), |
| 571 aggregator_.previous_contained_surfaces().size()); | 571 aggregator_.previous_contained_surfaces().size()); |
| 572 for (size_t i = 0; i < arraysize(surface_ids); i++) { | 572 for (size_t i = 0; i < arraysize(surface_ids); i++) { |
| 573 EXPECT_TRUE( | 573 EXPECT_TRUE( |
| 574 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != | 574 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != |
| 575 aggregator_.previous_contained_surfaces().end()); | 575 aggregator_.previous_contained_surfaces().end()); |
| 576 } | 576 } |
| 577 | 577 |
| 578 embedded_factory.EvictSurface(); | 578 embedded_factory.EvictSurface(); |
| 579 parent_factory.EvictSurface(); | 579 parent_factory.EvictSurface(); |
| 580 } | 580 } |
| 581 | 581 |
| 582 // This tests referencing a surface that has multiple render passes. | 582 // This tests referencing a surface that has multiple render passes. |
| 583 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { | 583 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { |
| 584 LocalFrameId embedded_local_frame_id = child_allocator_.GenerateId(); | 584 LocalSurfaceId embedded_local_surface_id = child_allocator_.GenerateId(); |
| 585 SurfaceId embedded_surface_id(child_factory_.frame_sink_id(), | 585 SurfaceId embedded_surface_id(child_factory_.frame_sink_id(), |
| 586 embedded_local_frame_id); | 586 embedded_local_surface_id); |
| 587 | 587 |
| 588 int pass_ids[] = {1, 2, 3}; | 588 int pass_ids[] = {1, 2, 3}; |
| 589 | 589 |
| 590 test::Quad embedded_quads[][2] = { | 590 test::Quad embedded_quads[][2] = { |
| 591 {test::Quad::SolidColorQuad(1), test::Quad::SolidColorQuad(2)}, | 591 {test::Quad::SolidColorQuad(1), test::Quad::SolidColorQuad(2)}, |
| 592 {test::Quad::SolidColorQuad(3), test::Quad::RenderPassQuad(pass_ids[0])}, | 592 {test::Quad::SolidColorQuad(3), test::Quad::RenderPassQuad(pass_ids[0])}, |
| 593 {test::Quad::SolidColorQuad(4), test::Quad::RenderPassQuad(pass_ids[1])}}; | 593 {test::Quad::SolidColorQuad(4), test::Quad::RenderPassQuad(pass_ids[1])}}; |
| 594 test::Pass embedded_passes[] = { | 594 test::Pass embedded_passes[] = { |
| 595 test::Pass(embedded_quads[0], arraysize(embedded_quads[0]), pass_ids[0]), | 595 test::Pass(embedded_quads[0], arraysize(embedded_quads[0]), pass_ids[0]), |
| 596 test::Pass(embedded_quads[1], arraysize(embedded_quads[1]), pass_ids[1]), | 596 test::Pass(embedded_quads[1], arraysize(embedded_quads[1]), pass_ids[1]), |
| 597 test::Pass(embedded_quads[2], arraysize(embedded_quads[2]), pass_ids[2])}; | 597 test::Pass(embedded_quads[2], arraysize(embedded_quads[2]), pass_ids[2])}; |
| 598 | 598 |
| 599 SubmitCompositorFrame(&child_factory_, embedded_passes, | 599 SubmitCompositorFrame(&child_factory_, embedded_passes, |
| 600 arraysize(embedded_passes), embedded_local_frame_id); | 600 arraysize(embedded_passes), embedded_local_surface_id); |
| 601 | 601 |
| 602 test::Quad root_quads[][2] = { | 602 test::Quad root_quads[][2] = { |
| 603 {test::Quad::SolidColorQuad(5), test::Quad::SolidColorQuad(6)}, | 603 {test::Quad::SolidColorQuad(5), test::Quad::SolidColorQuad(6)}, |
| 604 {test::Quad::SurfaceQuad(embedded_surface_id, 1.f), | 604 {test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
| 605 test::Quad::RenderPassQuad(pass_ids[0])}, | 605 test::Quad::RenderPassQuad(pass_ids[0])}, |
| 606 {test::Quad::SolidColorQuad(7), test::Quad::RenderPassQuad(pass_ids[1])}}; | 606 {test::Quad::SolidColorQuad(7), test::Quad::RenderPassQuad(pass_ids[1])}}; |
| 607 test::Pass root_passes[] = { | 607 test::Pass root_passes[] = { |
| 608 test::Pass(root_quads[0], arraysize(root_quads[0]), pass_ids[0]), | 608 test::Pass(root_quads[0], arraysize(root_quads[0]), pass_ids[0]), |
| 609 test::Pass(root_quads[1], arraysize(root_quads[1]), pass_ids[1]), | 609 test::Pass(root_quads[1], arraysize(root_quads[1]), pass_ids[1]), |
| 610 test::Pass(root_quads[2], arraysize(root_quads[2]), pass_ids[2])}; | 610 test::Pass(root_quads[2], arraysize(root_quads[2]), pass_ids[2])}; |
| 611 | 611 |
| 612 SubmitCompositorFrame(&factory_, root_passes, arraysize(root_passes), | 612 SubmitCompositorFrame(&factory_, root_passes, arraysize(root_passes), |
| 613 root_local_frame_id_); | 613 root_local_surface_id_); |
| 614 | 614 |
| 615 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 615 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 616 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 616 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 617 | 617 |
| 618 const RenderPassList& aggregated_pass_list = | 618 const RenderPassList& aggregated_pass_list = |
| 619 aggregated_frame.render_pass_list; | 619 aggregated_frame.render_pass_list; |
| 620 | 620 |
| 621 ASSERT_EQ(5u, aggregated_pass_list.size()); | 621 ASSERT_EQ(5u, aggregated_pass_list.size()); |
| 622 int actual_pass_ids[] = { | 622 int actual_pass_ids[] = { |
| 623 aggregated_pass_list[0]->id, aggregated_pass_list[1]->id, | 623 aggregated_pass_list[0]->id, aggregated_pass_list[1]->id, |
| 624 aggregated_pass_list[2]->id, aggregated_pass_list[3]->id, | 624 aggregated_pass_list[2]->id, aggregated_pass_list[3]->id, |
| 625 aggregated_pass_list[4]->id}; | 625 aggregated_pass_list[4]->id}; |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 717 | 717 |
| 718 // Tests an invalid surface reference in a frame. The surface quad should just | 718 // Tests an invalid surface reference in a frame. The surface quad should just |
| 719 // be dropped. | 719 // be dropped. |
| 720 TEST_F(SurfaceAggregatorValidSurfaceTest, InvalidSurfaceReference) { | 720 TEST_F(SurfaceAggregatorValidSurfaceTest, InvalidSurfaceReference) { |
| 721 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), | 721 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
| 722 test::Quad::SurfaceQuad(InvalidSurfaceId(), 1.f), | 722 test::Quad::SurfaceQuad(InvalidSurfaceId(), 1.f), |
| 723 test::Quad::SolidColorQuad(SK_ColorBLUE)}; | 723 test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
| 724 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; | 724 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
| 725 | 725 |
| 726 SubmitCompositorFrame(&factory_, passes, arraysize(passes), | 726 SubmitCompositorFrame(&factory_, passes, arraysize(passes), |
| 727 root_local_frame_id_); | 727 root_local_surface_id_); |
| 728 | 728 |
| 729 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), | 729 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
| 730 test::Quad::SolidColorQuad(SK_ColorBLUE)}; | 730 test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
| 731 test::Pass expected_passes[] = { | 731 test::Pass expected_passes[] = { |
| 732 test::Pass(expected_quads, arraysize(expected_quads))}; | 732 test::Pass(expected_quads, arraysize(expected_quads))}; |
| 733 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 733 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 734 SurfaceId ids[] = {root_surface_id, InvalidSurfaceId()}; | 734 SurfaceId ids[] = {root_surface_id, InvalidSurfaceId()}; |
| 735 | 735 |
| 736 AggregateAndVerify( | 736 AggregateAndVerify( |
| 737 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); | 737 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
| 738 } | 738 } |
| 739 | 739 |
| 740 // Tests a reference to a valid surface with no submitted frame. This quad | 740 // Tests a reference to a valid surface with no submitted frame. This quad |
| 741 // should also just be dropped. | 741 // should also just be dropped. |
| 742 TEST_F(SurfaceAggregatorValidSurfaceTest, ValidSurfaceReferenceWithNoFrame) { | 742 TEST_F(SurfaceAggregatorValidSurfaceTest, ValidSurfaceReferenceWithNoFrame) { |
| 743 LocalFrameId empty_local_frame_id = allocator_.GenerateId(); | 743 LocalSurfaceId empty_local_surface_id = allocator_.GenerateId(); |
| 744 SurfaceId surface_with_no_frame_id(factory_.frame_sink_id(), | 744 SurfaceId surface_with_no_frame_id(factory_.frame_sink_id(), |
| 745 empty_local_frame_id); | 745 empty_local_surface_id); |
| 746 | 746 |
| 747 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), | 747 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
| 748 test::Quad::SurfaceQuad(surface_with_no_frame_id, 1.f), | 748 test::Quad::SurfaceQuad(surface_with_no_frame_id, 1.f), |
| 749 test::Quad::SolidColorQuad(SK_ColorBLUE)}; | 749 test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
| 750 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; | 750 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
| 751 | 751 |
| 752 SubmitCompositorFrame(&factory_, passes, arraysize(passes), | 752 SubmitCompositorFrame(&factory_, passes, arraysize(passes), |
| 753 root_local_frame_id_); | 753 root_local_surface_id_); |
| 754 | 754 |
| 755 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), | 755 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
| 756 test::Quad::SolidColorQuad(SK_ColorBLUE)}; | 756 test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
| 757 test::Pass expected_passes[] = { | 757 test::Pass expected_passes[] = { |
| 758 test::Pass(expected_quads, arraysize(expected_quads))}; | 758 test::Pass(expected_quads, arraysize(expected_quads))}; |
| 759 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 759 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 760 SurfaceId ids[] = {root_surface_id, surface_with_no_frame_id}; | 760 SurfaceId ids[] = {root_surface_id, surface_with_no_frame_id}; |
| 761 AggregateAndVerify( | 761 AggregateAndVerify( |
| 762 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); | 762 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
| 763 } | 763 } |
| 764 | 764 |
| 765 // Tests a surface quad referencing itself, generating a trivial cycle. | 765 // Tests a surface quad referencing itself, generating a trivial cycle. |
| 766 // The quad creating the cycle should be dropped from the final frame. | 766 // The quad creating the cycle should be dropped from the final frame. |
| 767 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleCyclicalReference) { | 767 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleCyclicalReference) { |
| 768 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 768 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 769 test::Quad quads[] = {test::Quad::SurfaceQuad(root_surface_id, 1.f), | 769 test::Quad quads[] = {test::Quad::SurfaceQuad(root_surface_id, 1.f), |
| 770 test::Quad::SolidColorQuad(SK_ColorYELLOW)}; | 770 test::Quad::SolidColorQuad(SK_ColorYELLOW)}; |
| 771 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; | 771 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
| 772 | 772 |
| 773 SubmitCompositorFrame(&factory_, passes, arraysize(passes), | 773 SubmitCompositorFrame(&factory_, passes, arraysize(passes), |
| 774 root_local_frame_id_); | 774 root_local_surface_id_); |
| 775 | 775 |
| 776 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorYELLOW)}; | 776 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorYELLOW)}; |
| 777 test::Pass expected_passes[] = { | 777 test::Pass expected_passes[] = { |
| 778 test::Pass(expected_quads, arraysize(expected_quads))}; | 778 test::Pass(expected_quads, arraysize(expected_quads))}; |
| 779 SurfaceId ids[] = {root_surface_id}; | 779 SurfaceId ids[] = {root_surface_id}; |
| 780 AggregateAndVerify( | 780 AggregateAndVerify( |
| 781 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); | 781 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
| 782 } | 782 } |
| 783 | 783 |
| 784 // Tests a more complex cycle with one intermediate surface. | 784 // Tests a more complex cycle with one intermediate surface. |
| 785 TEST_F(SurfaceAggregatorValidSurfaceTest, TwoSurfaceCyclicalReference) { | 785 TEST_F(SurfaceAggregatorValidSurfaceTest, TwoSurfaceCyclicalReference) { |
| 786 LocalFrameId child_local_frame_id = allocator_.GenerateId(); | 786 LocalSurfaceId child_local_surface_id = allocator_.GenerateId(); |
| 787 SurfaceId child_surface_id(child_factory_.frame_sink_id(), | 787 SurfaceId child_surface_id(child_factory_.frame_sink_id(), |
| 788 child_local_frame_id); | 788 child_local_surface_id); |
| 789 | 789 |
| 790 test::Quad parent_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE), | 790 test::Quad parent_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE), |
| 791 test::Quad::SurfaceQuad(child_surface_id, 1.f), | 791 test::Quad::SurfaceQuad(child_surface_id, 1.f), |
| 792 test::Quad::SolidColorQuad(SK_ColorCYAN)}; | 792 test::Quad::SolidColorQuad(SK_ColorCYAN)}; |
| 793 test::Pass parent_passes[] = { | 793 test::Pass parent_passes[] = { |
| 794 test::Pass(parent_quads, arraysize(parent_quads))}; | 794 test::Pass(parent_quads, arraysize(parent_quads))}; |
| 795 | 795 |
| 796 SubmitCompositorFrame(&factory_, parent_passes, arraysize(parent_passes), | 796 SubmitCompositorFrame(&factory_, parent_passes, arraysize(parent_passes), |
| 797 root_local_frame_id_); | 797 root_local_surface_id_); |
| 798 | 798 |
| 799 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 799 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 800 test::Quad child_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), | 800 test::Quad child_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
| 801 test::Quad::SurfaceQuad(root_surface_id, 1.f), | 801 test::Quad::SurfaceQuad(root_surface_id, 1.f), |
| 802 test::Quad::SolidColorQuad(SK_ColorMAGENTA)}; | 802 test::Quad::SolidColorQuad(SK_ColorMAGENTA)}; |
| 803 test::Pass child_passes[] = {test::Pass(child_quads, arraysize(child_quads))}; | 803 test::Pass child_passes[] = {test::Pass(child_quads, arraysize(child_quads))}; |
| 804 | 804 |
| 805 SubmitCompositorFrame(&child_factory_, child_passes, arraysize(child_passes), | 805 SubmitCompositorFrame(&child_factory_, child_passes, arraysize(child_passes), |
| 806 child_local_frame_id); | 806 child_local_surface_id); |
| 807 | 807 |
| 808 // The child surface's reference to the root_surface_ will be dropped, so | 808 // The child surface's reference to the root_surface_ will be dropped, so |
| 809 // we'll end up with: | 809 // we'll end up with: |
| 810 // SK_ColorBLUE from the parent | 810 // SK_ColorBLUE from the parent |
| 811 // SK_ColorGREEN from the child | 811 // SK_ColorGREEN from the child |
| 812 // SK_ColorMAGENTA from the child | 812 // SK_ColorMAGENTA from the child |
| 813 // SK_ColorCYAN from the parent | 813 // SK_ColorCYAN from the parent |
| 814 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE), | 814 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE), |
| 815 test::Quad::SolidColorQuad(SK_ColorGREEN), | 815 test::Quad::SolidColorQuad(SK_ColorGREEN), |
| 816 test::Quad::SolidColorQuad(SK_ColorMAGENTA), | 816 test::Quad::SolidColorQuad(SK_ColorMAGENTA), |
| 817 test::Quad::SolidColorQuad(SK_ColorCYAN)}; | 817 test::Quad::SolidColorQuad(SK_ColorCYAN)}; |
| 818 test::Pass expected_passes[] = { | 818 test::Pass expected_passes[] = { |
| 819 test::Pass(expected_quads, arraysize(expected_quads))}; | 819 test::Pass(expected_quads, arraysize(expected_quads))}; |
| 820 SurfaceId ids[] = {root_surface_id, child_surface_id}; | 820 SurfaceId ids[] = {root_surface_id, child_surface_id}; |
| 821 AggregateAndVerify( | 821 AggregateAndVerify( |
| 822 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); | 822 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
| 823 } | 823 } |
| 824 | 824 |
| 825 // Tests that we map render pass IDs from different surfaces into a unified | 825 // Tests that we map render pass IDs from different surfaces into a unified |
| 826 // namespace and update RenderPassDrawQuad's id references to match. | 826 // namespace and update RenderPassDrawQuad's id references to match. |
| 827 TEST_F(SurfaceAggregatorValidSurfaceTest, RenderPassIdMapping) { | 827 TEST_F(SurfaceAggregatorValidSurfaceTest, RenderPassIdMapping) { |
| 828 LocalFrameId child_local_frame_id = allocator_.GenerateId(); | 828 LocalSurfaceId child_local_surface_id = allocator_.GenerateId(); |
| 829 SurfaceId child_surface_id(child_factory_.frame_sink_id(), | 829 SurfaceId child_surface_id(child_factory_.frame_sink_id(), |
| 830 child_local_frame_id); | 830 child_local_surface_id); |
| 831 | 831 |
| 832 int child_pass_id[] = {1, 2}; | 832 int child_pass_id[] = {1, 2}; |
| 833 test::Quad child_quad[][1] = {{test::Quad::SolidColorQuad(SK_ColorGREEN)}, | 833 test::Quad child_quad[][1] = {{test::Quad::SolidColorQuad(SK_ColorGREEN)}, |
| 834 {test::Quad::RenderPassQuad(child_pass_id[0])}}; | 834 {test::Quad::RenderPassQuad(child_pass_id[0])}}; |
| 835 test::Pass surface_passes[] = { | 835 test::Pass surface_passes[] = { |
| 836 test::Pass(child_quad[0], arraysize(child_quad[0]), child_pass_id[0]), | 836 test::Pass(child_quad[0], arraysize(child_quad[0]), child_pass_id[0]), |
| 837 test::Pass(child_quad[1], arraysize(child_quad[1]), child_pass_id[1])}; | 837 test::Pass(child_quad[1], arraysize(child_quad[1]), child_pass_id[1])}; |
| 838 | 838 |
| 839 SubmitCompositorFrame(&child_factory_, surface_passes, | 839 SubmitCompositorFrame(&child_factory_, surface_passes, |
| 840 arraysize(surface_passes), child_local_frame_id); | 840 arraysize(surface_passes), child_local_surface_id); |
| 841 | 841 |
| 842 // Pass IDs from the parent surface may collide with ones from the child. | 842 // Pass IDs from the parent surface may collide with ones from the child. |
| 843 int parent_pass_id[] = {3, 2}; | 843 int parent_pass_id[] = {3, 2}; |
| 844 test::Quad parent_quad[][1] = { | 844 test::Quad parent_quad[][1] = { |
| 845 {test::Quad::SurfaceQuad(child_surface_id, 1.f)}, | 845 {test::Quad::SurfaceQuad(child_surface_id, 1.f)}, |
| 846 {test::Quad::RenderPassQuad(parent_pass_id[0])}}; | 846 {test::Quad::RenderPassQuad(parent_pass_id[0])}}; |
| 847 test::Pass parent_passes[] = { | 847 test::Pass parent_passes[] = { |
| 848 test::Pass(parent_quad[0], arraysize(parent_quad[0]), parent_pass_id[0]), | 848 test::Pass(parent_quad[0], arraysize(parent_quad[0]), parent_pass_id[0]), |
| 849 test::Pass(parent_quad[1], arraysize(parent_quad[1]), parent_pass_id[1])}; | 849 test::Pass(parent_quad[1], arraysize(parent_quad[1]), parent_pass_id[1])}; |
| 850 | 850 |
| 851 SubmitCompositorFrame(&factory_, parent_passes, arraysize(parent_passes), | 851 SubmitCompositorFrame(&factory_, parent_passes, arraysize(parent_passes), |
| 852 root_local_frame_id_); | 852 root_local_surface_id_); |
| 853 | 853 |
| 854 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 854 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 855 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 855 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 856 | 856 |
| 857 const RenderPassList& aggregated_pass_list = | 857 const RenderPassList& aggregated_pass_list = |
| 858 aggregated_frame.render_pass_list; | 858 aggregated_frame.render_pass_list; |
| 859 | 859 |
| 860 ASSERT_EQ(3u, aggregated_pass_list.size()); | 860 ASSERT_EQ(3u, aggregated_pass_list.size()); |
| 861 int actual_pass_ids[] = {aggregated_pass_list[0]->id, | 861 int actual_pass_ids[] = {aggregated_pass_list[0]->id, |
| 862 aggregated_pass_list[1]->id, | 862 aggregated_pass_list[1]->id, |
| 863 aggregated_pass_list[2]->id}; | 863 aggregated_pass_list[2]->id}; |
| 864 // Make sure the aggregated frame's pass IDs are all unique. | 864 // Make sure the aggregated frame's pass IDs are all unique. |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 944 SkBlendMode::kDstIn, // 6 | 944 SkBlendMode::kDstIn, // 6 |
| 945 }; | 945 }; |
| 946 | 946 |
| 947 SurfaceFactory grandchild_factory(FrameSinkId(2, 2), &manager_, | 947 SurfaceFactory grandchild_factory(FrameSinkId(2, 2), &manager_, |
| 948 &empty_client_); | 948 &empty_client_); |
| 949 SurfaceFactory child_one_factory(FrameSinkId(3, 3), &manager_, | 949 SurfaceFactory child_one_factory(FrameSinkId(3, 3), &manager_, |
| 950 &empty_client_); | 950 &empty_client_); |
| 951 SurfaceFactory child_two_factory(FrameSinkId(4, 4), &manager_, | 951 SurfaceFactory child_two_factory(FrameSinkId(4, 4), &manager_, |
| 952 &empty_client_); | 952 &empty_client_); |
| 953 int pass_id = 1; | 953 int pass_id = 1; |
| 954 LocalFrameId grandchild_local_frame_id = allocator_.GenerateId(); | 954 LocalSurfaceId grandchild_local_surface_id = allocator_.GenerateId(); |
| 955 SurfaceId grandchild_surface_id(grandchild_factory.frame_sink_id(), | 955 SurfaceId grandchild_surface_id(grandchild_factory.frame_sink_id(), |
| 956 grandchild_local_frame_id); | 956 grandchild_local_surface_id); |
| 957 grandchild_factory.SubmitCompositorFrame(grandchild_local_frame_id, | 957 grandchild_factory.SubmitCompositorFrame(grandchild_local_surface_id, |
| 958 CompositorFrame(), | 958 CompositorFrame(), |
| 959 SurfaceFactory::DrawCallback()); | 959 SurfaceFactory::DrawCallback()); |
| 960 std::unique_ptr<RenderPass> grandchild_pass = RenderPass::Create(); | 960 std::unique_ptr<RenderPass> grandchild_pass = RenderPass::Create(); |
| 961 gfx::Rect output_rect(SurfaceSize()); | 961 gfx::Rect output_rect(SurfaceSize()); |
| 962 gfx::Rect damage_rect(SurfaceSize()); | 962 gfx::Rect damage_rect(SurfaceSize()); |
| 963 gfx::Transform transform_to_root_target; | 963 gfx::Transform transform_to_root_target; |
| 964 grandchild_pass->SetNew(pass_id, output_rect, damage_rect, | 964 grandchild_pass->SetNew(pass_id, output_rect, damage_rect, |
| 965 transform_to_root_target); | 965 transform_to_root_target); |
| 966 AddSolidColorQuadWithBlendMode( | 966 AddSolidColorQuadWithBlendMode( |
| 967 SurfaceSize(), grandchild_pass.get(), blend_modes[2]); | 967 SurfaceSize(), grandchild_pass.get(), blend_modes[2]); |
| 968 QueuePassAsFrame(std::move(grandchild_pass), grandchild_local_frame_id, | 968 QueuePassAsFrame(std::move(grandchild_pass), grandchild_local_surface_id, |
| 969 &grandchild_factory); | 969 &grandchild_factory); |
| 970 | 970 |
| 971 LocalFrameId child_one_local_frame_id = allocator_.GenerateId(); | 971 LocalSurfaceId child_one_local_surface_id = allocator_.GenerateId(); |
| 972 SurfaceId child_one_surface_id(child_one_factory.frame_sink_id(), | 972 SurfaceId child_one_surface_id(child_one_factory.frame_sink_id(), |
| 973 child_one_local_frame_id); | 973 child_one_local_surface_id); |
| 974 child_one_factory.SubmitCompositorFrame(child_one_local_frame_id, | 974 child_one_factory.SubmitCompositorFrame(child_one_local_surface_id, |
| 975 CompositorFrame(), | 975 CompositorFrame(), |
| 976 SurfaceFactory::DrawCallback()); | 976 SurfaceFactory::DrawCallback()); |
| 977 | 977 |
| 978 std::unique_ptr<RenderPass> child_one_pass = RenderPass::Create(); | 978 std::unique_ptr<RenderPass> child_one_pass = RenderPass::Create(); |
| 979 child_one_pass->SetNew(pass_id, output_rect, damage_rect, | 979 child_one_pass->SetNew(pass_id, output_rect, damage_rect, |
| 980 transform_to_root_target); | 980 transform_to_root_target); |
| 981 AddSolidColorQuadWithBlendMode( | 981 AddSolidColorQuadWithBlendMode( |
| 982 SurfaceSize(), child_one_pass.get(), blend_modes[1]); | 982 SurfaceSize(), child_one_pass.get(), blend_modes[1]); |
| 983 SurfaceDrawQuad* grandchild_surface_quad = | 983 SurfaceDrawQuad* grandchild_surface_quad = |
| 984 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 984 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
| 985 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(), | 985 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(), |
| 986 gfx::Rect(SurfaceSize()), | 986 gfx::Rect(SurfaceSize()), |
| 987 gfx::Rect(SurfaceSize()), | 987 gfx::Rect(SurfaceSize()), |
| 988 grandchild_surface_id); | 988 grandchild_surface_id); |
| 989 AddSolidColorQuadWithBlendMode( | 989 AddSolidColorQuadWithBlendMode( |
| 990 SurfaceSize(), child_one_pass.get(), blend_modes[3]); | 990 SurfaceSize(), child_one_pass.get(), blend_modes[3]); |
| 991 QueuePassAsFrame(std::move(child_one_pass), child_one_local_frame_id, | 991 QueuePassAsFrame(std::move(child_one_pass), child_one_local_surface_id, |
| 992 &child_one_factory); | 992 &child_one_factory); |
| 993 | 993 |
| 994 LocalFrameId child_two_local_frame_id = allocator_.GenerateId(); | 994 LocalSurfaceId child_two_local_surface_id = allocator_.GenerateId(); |
| 995 SurfaceId child_two_surface_id(child_two_factory.frame_sink_id(), | 995 SurfaceId child_two_surface_id(child_two_factory.frame_sink_id(), |
| 996 child_two_local_frame_id); | 996 child_two_local_surface_id); |
| 997 child_two_factory.SubmitCompositorFrame(child_two_local_frame_id, | 997 child_two_factory.SubmitCompositorFrame(child_two_local_surface_id, |
| 998 CompositorFrame(), | 998 CompositorFrame(), |
| 999 SurfaceFactory::DrawCallback()); | 999 SurfaceFactory::DrawCallback()); |
| 1000 | 1000 |
| 1001 std::unique_ptr<RenderPass> child_two_pass = RenderPass::Create(); | 1001 std::unique_ptr<RenderPass> child_two_pass = RenderPass::Create(); |
| 1002 child_two_pass->SetNew(pass_id, output_rect, damage_rect, | 1002 child_two_pass->SetNew(pass_id, output_rect, damage_rect, |
| 1003 transform_to_root_target); | 1003 transform_to_root_target); |
| 1004 AddSolidColorQuadWithBlendMode( | 1004 AddSolidColorQuadWithBlendMode( |
| 1005 SurfaceSize(), child_two_pass.get(), blend_modes[5]); | 1005 SurfaceSize(), child_two_pass.get(), blend_modes[5]); |
| 1006 QueuePassAsFrame(std::move(child_two_pass), child_two_local_frame_id, | 1006 QueuePassAsFrame(std::move(child_two_pass), child_two_local_surface_id, |
| 1007 &child_two_factory); | 1007 &child_two_factory); |
| 1008 | 1008 |
| 1009 std::unique_ptr<RenderPass> root_pass = RenderPass::Create(); | 1009 std::unique_ptr<RenderPass> root_pass = RenderPass::Create(); |
| 1010 root_pass->SetNew(pass_id, output_rect, damage_rect, | 1010 root_pass->SetNew(pass_id, output_rect, damage_rect, |
| 1011 transform_to_root_target); | 1011 transform_to_root_target); |
| 1012 | 1012 |
| 1013 AddSolidColorQuadWithBlendMode( | 1013 AddSolidColorQuadWithBlendMode( |
| 1014 SurfaceSize(), root_pass.get(), blend_modes[0]); | 1014 SurfaceSize(), root_pass.get(), blend_modes[0]); |
| 1015 SurfaceDrawQuad* child_one_surface_quad = | 1015 SurfaceDrawQuad* child_one_surface_quad = |
| 1016 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 1016 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
| 1017 child_one_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), | 1017 child_one_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), |
| 1018 gfx::Rect(SurfaceSize()), | 1018 gfx::Rect(SurfaceSize()), |
| 1019 gfx::Rect(SurfaceSize()), | 1019 gfx::Rect(SurfaceSize()), |
| 1020 child_one_surface_id); | 1020 child_one_surface_id); |
| 1021 AddSolidColorQuadWithBlendMode( | 1021 AddSolidColorQuadWithBlendMode( |
| 1022 SurfaceSize(), root_pass.get(), blend_modes[4]); | 1022 SurfaceSize(), root_pass.get(), blend_modes[4]); |
| 1023 SurfaceDrawQuad* child_two_surface_quad = | 1023 SurfaceDrawQuad* child_two_surface_quad = |
| 1024 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 1024 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
| 1025 child_two_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), | 1025 child_two_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), |
| 1026 gfx::Rect(SurfaceSize()), | 1026 gfx::Rect(SurfaceSize()), |
| 1027 gfx::Rect(SurfaceSize()), | 1027 gfx::Rect(SurfaceSize()), |
| 1028 child_two_surface_id); | 1028 child_two_surface_id); |
| 1029 AddSolidColorQuadWithBlendMode( | 1029 AddSolidColorQuadWithBlendMode( |
| 1030 SurfaceSize(), root_pass.get(), blend_modes[6]); | 1030 SurfaceSize(), root_pass.get(), blend_modes[6]); |
| 1031 | 1031 |
| 1032 QueuePassAsFrame(std::move(root_pass), root_local_frame_id_, &factory_); | 1032 QueuePassAsFrame(std::move(root_pass), root_local_surface_id_, &factory_); |
| 1033 | 1033 |
| 1034 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 1034 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 1035 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1035 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 1036 | 1036 |
| 1037 const RenderPassList& aggregated_pass_list = | 1037 const RenderPassList& aggregated_pass_list = |
| 1038 aggregated_frame.render_pass_list; | 1038 aggregated_frame.render_pass_list; |
| 1039 | 1039 |
| 1040 ASSERT_EQ(1u, aggregated_pass_list.size()); | 1040 ASSERT_EQ(1u, aggregated_pass_list.size()); |
| 1041 | 1041 |
| 1042 const QuadList& aggregated_quad_list = aggregated_pass_list[0]->quad_list; | 1042 const QuadList& aggregated_quad_list = aggregated_pass_list[0]->quad_list; |
| 1043 | 1043 |
| 1044 ASSERT_EQ(7u, aggregated_quad_list.size()); | 1044 ASSERT_EQ(7u, aggregated_quad_list.size()); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1070 // pass id and a transform of +8 in the x direction. | 1070 // pass id and a transform of +8 in the x direction. |
| 1071 // | 1071 // |
| 1072 // After aggregation, the child surface's root pass quad should have all | 1072 // After aggregation, the child surface's root pass quad should have all |
| 1073 // transforms concatenated for a total transform of +23 x, +10 y. The | 1073 // transforms concatenated for a total transform of +23 x, +10 y. The |
| 1074 // contributing render pass' transform in the aggregate frame should not be | 1074 // contributing render pass' transform in the aggregate frame should not be |
| 1075 // affected. | 1075 // affected. |
| 1076 TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) { | 1076 TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) { |
| 1077 SurfaceFactory middle_factory(kArbitraryMiddleFrameSinkId, &manager_, | 1077 SurfaceFactory middle_factory(kArbitraryMiddleFrameSinkId, &manager_, |
| 1078 &empty_client_); | 1078 &empty_client_); |
| 1079 // Innermost child surface. | 1079 // Innermost child surface. |
| 1080 LocalFrameId child_local_frame_id = allocator_.GenerateId(); | 1080 LocalSurfaceId child_local_surface_id = allocator_.GenerateId(); |
| 1081 SurfaceId child_surface_id(child_factory_.frame_sink_id(), | 1081 SurfaceId child_surface_id(child_factory_.frame_sink_id(), |
| 1082 child_local_frame_id); | 1082 child_local_surface_id); |
| 1083 { | 1083 { |
| 1084 int child_pass_id[] = {1, 2}; | 1084 int child_pass_id[] = {1, 2}; |
| 1085 test::Quad child_quads[][1] = { | 1085 test::Quad child_quads[][1] = { |
| 1086 {test::Quad::SolidColorQuad(SK_ColorGREEN)}, | 1086 {test::Quad::SolidColorQuad(SK_ColorGREEN)}, |
| 1087 {test::Quad::RenderPassQuad(child_pass_id[0])}, | 1087 {test::Quad::RenderPassQuad(child_pass_id[0])}, |
| 1088 }; | 1088 }; |
| 1089 test::Pass child_passes[] = { | 1089 test::Pass child_passes[] = { |
| 1090 test::Pass(child_quads[0], arraysize(child_quads[0]), child_pass_id[0]), | 1090 test::Pass(child_quads[0], arraysize(child_quads[0]), child_pass_id[0]), |
| 1091 test::Pass(child_quads[1], arraysize(child_quads[1]), | 1091 test::Pass(child_quads[1], arraysize(child_quads[1]), |
| 1092 child_pass_id[1])}; | 1092 child_pass_id[1])}; |
| 1093 | 1093 |
| 1094 CompositorFrame child_frame; | 1094 CompositorFrame child_frame; |
| 1095 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1095 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
| 1096 child_passes, arraysize(child_passes)); | 1096 child_passes, arraysize(child_passes)); |
| 1097 | 1097 |
| 1098 RenderPass* child_nonroot_pass = child_frame.render_pass_list[0].get(); | 1098 RenderPass* child_nonroot_pass = child_frame.render_pass_list[0].get(); |
| 1099 child_nonroot_pass->transform_to_root_target.Translate(8, 0); | 1099 child_nonroot_pass->transform_to_root_target.Translate(8, 0); |
| 1100 SharedQuadState* child_nonroot_pass_sqs = | 1100 SharedQuadState* child_nonroot_pass_sqs = |
| 1101 child_nonroot_pass->shared_quad_state_list.front(); | 1101 child_nonroot_pass->shared_quad_state_list.front(); |
| 1102 child_nonroot_pass_sqs->quad_to_target_transform.Translate(5, 0); | 1102 child_nonroot_pass_sqs->quad_to_target_transform.Translate(5, 0); |
| 1103 | 1103 |
| 1104 RenderPass* child_root_pass = child_frame.render_pass_list[1].get(); | 1104 RenderPass* child_root_pass = child_frame.render_pass_list[1].get(); |
| 1105 SharedQuadState* child_root_pass_sqs = | 1105 SharedQuadState* child_root_pass_sqs = |
| 1106 child_root_pass->shared_quad_state_list.front(); | 1106 child_root_pass->shared_quad_state_list.front(); |
| 1107 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); | 1107 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); |
| 1108 child_root_pass_sqs->is_clipped = true; | 1108 child_root_pass_sqs->is_clipped = true; |
| 1109 child_root_pass_sqs->clip_rect = gfx::Rect(0, 0, 5, 5); | 1109 child_root_pass_sqs->clip_rect = gfx::Rect(0, 0, 5, 5); |
| 1110 | 1110 |
| 1111 child_factory_.SubmitCompositorFrame(child_local_frame_id, | 1111 child_factory_.SubmitCompositorFrame(child_local_surface_id, |
| 1112 std::move(child_frame), | 1112 std::move(child_frame), |
| 1113 SurfaceFactory::DrawCallback()); | 1113 SurfaceFactory::DrawCallback()); |
| 1114 } | 1114 } |
| 1115 | 1115 |
| 1116 // Middle child surface. | 1116 // Middle child surface. |
| 1117 LocalFrameId middle_local_frame_id = allocator_.GenerateId(); | 1117 LocalSurfaceId middle_local_surface_id = allocator_.GenerateId(); |
| 1118 SurfaceId middle_surface_id(middle_factory.frame_sink_id(), | 1118 SurfaceId middle_surface_id(middle_factory.frame_sink_id(), |
| 1119 middle_local_frame_id); | 1119 middle_local_surface_id); |
| 1120 { | 1120 { |
| 1121 test::Quad middle_quads[] = { | 1121 test::Quad middle_quads[] = { |
| 1122 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; | 1122 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; |
| 1123 test::Pass middle_passes[] = { | 1123 test::Pass middle_passes[] = { |
| 1124 test::Pass(middle_quads, arraysize(middle_quads)), | 1124 test::Pass(middle_quads, arraysize(middle_quads)), |
| 1125 }; | 1125 }; |
| 1126 | 1126 |
| 1127 CompositorFrame middle_frame; | 1127 CompositorFrame middle_frame; |
| 1128 AddPasses(&middle_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1128 AddPasses(&middle_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
| 1129 middle_passes, arraysize(middle_passes)); | 1129 middle_passes, arraysize(middle_passes)); |
| 1130 | 1130 |
| 1131 RenderPass* middle_root_pass = middle_frame.render_pass_list[0].get(); | 1131 RenderPass* middle_root_pass = middle_frame.render_pass_list[0].get(); |
| 1132 middle_root_pass->quad_list.ElementAt(0)->visible_rect = | 1132 middle_root_pass->quad_list.ElementAt(0)->visible_rect = |
| 1133 gfx::Rect(0, 1, 100, 7); | 1133 gfx::Rect(0, 1, 100, 7); |
| 1134 SharedQuadState* middle_root_pass_sqs = | 1134 SharedQuadState* middle_root_pass_sqs = |
| 1135 middle_root_pass->shared_quad_state_list.front(); | 1135 middle_root_pass->shared_quad_state_list.front(); |
| 1136 middle_root_pass_sqs->quad_to_target_transform.Scale(2, 3); | 1136 middle_root_pass_sqs->quad_to_target_transform.Scale(2, 3); |
| 1137 | 1137 |
| 1138 middle_factory.SubmitCompositorFrame(middle_local_frame_id, | 1138 middle_factory.SubmitCompositorFrame(middle_local_surface_id, |
| 1139 std::move(middle_frame), | 1139 std::move(middle_frame), |
| 1140 SurfaceFactory::DrawCallback()); | 1140 SurfaceFactory::DrawCallback()); |
| 1141 } | 1141 } |
| 1142 | 1142 |
| 1143 // Root surface. | 1143 // Root surface. |
| 1144 test::Quad secondary_quads[] = { | 1144 test::Quad secondary_quads[] = { |
| 1145 test::Quad::SolidColorQuad(1), | 1145 test::Quad::SolidColorQuad(1), |
| 1146 test::Quad::SurfaceQuad(middle_surface_id, 1.f)}; | 1146 test::Quad::SurfaceQuad(middle_surface_id, 1.f)}; |
| 1147 test::Quad root_quads[] = {test::Quad::SolidColorQuad(1)}; | 1147 test::Quad root_quads[] = {test::Quad::SolidColorQuad(1)}; |
| 1148 test::Pass root_passes[] = { | 1148 test::Pass root_passes[] = { |
| 1149 test::Pass(secondary_quads, arraysize(secondary_quads)), | 1149 test::Pass(secondary_quads, arraysize(secondary_quads)), |
| 1150 test::Pass(root_quads, arraysize(root_quads))}; | 1150 test::Pass(root_quads, arraysize(root_quads))}; |
| 1151 | 1151 |
| 1152 CompositorFrame root_frame; | 1152 CompositorFrame root_frame; |
| 1153 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 1153 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
| 1154 arraysize(root_passes)); | 1154 arraysize(root_passes)); |
| 1155 | 1155 |
| 1156 root_frame.render_pass_list[0] | 1156 root_frame.render_pass_list[0] |
| 1157 ->shared_quad_state_list.front() | 1157 ->shared_quad_state_list.front() |
| 1158 ->quad_to_target_transform.Translate(0, 7); | 1158 ->quad_to_target_transform.Translate(0, 7); |
| 1159 root_frame.render_pass_list[0] | 1159 root_frame.render_pass_list[0] |
| 1160 ->shared_quad_state_list.ElementAt(1) | 1160 ->shared_quad_state_list.ElementAt(1) |
| 1161 ->quad_to_target_transform.Translate(0, 10); | 1161 ->quad_to_target_transform.Translate(0, 10); |
| 1162 root_frame.render_pass_list[0]->quad_list.ElementAt(1)->visible_rect = | 1162 root_frame.render_pass_list[0]->quad_list.ElementAt(1)->visible_rect = |
| 1163 gfx::Rect(0, 0, 8, 100); | 1163 gfx::Rect(0, 0, 8, 100); |
| 1164 | 1164 |
| 1165 root_frame.render_pass_list[0]->transform_to_root_target.Translate(10, 5); | 1165 root_frame.render_pass_list[0]->transform_to_root_target.Translate(10, 5); |
| 1166 | 1166 |
| 1167 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(root_frame), | 1167 factory_.SubmitCompositorFrame(root_local_surface_id_, std::move(root_frame), |
| 1168 SurfaceFactory::DrawCallback()); | 1168 SurfaceFactory::DrawCallback()); |
| 1169 | 1169 |
| 1170 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 1170 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 1171 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1171 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 1172 | 1172 |
| 1173 const RenderPassList& aggregated_pass_list = | 1173 const RenderPassList& aggregated_pass_list = |
| 1174 aggregated_frame.render_pass_list; | 1174 aggregated_frame.render_pass_list; |
| 1175 | 1175 |
| 1176 ASSERT_EQ(3u, aggregated_pass_list.size()); | 1176 ASSERT_EQ(3u, aggregated_pass_list.size()); |
| 1177 | 1177 |
| 1178 ASSERT_EQ(1u, aggregated_pass_list[0]->shared_quad_state_list.size()); | 1178 ASSERT_EQ(1u, aggregated_pass_list[0]->shared_quad_state_list.size()); |
| 1179 | 1179 |
| 1180 // The first pass should have one shared quad state for the one solid color | 1180 // The first pass should have one shared quad state for the one solid color |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1253 | 1253 |
| 1254 CompositorFrame child_frame; | 1254 CompositorFrame child_frame; |
| 1255 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1255 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
| 1256 child_passes, arraysize(child_passes)); | 1256 child_passes, arraysize(child_passes)); |
| 1257 | 1257 |
| 1258 RenderPass* child_root_pass = child_frame.render_pass_list[0].get(); | 1258 RenderPass* child_root_pass = child_frame.render_pass_list[0].get(); |
| 1259 SharedQuadState* child_root_pass_sqs = | 1259 SharedQuadState* child_root_pass_sqs = |
| 1260 child_root_pass->shared_quad_state_list.front(); | 1260 child_root_pass->shared_quad_state_list.front(); |
| 1261 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); | 1261 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); |
| 1262 | 1262 |
| 1263 LocalFrameId child_local_frame_id = allocator_.GenerateId(); | 1263 LocalSurfaceId child_local_surface_id = allocator_.GenerateId(); |
| 1264 SurfaceId child_surface_id(child_factory_.frame_sink_id(), | 1264 SurfaceId child_surface_id(child_factory_.frame_sink_id(), |
| 1265 child_local_frame_id); | 1265 child_local_surface_id); |
| 1266 child_factory_.SubmitCompositorFrame(child_local_frame_id, | 1266 child_factory_.SubmitCompositorFrame(child_local_surface_id, |
| 1267 std::move(child_frame), | 1267 std::move(child_frame), |
| 1268 SurfaceFactory::DrawCallback()); | 1268 SurfaceFactory::DrawCallback()); |
| 1269 | 1269 |
| 1270 test::Quad parent_surface_quads[] = { | 1270 test::Quad parent_surface_quads[] = { |
| 1271 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; | 1271 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; |
| 1272 test::Pass parent_surface_passes[] = { | 1272 test::Pass parent_surface_passes[] = { |
| 1273 test::Pass(parent_surface_quads, arraysize(parent_surface_quads), 1)}; | 1273 test::Pass(parent_surface_quads, arraysize(parent_surface_quads), 1)}; |
| 1274 | 1274 |
| 1275 // Parent surface is only used to test if the transform is applied correctly | 1275 // Parent surface is only used to test if the transform is applied correctly |
| 1276 // to the child surface's damage. | 1276 // to the child surface's damage. |
| 1277 CompositorFrame parent_surface_frame; | 1277 CompositorFrame parent_surface_frame; |
| 1278 AddPasses(&parent_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1278 AddPasses(&parent_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
| 1279 parent_surface_passes, arraysize(parent_surface_passes)); | 1279 parent_surface_passes, arraysize(parent_surface_passes)); |
| 1280 | 1280 |
| 1281 LocalFrameId parent_local_frame_id = allocator_.GenerateId(); | 1281 LocalSurfaceId parent_local_surface_id = allocator_.GenerateId(); |
| 1282 SurfaceId parent_surface_id(parent_factory.frame_sink_id(), | 1282 SurfaceId parent_surface_id(parent_factory.frame_sink_id(), |
| 1283 parent_local_frame_id); | 1283 parent_local_surface_id); |
| 1284 parent_factory.SubmitCompositorFrame(parent_local_frame_id, | 1284 parent_factory.SubmitCompositorFrame(parent_local_surface_id, |
| 1285 std::move(parent_surface_frame), | 1285 std::move(parent_surface_frame), |
| 1286 SurfaceFactory::DrawCallback()); | 1286 SurfaceFactory::DrawCallback()); |
| 1287 | 1287 |
| 1288 test::Quad root_surface_quads[] = { | 1288 test::Quad root_surface_quads[] = { |
| 1289 test::Quad::SurfaceQuad(parent_surface_id, 1.f)}; | 1289 test::Quad::SurfaceQuad(parent_surface_id, 1.f)}; |
| 1290 test::Quad root_render_pass_quads[] = {test::Quad::RenderPassQuad(1)}; | 1290 test::Quad root_render_pass_quads[] = {test::Quad::RenderPassQuad(1)}; |
| 1291 | 1291 |
| 1292 test::Pass root_passes[] = { | 1292 test::Pass root_passes[] = { |
| 1293 test::Pass(root_surface_quads, arraysize(root_surface_quads), 1), | 1293 test::Pass(root_surface_quads, arraysize(root_surface_quads), 1), |
| 1294 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; | 1294 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; |
| 1295 | 1295 |
| 1296 CompositorFrame root_frame; | 1296 CompositorFrame root_frame; |
| 1297 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 1297 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
| 1298 arraysize(root_passes)); | 1298 arraysize(root_passes)); |
| 1299 | 1299 |
| 1300 root_frame.render_pass_list[0] | 1300 root_frame.render_pass_list[0] |
| 1301 ->shared_quad_state_list.front() | 1301 ->shared_quad_state_list.front() |
| 1302 ->quad_to_target_transform.Translate(0, 10); | 1302 ->quad_to_target_transform.Translate(0, 10); |
| 1303 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 10, 10); | 1303 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 10, 10); |
| 1304 root_frame.render_pass_list[1]->damage_rect = gfx::Rect(5, 5, 100, 100); | 1304 root_frame.render_pass_list[1]->damage_rect = gfx::Rect(5, 5, 100, 100); |
| 1305 | 1305 |
| 1306 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(root_frame), | 1306 factory_.SubmitCompositorFrame(root_local_surface_id_, std::move(root_frame), |
| 1307 SurfaceFactory::DrawCallback()); | 1307 SurfaceFactory::DrawCallback()); |
| 1308 | 1308 |
| 1309 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 1309 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 1310 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1310 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 1311 | 1311 |
| 1312 const RenderPassList& aggregated_pass_list = | 1312 const RenderPassList& aggregated_pass_list = |
| 1313 aggregated_frame.render_pass_list; | 1313 aggregated_frame.render_pass_list; |
| 1314 | 1314 |
| 1315 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1315 ASSERT_EQ(2u, aggregated_pass_list.size()); |
| 1316 | 1316 |
| 1317 // Damage rect for first aggregation should contain entire root surface. | 1317 // Damage rect for first aggregation should contain entire root surface. |
| 1318 EXPECT_TRUE( | 1318 EXPECT_TRUE( |
| 1319 aggregated_pass_list[1]->damage_rect.Contains(gfx::Rect(SurfaceSize()))); | 1319 aggregated_pass_list[1]->damage_rect.Contains(gfx::Rect(SurfaceSize()))); |
| 1320 | 1320 |
| 1321 { | 1321 { |
| 1322 CompositorFrame child_frame; | 1322 CompositorFrame child_frame; |
| 1323 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1323 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
| 1324 child_passes, arraysize(child_passes)); | 1324 child_passes, arraysize(child_passes)); |
| 1325 | 1325 |
| 1326 RenderPass* child_root_pass = child_frame.render_pass_list[0].get(); | 1326 RenderPass* child_root_pass = child_frame.render_pass_list[0].get(); |
| 1327 SharedQuadState* child_root_pass_sqs = | 1327 SharedQuadState* child_root_pass_sqs = |
| 1328 child_root_pass->shared_quad_state_list.front(); | 1328 child_root_pass->shared_quad_state_list.front(); |
| 1329 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); | 1329 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); |
| 1330 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10); | 1330 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10); |
| 1331 | 1331 |
| 1332 child_factory_.SubmitCompositorFrame(child_local_frame_id, | 1332 child_factory_.SubmitCompositorFrame(child_local_surface_id, |
| 1333 std::move(child_frame), | 1333 std::move(child_frame), |
| 1334 SurfaceFactory::DrawCallback()); | 1334 SurfaceFactory::DrawCallback()); |
| 1335 | 1335 |
| 1336 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 1336 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 1337 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1337 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 1338 | 1338 |
| 1339 const RenderPassList& aggregated_pass_list = | 1339 const RenderPassList& aggregated_pass_list = |
| 1340 aggregated_frame.render_pass_list; | 1340 aggregated_frame.render_pass_list; |
| 1341 | 1341 |
| 1342 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1342 ASSERT_EQ(2u, aggregated_pass_list.size()); |
| 1343 | 1343 |
| 1344 // Outer surface didn't change, so transformed inner damage rect should be | 1344 // Outer surface didn't change, so transformed inner damage rect should be |
| 1345 // used. | 1345 // used. |
| 1346 EXPECT_EQ(gfx::Rect(10, 20, 10, 10).ToString(), | 1346 EXPECT_EQ(gfx::Rect(10, 20, 10, 10).ToString(), |
| 1347 aggregated_pass_list[1]->damage_rect.ToString()); | 1347 aggregated_pass_list[1]->damage_rect.ToString()); |
| 1348 } | 1348 } |
| 1349 | 1349 |
| 1350 { | 1350 { |
| 1351 CompositorFrame root_frame; | 1351 CompositorFrame root_frame; |
| 1352 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1352 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
| 1353 root_passes, arraysize(root_passes)); | 1353 root_passes, arraysize(root_passes)); |
| 1354 | 1354 |
| 1355 root_frame.render_pass_list[0] | 1355 root_frame.render_pass_list[0] |
| 1356 ->shared_quad_state_list.front() | 1356 ->shared_quad_state_list.front() |
| 1357 ->quad_to_target_transform.Translate(0, 10); | 1357 ->quad_to_target_transform.Translate(0, 10); |
| 1358 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(0, 0, 1, 1); | 1358 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(0, 0, 1, 1); |
| 1359 | 1359 |
| 1360 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(root_frame), | 1360 factory_.SubmitCompositorFrame(root_local_surface_id_, |
| 1361 std::move(root_frame), |
| 1361 SurfaceFactory::DrawCallback()); | 1362 SurfaceFactory::DrawCallback()); |
| 1362 } | 1363 } |
| 1363 | 1364 |
| 1364 { | 1365 { |
| 1365 CompositorFrame root_frame; | 1366 CompositorFrame root_frame; |
| 1366 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1367 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
| 1367 root_passes, arraysize(root_passes)); | 1368 root_passes, arraysize(root_passes)); |
| 1368 | 1369 |
| 1369 root_frame.render_pass_list[0] | 1370 root_frame.render_pass_list[0] |
| 1370 ->shared_quad_state_list.front() | 1371 ->shared_quad_state_list.front() |
| 1371 ->quad_to_target_transform.Translate(0, 10); | 1372 ->quad_to_target_transform.Translate(0, 10); |
| 1372 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 1, 1, 1); | 1373 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 1, 1, 1); |
| 1373 | 1374 |
| 1374 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(root_frame), | 1375 factory_.SubmitCompositorFrame(root_local_surface_id_, |
| 1376 std::move(root_frame), |
| 1375 SurfaceFactory::DrawCallback()); | 1377 SurfaceFactory::DrawCallback()); |
| 1376 | 1378 |
| 1377 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 1379 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 1378 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1380 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 1379 | 1381 |
| 1380 const RenderPassList& aggregated_pass_list = | 1382 const RenderPassList& aggregated_pass_list = |
| 1381 aggregated_frame.render_pass_list; | 1383 aggregated_frame.render_pass_list; |
| 1382 | 1384 |
| 1383 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1385 ASSERT_EQ(2u, aggregated_pass_list.size()); |
| 1384 | 1386 |
| 1385 // The root surface was enqueued without being aggregated once, so it should | 1387 // The root surface was enqueued without being aggregated once, so it should |
| 1386 // be treated as completely damaged. | 1388 // be treated as completely damaged. |
| 1387 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains( | 1389 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains( |
| 1388 gfx::Rect(SurfaceSize()))); | 1390 gfx::Rect(SurfaceSize()))); |
| 1389 } | 1391 } |
| 1390 | 1392 |
| 1391 // No Surface changed, so no damage should be given. | 1393 // No Surface changed, so no damage should be given. |
| 1392 { | 1394 { |
| 1393 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 1395 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 1394 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1396 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 1395 | 1397 |
| 1396 const RenderPassList& aggregated_pass_list = | 1398 const RenderPassList& aggregated_pass_list = |
| 1397 aggregated_frame.render_pass_list; | 1399 aggregated_frame.render_pass_list; |
| 1398 | 1400 |
| 1399 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1401 ASSERT_EQ(2u, aggregated_pass_list.size()); |
| 1400 | 1402 |
| 1401 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty()); | 1403 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty()); |
| 1402 } | 1404 } |
| 1403 | 1405 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1425 | 1427 |
| 1426 test::Pass root_passes[] = { | 1428 test::Pass root_passes[] = { |
| 1427 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; | 1429 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; |
| 1428 | 1430 |
| 1429 CompositorFrame root_frame; | 1431 CompositorFrame root_frame; |
| 1430 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 1432 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
| 1431 arraysize(root_passes)); | 1433 arraysize(root_passes)); |
| 1432 | 1434 |
| 1433 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 100, 100); | 1435 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 100, 100); |
| 1434 | 1436 |
| 1435 factory_.SubmitCompositorFrame(root_local_frame_id_, std::move(root_frame), | 1437 factory_.SubmitCompositorFrame(root_local_surface_id_, std::move(root_frame), |
| 1436 SurfaceFactory::DrawCallback()); | 1438 SurfaceFactory::DrawCallback()); |
| 1437 | 1439 |
| 1438 { | 1440 { |
| 1439 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 1441 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 1440 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1442 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 1441 | 1443 |
| 1442 const RenderPassList& aggregated_pass_list = | 1444 const RenderPassList& aggregated_pass_list = |
| 1443 aggregated_frame.render_pass_list; | 1445 aggregated_frame.render_pass_list; |
| 1444 | 1446 |
| 1445 ASSERT_EQ(1u, aggregated_pass_list.size()); | 1447 ASSERT_EQ(1u, aggregated_pass_list.size()); |
| 1446 | 1448 |
| 1447 // Damage rect for first aggregation should contain entire root surface. | 1449 // Damage rect for first aggregation should contain entire root surface. |
| 1448 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.Contains( | 1450 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.Contains( |
| 1449 gfx::Rect(SurfaceSize()))); | 1451 gfx::Rect(SurfaceSize()))); |
| 1450 } | 1452 } |
| 1451 | 1453 |
| 1452 LocalFrameId second_root_local_frame_id = allocator_.GenerateId(); | 1454 LocalSurfaceId second_root_local_surface_id = allocator_.GenerateId(); |
| 1453 SurfaceId second_root_surface_id(factory_.frame_sink_id(), | 1455 SurfaceId second_root_surface_id(factory_.frame_sink_id(), |
| 1454 second_root_local_frame_id); | 1456 second_root_local_surface_id); |
| 1455 { | 1457 { |
| 1456 test::Quad root_render_pass_quads[] = {test::Quad::SolidColorQuad(1)}; | 1458 test::Quad root_render_pass_quads[] = {test::Quad::SolidColorQuad(1)}; |
| 1457 | 1459 |
| 1458 test::Pass root_passes[] = {test::Pass( | 1460 test::Pass root_passes[] = {test::Pass( |
| 1459 root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; | 1461 root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; |
| 1460 | 1462 |
| 1461 CompositorFrame root_frame; | 1463 CompositorFrame root_frame; |
| 1462 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1464 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
| 1463 root_passes, arraysize(root_passes)); | 1465 root_passes, arraysize(root_passes)); |
| 1464 | 1466 |
| 1465 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 2, 3, 4); | 1467 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 2, 3, 4); |
| 1466 | 1468 |
| 1467 factory_.SubmitCompositorFrame(second_root_local_frame_id, | 1469 factory_.SubmitCompositorFrame(second_root_local_surface_id, |
| 1468 std::move(root_frame), | 1470 std::move(root_frame), |
| 1469 SurfaceFactory::DrawCallback()); | 1471 SurfaceFactory::DrawCallback()); |
| 1470 } | 1472 } |
| 1471 { | 1473 { |
| 1472 CompositorFrame aggregated_frame = | 1474 CompositorFrame aggregated_frame = |
| 1473 aggregator_.Aggregate(second_root_surface_id); | 1475 aggregator_.Aggregate(second_root_surface_id); |
| 1474 | 1476 |
| 1475 const RenderPassList& aggregated_pass_list = | 1477 const RenderPassList& aggregated_pass_list = |
| 1476 aggregated_frame.render_pass_list; | 1478 aggregated_frame.render_pass_list; |
| 1477 | 1479 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1495 | 1497 |
| 1496 class SurfaceAggregatorPartialSwapTest | 1498 class SurfaceAggregatorPartialSwapTest |
| 1497 : public SurfaceAggregatorValidSurfaceTest { | 1499 : public SurfaceAggregatorValidSurfaceTest { |
| 1498 public: | 1500 public: |
| 1499 SurfaceAggregatorPartialSwapTest() | 1501 SurfaceAggregatorPartialSwapTest() |
| 1500 : SurfaceAggregatorValidSurfaceTest(true) {} | 1502 : SurfaceAggregatorValidSurfaceTest(true) {} |
| 1501 }; | 1503 }; |
| 1502 | 1504 |
| 1503 // Tests that quads outside the damage rect are ignored. | 1505 // Tests that quads outside the damage rect are ignored. |
| 1504 TEST_F(SurfaceAggregatorPartialSwapTest, IgnoreOutside) { | 1506 TEST_F(SurfaceAggregatorPartialSwapTest, IgnoreOutside) { |
| 1505 LocalFrameId child_local_frame_id = allocator_.GenerateId(); | 1507 LocalSurfaceId child_local_surface_id = allocator_.GenerateId(); |
| 1506 SurfaceId child_surface_id(child_factory_.frame_sink_id(), | 1508 SurfaceId child_surface_id(child_factory_.frame_sink_id(), |
| 1507 child_local_frame_id); | 1509 child_local_surface_id); |
| 1508 // The child surface has three quads, one with a visible rect of 13,13 4x4 and | 1510 // The child surface has three quads, one with a visible rect of 13,13 4x4 and |
| 1509 // the other other with a visible rect of 10,10 2x2 (relative to root target | 1511 // the other other with a visible rect of 10,10 2x2 (relative to root target |
| 1510 // space), and one with a non-invertible transform. | 1512 // space), and one with a non-invertible transform. |
| 1511 { | 1513 { |
| 1512 int child_pass_id = 1; | 1514 int child_pass_id = 1; |
| 1513 test::Quad child_quads1[] = {test::Quad::RenderPassQuad(child_pass_id)}; | 1515 test::Quad child_quads1[] = {test::Quad::RenderPassQuad(child_pass_id)}; |
| 1514 test::Quad child_quads2[] = {test::Quad::RenderPassQuad(child_pass_id)}; | 1516 test::Quad child_quads2[] = {test::Quad::RenderPassQuad(child_pass_id)}; |
| 1515 test::Quad child_quads3[] = {test::Quad::RenderPassQuad(child_pass_id)}; | 1517 test::Quad child_quads3[] = {test::Quad::RenderPassQuad(child_pass_id)}; |
| 1516 test::Pass child_passes[] = { | 1518 test::Pass child_passes[] = { |
| 1517 test::Pass(child_quads1, arraysize(child_quads1), child_pass_id), | 1519 test::Pass(child_quads1, arraysize(child_quads1), child_pass_id), |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1534 | 1536 |
| 1535 SharedQuadState* child_noninvertible_sqs = | 1537 SharedQuadState* child_noninvertible_sqs = |
| 1536 child_pass_list[2]->shared_quad_state_list.ElementAt(0u); | 1538 child_pass_list[2]->shared_quad_state_list.ElementAt(0u); |
| 1537 child_noninvertible_sqs->quad_to_target_transform.matrix().setDouble(0, 0, | 1539 child_noninvertible_sqs->quad_to_target_transform.matrix().setDouble(0, 0, |
| 1538 0.0); | 1540 0.0); |
| 1539 EXPECT_FALSE( | 1541 EXPECT_FALSE( |
| 1540 child_noninvertible_sqs->quad_to_target_transform.IsInvertible()); | 1542 child_noninvertible_sqs->quad_to_target_transform.IsInvertible()); |
| 1541 child_pass_list[2]->quad_list.ElementAt(0)->visible_rect = | 1543 child_pass_list[2]->quad_list.ElementAt(0)->visible_rect = |
| 1542 gfx::Rect(0, 0, 2, 2); | 1544 gfx::Rect(0, 0, 2, 2); |
| 1543 | 1545 |
| 1544 SubmitPassListAsFrame(&child_factory_, child_local_frame_id, | 1546 SubmitPassListAsFrame(&child_factory_, child_local_surface_id, |
| 1545 &child_pass_list); | 1547 &child_pass_list); |
| 1546 } | 1548 } |
| 1547 | 1549 |
| 1548 { | 1550 { |
| 1549 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)}; | 1551 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)}; |
| 1550 | 1552 |
| 1551 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 1553 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
| 1552 | 1554 |
| 1553 RenderPassList root_pass_list; | 1555 RenderPassList root_pass_list; |
| 1554 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 1556 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
| 1555 arraysize(root_passes)); | 1557 arraysize(root_passes)); |
| 1556 | 1558 |
| 1557 RenderPass* root_pass = root_pass_list[0].get(); | 1559 RenderPass* root_pass = root_pass_list[0].get(); |
| 1558 root_pass->shared_quad_state_list.front() | 1560 root_pass->shared_quad_state_list.front() |
| 1559 ->quad_to_target_transform.Translate(10, 10); | 1561 ->quad_to_target_transform.Translate(10, 10); |
| 1560 root_pass->damage_rect = gfx::Rect(0, 0, 1, 1); | 1562 root_pass->damage_rect = gfx::Rect(0, 0, 1, 1); |
| 1561 | 1563 |
| 1562 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list); | 1564 SubmitPassListAsFrame(&factory_, root_local_surface_id_, &root_pass_list); |
| 1563 } | 1565 } |
| 1564 | 1566 |
| 1565 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id_); | 1567 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_surface_id_); |
| 1566 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1568 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 1567 | 1569 |
| 1568 const RenderPassList& aggregated_pass_list = | 1570 const RenderPassList& aggregated_pass_list = |
| 1569 aggregated_frame.render_pass_list; | 1571 aggregated_frame.render_pass_list; |
| 1570 | 1572 |
| 1571 ASSERT_EQ(3u, aggregated_pass_list.size()); | 1573 ASSERT_EQ(3u, aggregated_pass_list.size()); |
| 1572 | 1574 |
| 1573 // Damage rect for first aggregation should contain entire root surface. | 1575 // Damage rect for first aggregation should contain entire root surface. |
| 1574 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[2]->damage_rect); | 1576 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[2]->damage_rect); |
| 1575 EXPECT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); | 1577 EXPECT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); |
| 1576 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); | 1578 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); |
| 1577 EXPECT_EQ(1u, aggregated_pass_list[2]->quad_list.size()); | 1579 EXPECT_EQ(1u, aggregated_pass_list[2]->quad_list.size()); |
| 1578 | 1580 |
| 1579 // Create a root surface with a smaller damage rect. | 1581 // Create a root surface with a smaller damage rect. |
| 1580 { | 1582 { |
| 1581 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)}; | 1583 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)}; |
| 1582 | 1584 |
| 1583 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 1585 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
| 1584 | 1586 |
| 1585 RenderPassList root_pass_list; | 1587 RenderPassList root_pass_list; |
| 1586 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 1588 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
| 1587 arraysize(root_passes)); | 1589 arraysize(root_passes)); |
| 1588 | 1590 |
| 1589 RenderPass* root_pass = root_pass_list[0].get(); | 1591 RenderPass* root_pass = root_pass_list[0].get(); |
| 1590 root_pass->shared_quad_state_list.front() | 1592 root_pass->shared_quad_state_list.front() |
| 1591 ->quad_to_target_transform.Translate(10, 10); | 1593 ->quad_to_target_transform.Translate(10, 10); |
| 1592 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); | 1594 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); |
| 1593 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list); | 1595 SubmitPassListAsFrame(&factory_, root_local_surface_id_, &root_pass_list); |
| 1594 } | 1596 } |
| 1595 | 1597 |
| 1596 { | 1598 { |
| 1597 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1599 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 1598 | 1600 |
| 1599 const RenderPassList& aggregated_pass_list = | 1601 const RenderPassList& aggregated_pass_list = |
| 1600 aggregated_frame.render_pass_list; | 1602 aggregated_frame.render_pass_list; |
| 1601 | 1603 |
| 1602 ASSERT_EQ(3u, aggregated_pass_list.size()); | 1604 ASSERT_EQ(3u, aggregated_pass_list.size()); |
| 1603 | 1605 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1633 child_sqs->quad_to_target_transform.Scale(2, 2); | 1635 child_sqs->quad_to_target_transform.Scale(2, 2); |
| 1634 | 1636 |
| 1635 child_pass_list[1]->quad_list.ElementAt(0)->visible_rect = | 1637 child_pass_list[1]->quad_list.ElementAt(0)->visible_rect = |
| 1636 gfx::Rect(0, 0, 2, 2); | 1638 gfx::Rect(0, 0, 2, 2); |
| 1637 | 1639 |
| 1638 RenderPass* child_root_pass = child_pass_list[1].get(); | 1640 RenderPass* child_root_pass = child_pass_list[1].get(); |
| 1639 | 1641 |
| 1640 child_root_pass->copy_requests.push_back( | 1642 child_root_pass->copy_requests.push_back( |
| 1641 CopyOutputRequest::CreateEmptyRequest()); | 1643 CopyOutputRequest::CreateEmptyRequest()); |
| 1642 child_root_pass->damage_rect = gfx::Rect(); | 1644 child_root_pass->damage_rect = gfx::Rect(); |
| 1643 SubmitPassListAsFrame(&child_factory_, child_local_frame_id, | 1645 SubmitPassListAsFrame(&child_factory_, child_local_surface_id, |
| 1644 &child_pass_list); | 1646 &child_pass_list); |
| 1645 } | 1647 } |
| 1646 | 1648 |
| 1647 { | 1649 { |
| 1648 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1650 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 1649 | 1651 |
| 1650 const RenderPassList& aggregated_pass_list = | 1652 const RenderPassList& aggregated_pass_list = |
| 1651 aggregated_frame.render_pass_list; | 1653 aggregated_frame.render_pass_list; |
| 1652 | 1654 |
| 1653 // Output frame should have no damage, but all quads included. | 1655 // Output frame should have no damage, but all quads included. |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1692 RenderPassList root_pass_list; | 1694 RenderPassList root_pass_list; |
| 1693 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 1695 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
| 1694 arraysize(root_passes)); | 1696 arraysize(root_passes)); |
| 1695 | 1697 |
| 1696 RenderPass* filter_pass = root_pass_list[1].get(); | 1698 RenderPass* filter_pass = root_pass_list[1].get(); |
| 1697 filter_pass->shared_quad_state_list.front() | 1699 filter_pass->shared_quad_state_list.front() |
| 1698 ->quad_to_target_transform.Translate(10, 10); | 1700 ->quad_to_target_transform.Translate(10, 10); |
| 1699 RenderPass* root_pass = root_pass_list[2].get(); | 1701 RenderPass* root_pass = root_pass_list[2].get(); |
| 1700 filter_pass->filters.Append(FilterOperation::CreateBlurFilter(2)); | 1702 filter_pass->filters.Append(FilterOperation::CreateBlurFilter(2)); |
| 1701 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); | 1703 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); |
| 1702 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list); | 1704 SubmitPassListAsFrame(&factory_, root_local_surface_id_, &root_pass_list); |
| 1703 } | 1705 } |
| 1704 | 1706 |
| 1705 { | 1707 { |
| 1706 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1708 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 1707 | 1709 |
| 1708 const RenderPassList& aggregated_pass_list = | 1710 const RenderPassList& aggregated_pass_list = |
| 1709 aggregated_frame.render_pass_list; | 1711 aggregated_frame.render_pass_list; |
| 1710 | 1712 |
| 1711 ASSERT_EQ(4u, aggregated_pass_list.size()); | 1713 ASSERT_EQ(4u, aggregated_pass_list.size()); |
| 1712 | 1714 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1739 RenderPassList root_pass_list; | 1741 RenderPassList root_pass_list; |
| 1740 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 1742 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
| 1741 arraysize(root_passes)); | 1743 arraysize(root_passes)); |
| 1742 | 1744 |
| 1743 RenderPass* pass = root_pass_list[0].get(); | 1745 RenderPass* pass = root_pass_list[0].get(); |
| 1744 RenderPass* root_pass = root_pass_list[1].get(); | 1746 RenderPass* root_pass = root_pass_list[1].get(); |
| 1745 root_pass->shared_quad_state_list.ElementAt(1) | 1747 root_pass->shared_quad_state_list.ElementAt(1) |
| 1746 ->quad_to_target_transform.Translate(10, 10); | 1748 ->quad_to_target_transform.Translate(10, 10); |
| 1747 pass->background_filters.Append(FilterOperation::CreateBlurFilter(2)); | 1749 pass->background_filters.Append(FilterOperation::CreateBlurFilter(2)); |
| 1748 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); | 1750 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); |
| 1749 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list); | 1751 SubmitPassListAsFrame(&factory_, root_local_surface_id_, &root_pass_list); |
| 1750 } | 1752 } |
| 1751 | 1753 |
| 1752 { | 1754 { |
| 1753 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1755 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
| 1754 | 1756 |
| 1755 const RenderPassList& aggregated_pass_list = | 1757 const RenderPassList& aggregated_pass_list = |
| 1756 aggregated_frame.render_pass_list; | 1758 aggregated_frame.render_pass_list; |
| 1757 | 1759 |
| 1758 ASSERT_EQ(3u, aggregated_pass_list.size()); | 1760 ASSERT_EQ(3u, aggregated_pass_list.size()); |
| 1759 | 1761 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1847 const float vertex_opacity[4] = {0.f, 0.f, 1.f, 1.f}; | 1849 const float vertex_opacity[4] = {0.f, 0.f, 1.f, 1.f}; |
| 1848 bool flipped = false; | 1850 bool flipped = false; |
| 1849 bool nearest_neighbor = false; | 1851 bool nearest_neighbor = false; |
| 1850 bool secure_output_only = true; | 1852 bool secure_output_only = true; |
| 1851 quad->SetAll(sqs, rect, opaque_rect, visible_rect, needs_blending, | 1853 quad->SetAll(sqs, rect, opaque_rect, visible_rect, needs_blending, |
| 1852 resource_ids[i], gfx::Size(), premultiplied_alpha, uv_top_left, | 1854 resource_ids[i], gfx::Size(), premultiplied_alpha, uv_top_left, |
| 1853 uv_bottom_right, background_color, vertex_opacity, flipped, | 1855 uv_bottom_right, background_color, vertex_opacity, flipped, |
| 1854 nearest_neighbor, secure_output_only); | 1856 nearest_neighbor, secure_output_only); |
| 1855 } | 1857 } |
| 1856 frame.render_pass_list.push_back(std::move(pass)); | 1858 frame.render_pass_list.push_back(std::move(pass)); |
| 1857 factory->SubmitCompositorFrame(surface_id.local_frame_id(), std::move(frame), | 1859 factory->SubmitCompositorFrame(surface_id.local_surface_id(), |
| 1860 std::move(frame), |
| 1858 SurfaceFactory::DrawCallback()); | 1861 SurfaceFactory::DrawCallback()); |
| 1859 } | 1862 } |
| 1860 | 1863 |
| 1861 TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) { | 1864 TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) { |
| 1862 ResourceTrackingSurfaceFactoryClient client; | 1865 ResourceTrackingSurfaceFactoryClient client; |
| 1863 SurfaceFactory factory(kArbitraryRootFrameSinkId, &manager_, &client); | 1866 SurfaceFactory factory(kArbitraryRootFrameSinkId, &manager_, &client); |
| 1864 LocalFrameId local_frame_id(7u, base::UnguessableToken::Create()); | 1867 LocalSurfaceId local_surface_id(7u, base::UnguessableToken::Create()); |
| 1865 SurfaceId surface_id(factory.frame_sink_id(), local_frame_id); | 1868 SurfaceId surface_id(factory.frame_sink_id(), local_surface_id); |
| 1866 | 1869 |
| 1867 ResourceId ids[] = {11, 12, 13}; | 1870 ResourceId ids[] = {11, 12, 13}; |
| 1868 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), | 1871 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), |
| 1869 &factory, surface_id); | 1872 &factory, surface_id); |
| 1870 | 1873 |
| 1871 CompositorFrame frame = aggregator_->Aggregate(surface_id); | 1874 CompositorFrame frame = aggregator_->Aggregate(surface_id); |
| 1872 | 1875 |
| 1873 // Nothing should be available to be returned yet. | 1876 // Nothing should be available to be returned yet. |
| 1874 EXPECT_TRUE(client.returned_resources().empty()); | 1877 EXPECT_TRUE(client.returned_resources().empty()); |
| 1875 | 1878 |
| 1876 SubmitCompositorFrameWithResources(NULL, 0u, true, SurfaceId(), &factory, | 1879 SubmitCompositorFrameWithResources(NULL, 0u, true, SurfaceId(), &factory, |
| 1877 surface_id); | 1880 surface_id); |
| 1878 | 1881 |
| 1879 frame = aggregator_->Aggregate(surface_id); | 1882 frame = aggregator_->Aggregate(surface_id); |
| 1880 | 1883 |
| 1881 ASSERT_EQ(3u, client.returned_resources().size()); | 1884 ASSERT_EQ(3u, client.returned_resources().size()); |
| 1882 ResourceId returned_ids[3]; | 1885 ResourceId returned_ids[3]; |
| 1883 for (size_t i = 0; i < 3; ++i) { | 1886 for (size_t i = 0; i < 3; ++i) { |
| 1884 returned_ids[i] = client.returned_resources()[i].id; | 1887 returned_ids[i] = client.returned_resources()[i].id; |
| 1885 } | 1888 } |
| 1886 EXPECT_THAT(returned_ids, | 1889 EXPECT_THAT(returned_ids, |
| 1887 testing::WhenSorted(testing::ElementsAreArray(ids))); | 1890 testing::WhenSorted(testing::ElementsAreArray(ids))); |
| 1888 | 1891 |
| 1889 factory.EvictSurface(); | 1892 factory.EvictSurface(); |
| 1890 } | 1893 } |
| 1891 | 1894 |
| 1892 TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { | 1895 TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { |
| 1893 ResourceTrackingSurfaceFactoryClient client; | 1896 ResourceTrackingSurfaceFactoryClient client; |
| 1894 SurfaceFactory factory(kArbitraryRootFrameSinkId, &manager_, &client); | 1897 SurfaceFactory factory(kArbitraryRootFrameSinkId, &manager_, &client); |
| 1895 LocalFrameId local_frame_id(7u, base::UnguessableToken::Create()); | 1898 LocalSurfaceId local_surface_id(7u, base::UnguessableToken::Create()); |
| 1896 SurfaceId surface_id(factory.frame_sink_id(), local_frame_id); | 1899 SurfaceId surface_id(factory.frame_sink_id(), local_surface_id); |
| 1897 | 1900 |
| 1898 CompositorFrame frame; | 1901 CompositorFrame frame; |
| 1899 std::unique_ptr<RenderPass> pass = RenderPass::Create(); | 1902 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
| 1900 pass->id = 1; | 1903 pass->id = 1; |
| 1901 TransferableResource resource; | 1904 TransferableResource resource; |
| 1902 resource.id = 11; | 1905 resource.id = 11; |
| 1903 // ResourceProvider is software but resource is not, so it should be | 1906 // ResourceProvider is software but resource is not, so it should be |
| 1904 // ignored. | 1907 // ignored. |
| 1905 resource.is_software = false; | 1908 resource.is_software = false; |
| 1906 frame.resource_list.push_back(resource); | 1909 frame.resource_list.push_back(resource); |
| 1907 frame.render_pass_list.push_back(std::move(pass)); | 1910 frame.render_pass_list.push_back(std::move(pass)); |
| 1908 factory.SubmitCompositorFrame(local_frame_id, std::move(frame), | 1911 factory.SubmitCompositorFrame(local_surface_id, std::move(frame), |
| 1909 SurfaceFactory::DrawCallback()); | 1912 SurfaceFactory::DrawCallback()); |
| 1910 | 1913 |
| 1911 CompositorFrame returned_frame = aggregator_->Aggregate(surface_id); | 1914 CompositorFrame returned_frame = aggregator_->Aggregate(surface_id); |
| 1912 | 1915 |
| 1913 // Nothing should be available to be returned yet. | 1916 // Nothing should be available to be returned yet. |
| 1914 EXPECT_TRUE(client.returned_resources().empty()); | 1917 EXPECT_TRUE(client.returned_resources().empty()); |
| 1915 | 1918 |
| 1916 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, | 1919 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, |
| 1917 surface_id); | 1920 surface_id); |
| 1918 ASSERT_EQ(1u, client.returned_resources().size()); | 1921 ASSERT_EQ(1u, client.returned_resources().size()); |
| 1919 EXPECT_EQ(11u, client.returned_resources()[0].id); | 1922 EXPECT_EQ(11u, client.returned_resources()[0].id); |
| 1920 | 1923 |
| 1921 factory.EvictSurface(); | 1924 factory.EvictSurface(); |
| 1922 } | 1925 } |
| 1923 | 1926 |
| 1924 TEST_F(SurfaceAggregatorWithResourcesTest, TwoSurfaces) { | 1927 TEST_F(SurfaceAggregatorWithResourcesTest, TwoSurfaces) { |
| 1925 ResourceTrackingSurfaceFactoryClient client; | 1928 ResourceTrackingSurfaceFactoryClient client; |
| 1926 SurfaceFactory factory1(FrameSinkId(1, 1), &manager_, &client); | 1929 SurfaceFactory factory1(FrameSinkId(1, 1), &manager_, &client); |
| 1927 SurfaceFactory factory2(FrameSinkId(2, 2), &manager_, &client); | 1930 SurfaceFactory factory2(FrameSinkId(2, 2), &manager_, &client); |
| 1928 LocalFrameId local_frame1_id(7u, base::UnguessableToken::Create()); | 1931 LocalSurfaceId local_frame1_id(7u, base::UnguessableToken::Create()); |
| 1929 SurfaceId surface1_id(factory1.frame_sink_id(), local_frame1_id); | 1932 SurfaceId surface1_id(factory1.frame_sink_id(), local_frame1_id); |
| 1930 | 1933 |
| 1931 LocalFrameId local_frame2_id(8u, base::UnguessableToken::Create()); | 1934 LocalSurfaceId local_frame2_id(8u, base::UnguessableToken::Create()); |
| 1932 SurfaceId surface2_id(factory2.frame_sink_id(), local_frame2_id); | 1935 SurfaceId surface2_id(factory2.frame_sink_id(), local_frame2_id); |
| 1933 | 1936 |
| 1934 ResourceId ids[] = {11, 12, 13}; | 1937 ResourceId ids[] = {11, 12, 13}; |
| 1935 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), | 1938 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), |
| 1936 &factory1, surface1_id); | 1939 &factory1, surface1_id); |
| 1937 ResourceId ids2[] = {14, 15, 16}; | 1940 ResourceId ids2[] = {14, 15, 16}; |
| 1938 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), true, SurfaceId(), | 1941 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), true, SurfaceId(), |
| 1939 &factory2, surface2_id); | 1942 &factory2, surface2_id); |
| 1940 | 1943 |
| 1941 CompositorFrame frame = aggregator_->Aggregate(surface1_id); | 1944 CompositorFrame frame = aggregator_->Aggregate(surface1_id); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1963 } | 1966 } |
| 1964 | 1967 |
| 1965 // Ensure that aggregator completely ignores Surfaces that reference invalid | 1968 // Ensure that aggregator completely ignores Surfaces that reference invalid |
| 1966 // resources. | 1969 // resources. |
| 1967 TEST_F(SurfaceAggregatorWithResourcesTest, InvalidChildSurface) { | 1970 TEST_F(SurfaceAggregatorWithResourcesTest, InvalidChildSurface) { |
| 1968 ResourceTrackingSurfaceFactoryClient client; | 1971 ResourceTrackingSurfaceFactoryClient client; |
| 1969 SurfaceFactory root_factory(kArbitraryRootFrameSinkId, &manager_, &client); | 1972 SurfaceFactory root_factory(kArbitraryRootFrameSinkId, &manager_, &client); |
| 1970 SurfaceFactory middle_factory(kArbitraryMiddleFrameSinkId, &manager_, | 1973 SurfaceFactory middle_factory(kArbitraryMiddleFrameSinkId, &manager_, |
| 1971 &client); | 1974 &client); |
| 1972 SurfaceFactory child_factory(kArbitraryChildFrameSinkId, &manager_, &client); | 1975 SurfaceFactory child_factory(kArbitraryChildFrameSinkId, &manager_, &client); |
| 1973 LocalFrameId root_local_frame_id(7u, kArbitraryToken); | 1976 LocalSurfaceId root_local_surface_id(7u, kArbitraryToken); |
| 1974 SurfaceId root_surface_id(root_factory.frame_sink_id(), root_local_frame_id); | 1977 SurfaceId root_surface_id(root_factory.frame_sink_id(), |
| 1975 LocalFrameId middle_local_frame_id(8u, kArbitraryToken); | 1978 root_local_surface_id); |
| 1979 LocalSurfaceId middle_local_surface_id(8u, kArbitraryToken); |
| 1976 SurfaceId middle_surface_id(middle_factory.frame_sink_id(), | 1980 SurfaceId middle_surface_id(middle_factory.frame_sink_id(), |
| 1977 middle_local_frame_id); | 1981 middle_local_surface_id); |
| 1978 LocalFrameId child_local_frame_id(9u, kArbitraryToken); | 1982 LocalSurfaceId child_local_surface_id(9u, kArbitraryToken); |
| 1979 SurfaceId child_surface_id(child_factory.frame_sink_id(), | 1983 SurfaceId child_surface_id(child_factory.frame_sink_id(), |
| 1980 child_local_frame_id); | 1984 child_local_surface_id); |
| 1981 | 1985 |
| 1982 ResourceId ids[] = {14, 15, 16}; | 1986 ResourceId ids[] = {14, 15, 16}; |
| 1983 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), | 1987 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), |
| 1984 &child_factory, child_surface_id); | 1988 &child_factory, child_surface_id); |
| 1985 | 1989 |
| 1986 ResourceId ids2[] = {17, 18, 19}; | 1990 ResourceId ids2[] = {17, 18, 19}; |
| 1987 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), false, | 1991 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), false, |
| 1988 child_surface_id, &middle_factory, | 1992 child_surface_id, &middle_factory, |
| 1989 middle_surface_id); | 1993 middle_surface_id); |
| 1990 | 1994 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2013 | 2017 |
| 2014 root_factory.EvictSurface(); | 2018 root_factory.EvictSurface(); |
| 2015 middle_factory.EvictSurface(); | 2019 middle_factory.EvictSurface(); |
| 2016 child_factory.EvictSurface(); | 2020 child_factory.EvictSurface(); |
| 2017 } | 2021 } |
| 2018 | 2022 |
| 2019 TEST_F(SurfaceAggregatorWithResourcesTest, SecureOutputTexture) { | 2023 TEST_F(SurfaceAggregatorWithResourcesTest, SecureOutputTexture) { |
| 2020 ResourceTrackingSurfaceFactoryClient client; | 2024 ResourceTrackingSurfaceFactoryClient client; |
| 2021 SurfaceFactory factory1(FrameSinkId(1, 1), &manager_, &client); | 2025 SurfaceFactory factory1(FrameSinkId(1, 1), &manager_, &client); |
| 2022 SurfaceFactory factory2(FrameSinkId(2, 2), &manager_, &client); | 2026 SurfaceFactory factory2(FrameSinkId(2, 2), &manager_, &client); |
| 2023 LocalFrameId local_frame1_id(7u, base::UnguessableToken::Create()); | 2027 LocalSurfaceId local_frame1_id(7u, base::UnguessableToken::Create()); |
| 2024 SurfaceId surface1_id(factory1.frame_sink_id(), local_frame1_id); | 2028 SurfaceId surface1_id(factory1.frame_sink_id(), local_frame1_id); |
| 2025 | 2029 |
| 2026 LocalFrameId local_frame2_id(8u, base::UnguessableToken::Create()); | 2030 LocalSurfaceId local_frame2_id(8u, base::UnguessableToken::Create()); |
| 2027 SurfaceId surface2_id(factory2.frame_sink_id(), local_frame2_id); | 2031 SurfaceId surface2_id(factory2.frame_sink_id(), local_frame2_id); |
| 2028 | 2032 |
| 2029 ResourceId ids[] = {11, 12, 13}; | 2033 ResourceId ids[] = {11, 12, 13}; |
| 2030 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), | 2034 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), |
| 2031 &factory1, surface1_id); | 2035 &factory1, surface1_id); |
| 2032 | 2036 |
| 2033 CompositorFrame frame = aggregator_->Aggregate(surface1_id); | 2037 CompositorFrame frame = aggregator_->Aggregate(surface1_id); |
| 2034 | 2038 |
| 2035 RenderPass* render_pass = frame.render_pass_list.back().get(); | 2039 RenderPass* render_pass = frame.render_pass_list.back().get(); |
| 2036 | 2040 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2078 // Output is insecure, so texture should be drawn. | 2082 // Output is insecure, so texture should be drawn. |
| 2079 EXPECT_EQ(DrawQuad::SOLID_COLOR, render_pass->quad_list.back()->material); | 2083 EXPECT_EQ(DrawQuad::SOLID_COLOR, render_pass->quad_list.back()->material); |
| 2080 | 2084 |
| 2081 factory1.EvictSurface(); | 2085 factory1.EvictSurface(); |
| 2082 factory2.EvictSurface(); | 2086 factory2.EvictSurface(); |
| 2083 } | 2087 } |
| 2084 | 2088 |
| 2085 } // namespace | 2089 } // namespace |
| 2086 } // namespace cc | 2090 } // namespace cc |
| 2087 | 2091 |
| OLD | NEW |