OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "base/memory/ptr_util.h" | 5 #include "base/memory/ptr_util.h" |
6 #include "cc/debug/lap_timer.h" | 6 #include "cc/debug/lap_timer.h" |
7 #include "cc/output/compositor_frame.h" | 7 #include "cc/output/compositor_frame.h" |
8 #include "cc/output/delegated_frame_data.h" | 8 #include "cc/output/delegated_frame_data.h" |
9 #include "cc/quads/surface_draw_quad.h" | 9 #include "cc/quads/surface_draw_quad.h" |
10 #include "cc/quads/texture_draw_quad.h" | 10 #include "cc/quads/texture_draw_quad.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 | 44 |
45 void RunTest(int num_surfaces, | 45 void RunTest(int num_surfaces, |
46 int num_textures, | 46 int num_textures, |
47 float opacity, | 47 float opacity, |
48 bool optimize_damage, | 48 bool optimize_damage, |
49 bool full_damage, | 49 bool full_damage, |
50 const std::string& name) { | 50 const std::string& name) { |
51 aggregator_.reset(new SurfaceAggregator(&manager_, resource_provider_.get(), | 51 aggregator_.reset(new SurfaceAggregator(&manager_, resource_provider_.get(), |
52 optimize_damage)); | 52 optimize_damage)); |
53 for (int i = 1; i <= num_surfaces; i++) { | 53 for (int i = 1; i <= num_surfaces; i++) { |
54 factory_.Create(SurfaceId(kArbitraryFrameSinkId, i, 0)); | 54 LocalFrameId local_frame_id(i, 0); |
| 55 factory_.Create(local_frame_id); |
55 std::unique_ptr<RenderPass> pass(RenderPass::Create()); | 56 std::unique_ptr<RenderPass> pass(RenderPass::Create()); |
56 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 57 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
57 | 58 |
58 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 59 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
59 for (int j = 0; j < num_textures; j++) { | 60 for (int j = 0; j < num_textures; j++) { |
60 TransferableResource resource; | 61 TransferableResource resource; |
61 resource.id = j; | 62 resource.id = j; |
62 resource.is_software = true; | 63 resource.is_software = true; |
63 frame_data->resource_list.push_back(resource); | 64 frame_data->resource_list.push_back(resource); |
64 | 65 |
(...skipping 15 matching lines...) Expand all Loading... |
80 quad->SetAll(sqs, rect, opaque_rect, visible_rect, needs_blending, j, | 81 quad->SetAll(sqs, rect, opaque_rect, visible_rect, needs_blending, j, |
81 gfx::Size(), premultiplied_alpha, uv_top_left, | 82 gfx::Size(), premultiplied_alpha, uv_top_left, |
82 uv_bottom_right, background_color, vertex_opacity, flipped, | 83 uv_bottom_right, background_color, vertex_opacity, flipped, |
83 nearest_neighbor, false); | 84 nearest_neighbor, false); |
84 } | 85 } |
85 sqs = pass->CreateAndAppendSharedQuadState(); | 86 sqs = pass->CreateAndAppendSharedQuadState(); |
86 sqs->opacity = opacity; | 87 sqs->opacity = opacity; |
87 if (i > 1) { | 88 if (i > 1) { |
88 SurfaceDrawQuad* surface_quad = | 89 SurfaceDrawQuad* surface_quad = |
89 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 90 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
90 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), | 91 surface_quad->SetNew( |
91 SurfaceId(kArbitraryFrameSinkId, i - 1, 0)); | 92 sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), |
| 93 SurfaceId(kArbitraryFrameSinkId, LocalFrameId(i - 1, 0))); |
92 } | 94 } |
93 | 95 |
94 frame_data->render_pass_list.push_back(std::move(pass)); | 96 frame_data->render_pass_list.push_back(std::move(pass)); |
95 CompositorFrame frame; | 97 CompositorFrame frame; |
96 frame.delegated_frame_data = std::move(frame_data); | 98 frame.delegated_frame_data = std::move(frame_data); |
97 factory_.SubmitCompositorFrame(SurfaceId(kArbitraryFrameSinkId, i, 0), | 99 factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), |
98 std::move(frame), | |
99 SurfaceFactory::DrawCallback()); | 100 SurfaceFactory::DrawCallback()); |
100 } | 101 } |
101 | 102 |
102 factory_.Create(SurfaceId(kArbitraryFrameSinkId, num_surfaces + 1, 0)); | 103 factory_.Create(LocalFrameId(num_surfaces + 1, 0)); |
103 timer_.Reset(); | 104 timer_.Reset(); |
104 do { | 105 do { |
105 std::unique_ptr<RenderPass> pass(RenderPass::Create()); | 106 std::unique_ptr<RenderPass> pass(RenderPass::Create()); |
106 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 107 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
107 | 108 |
108 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 109 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
109 SurfaceDrawQuad* surface_quad = | 110 SurfaceDrawQuad* surface_quad = |
110 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 111 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
111 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 100, 100), | 112 surface_quad->SetNew( |
112 gfx::Rect(0, 0, 100, 100), | 113 sqs, gfx::Rect(0, 0, 100, 100), gfx::Rect(0, 0, 100, 100), |
113 SurfaceId(kArbitraryFrameSinkId, num_surfaces, 0)); | 114 SurfaceId(kArbitraryFrameSinkId, LocalFrameId(num_surfaces, 0))); |
114 | 115 |
115 if (full_damage) | 116 if (full_damage) |
116 pass->damage_rect = gfx::Rect(0, 0, 100, 100); | 117 pass->damage_rect = gfx::Rect(0, 0, 100, 100); |
117 else | 118 else |
118 pass->damage_rect = gfx::Rect(0, 0, 1, 1); | 119 pass->damage_rect = gfx::Rect(0, 0, 1, 1); |
119 | 120 |
120 frame_data->render_pass_list.push_back(std::move(pass)); | 121 frame_data->render_pass_list.push_back(std::move(pass)); |
121 CompositorFrame frame; | 122 CompositorFrame frame; |
122 frame.delegated_frame_data = std::move(frame_data); | 123 frame.delegated_frame_data = std::move(frame_data); |
123 factory_.SubmitCompositorFrame( | 124 factory_.SubmitCompositorFrame(LocalFrameId(num_surfaces + 1, 0), |
124 SurfaceId(kArbitraryFrameSinkId, num_surfaces + 1, 0), | 125 std::move(frame), |
125 std::move(frame), SurfaceFactory::DrawCallback()); | 126 SurfaceFactory::DrawCallback()); |
126 | 127 |
127 CompositorFrame aggregated = aggregator_->Aggregate( | 128 CompositorFrame aggregated = aggregator_->Aggregate( |
128 SurfaceId(kArbitraryFrameSinkId, num_surfaces + 1, 0)); | 129 SurfaceId(kArbitraryFrameSinkId, LocalFrameId(num_surfaces + 1, 0))); |
129 timer_.NextLap(); | 130 timer_.NextLap(); |
130 } while (!timer_.HasTimeLimitExpired()); | 131 } while (!timer_.HasTimeLimitExpired()); |
131 | 132 |
132 perf_test::PrintResult("aggregator_speed", "", name, timer_.LapsPerSecond(), | 133 perf_test::PrintResult("aggregator_speed", "", name, timer_.LapsPerSecond(), |
133 "runs/s", true); | 134 "runs/s", true); |
134 | 135 |
135 factory_.Destroy(SurfaceId(kArbitraryFrameSinkId, num_surfaces + 1, 0)); | 136 factory_.Destroy(LocalFrameId(num_surfaces + 1, 0)); |
136 for (int i = 1; i <= num_surfaces; i++) | 137 for (int i = 1; i <= num_surfaces; i++) |
137 factory_.Destroy(SurfaceId(kArbitraryFrameSinkId, i, 0)); | 138 factory_.Destroy(LocalFrameId(i, 0)); |
138 } | 139 } |
139 | 140 |
140 protected: | 141 protected: |
141 SurfaceManager manager_; | 142 SurfaceManager manager_; |
142 EmptySurfaceFactoryClient empty_client_; | 143 EmptySurfaceFactoryClient empty_client_; |
143 SurfaceFactory factory_; | 144 SurfaceFactory factory_; |
144 scoped_refptr<TestContextProvider> context_provider_; | 145 scoped_refptr<TestContextProvider> context_provider_; |
145 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; | 146 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; |
146 std::unique_ptr<ResourceProvider> resource_provider_; | 147 std::unique_ptr<ResourceProvider> resource_provider_; |
147 std::unique_ptr<SurfaceAggregator> aggregator_; | 148 std::unique_ptr<SurfaceAggregator> aggregator_; |
(...skipping 23 matching lines...) Expand all Loading... |
171 TEST_F(SurfaceAggregatorPerfTest, FewSurfacesDamageCalc) { | 172 TEST_F(SurfaceAggregatorPerfTest, FewSurfacesDamageCalc) { |
172 RunTest(3, 1000, 1.f, true, true, "few_surfaces_damage_calc"); | 173 RunTest(3, 1000, 1.f, true, true, "few_surfaces_damage_calc"); |
173 } | 174 } |
174 | 175 |
175 TEST_F(SurfaceAggregatorPerfTest, FewSurfacesAggregateDamaged) { | 176 TEST_F(SurfaceAggregatorPerfTest, FewSurfacesAggregateDamaged) { |
176 RunTest(3, 1000, 1.f, true, false, "few_surfaces_aggregate_damaged"); | 177 RunTest(3, 1000, 1.f, true, false, "few_surfaces_aggregate_damaged"); |
177 } | 178 } |
178 | 179 |
179 } // namespace | 180 } // namespace |
180 } // namespace cc | 181 } // namespace cc |
OLD | NEW |