Chromium Code Reviews| Index: cc/surfaces/surface_aggregator_perftest.cc |
| diff --git a/cc/surfaces/surface_aggregator_perftest.cc b/cc/surfaces/surface_aggregator_perftest.cc |
| index 0d990f0ac9263272a20140c2120c0be62acc9a01..c91741c9cc8be00eb4a15a3e685b9646ccf669cc 100644 |
| --- a/cc/surfaces/surface_aggregator_perftest.cc |
| +++ b/cc/surfaces/surface_aggregator_perftest.cc |
| @@ -21,7 +21,6 @@ |
| namespace cc { |
| namespace { |
| -static constexpr FrameSinkId kArbitraryFrameSinkId(1, 1); |
| static const base::UnguessableToken kArbitraryToken = |
| base::UnguessableToken::Create(); |
| @@ -33,8 +32,7 @@ class EmptySurfaceFactoryClient : public SurfaceFactoryClient { |
| class SurfaceAggregatorPerfTest : public testing::Test { |
| public: |
| - SurfaceAggregatorPerfTest() |
| - : factory_(kArbitraryFrameSinkId, &manager_, &empty_client_) { |
| + SurfaceAggregatorPerfTest() { |
| context_provider_ = TestContextProvider::Create(); |
| context_provider_->BindToCurrentThread(); |
| shared_bitmap_manager_.reset(new TestSharedBitmapManager); |
| @@ -49,11 +47,14 @@ class SurfaceAggregatorPerfTest : public testing::Test { |
| bool optimize_damage, |
| bool full_damage, |
| const std::string& name) { |
| + std::unique_ptr<SurfaceFactory> child_factories[num_surfaces]; |
|
Fady Samuel
2016/11/16 03:12:00
Dynamically sized arrays on the stack is not a sta
|
| + for (int i = 0; i < num_surfaces; i++) |
| + child_factories[i].reset( |
| + new SurfaceFactory(FrameSinkId(1, i + 1), &manager_, &empty_client_)); |
| aggregator_.reset(new SurfaceAggregator(&manager_, resource_provider_.get(), |
| optimize_damage)); |
| - for (int i = 1; i <= num_surfaces; i++) { |
| - LocalFrameId local_frame_id(i, kArbitraryToken); |
| - factory_.Create(local_frame_id); |
| + for (int i = 0; i < num_surfaces; i++) { |
| + LocalFrameId local_frame_id(i + 1, kArbitraryToken); |
| std::unique_ptr<RenderPass> pass(RenderPass::Create()); |
| CompositorFrame frame; |
| @@ -86,20 +87,21 @@ class SurfaceAggregatorPerfTest : public testing::Test { |
| } |
| sqs = pass->CreateAndAppendSharedQuadState(); |
| sqs->opacity = opacity; |
| - if (i > 1) { |
| + if (i >= 1) { |
| SurfaceDrawQuad* surface_quad = |
| pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
| - surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), |
| - SurfaceId(kArbitraryFrameSinkId, |
| - LocalFrameId(i - 1, kArbitraryToken))); |
| + surface_quad->SetNew( |
| + sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), |
| + SurfaceId(FrameSinkId(1, i), LocalFrameId(i, kArbitraryToken))); |
| } |
| frame.render_pass_list.push_back(std::move(pass)); |
| - factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), |
| - SurfaceFactory::DrawCallback()); |
| + child_factories[i]->SubmitCompositorFrame( |
| + local_frame_id, std::move(frame), SurfaceFactory::DrawCallback()); |
| } |
| - factory_.Create(LocalFrameId(num_surfaces + 1, kArbitraryToken)); |
| + SurfaceFactory root_factory(FrameSinkId(1, num_surfaces + 1), &manager_, |
| + &empty_client_); |
| timer_.Reset(); |
| do { |
| std::unique_ptr<RenderPass> pass(RenderPass::Create()); |
| @@ -110,7 +112,7 @@ class SurfaceAggregatorPerfTest : public testing::Test { |
| pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
| surface_quad->SetNew( |
| sqs, gfx::Rect(0, 0, 100, 100), gfx::Rect(0, 0, 100, 100), |
| - SurfaceId(kArbitraryFrameSinkId, |
| + SurfaceId(FrameSinkId(1, num_surfaces), |
| LocalFrameId(num_surfaces, kArbitraryToken))); |
| if (full_damage) |
| @@ -119,28 +121,27 @@ class SurfaceAggregatorPerfTest : public testing::Test { |
| pass->damage_rect = gfx::Rect(0, 0, 1, 1); |
| frame.render_pass_list.push_back(std::move(pass)); |
| - factory_.SubmitCompositorFrame( |
| + |
| + root_factory.SubmitCompositorFrame( |
| LocalFrameId(num_surfaces + 1, kArbitraryToken), std::move(frame), |
| SurfaceFactory::DrawCallback()); |
| CompositorFrame aggregated = aggregator_->Aggregate( |
| - SurfaceId(kArbitraryFrameSinkId, |
| + SurfaceId(FrameSinkId(1, num_surfaces + 1), |
| LocalFrameId(num_surfaces + 1, kArbitraryToken))); |
| timer_.NextLap(); |
| } while (!timer_.HasTimeLimitExpired()); |
| perf_test::PrintResult("aggregator_speed", "", name, timer_.LapsPerSecond(), |
| "runs/s", true); |
| - |
| - factory_.Destroy(LocalFrameId(num_surfaces + 1, kArbitraryToken)); |
| - for (int i = 1; i <= num_surfaces; i++) |
| - factory_.Destroy(LocalFrameId(i, kArbitraryToken)); |
| + for (int i = 0; i < num_surfaces; i++) |
| + child_factories[i]->EvictSurface(); |
| + root_factory.EvictSurface(); |
| } |
| protected: |
| SurfaceManager manager_; |
| EmptySurfaceFactoryClient empty_client_; |
| - SurfaceFactory factory_; |
| scoped_refptr<TestContextProvider> context_provider_; |
| std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; |
| std::unique_ptr<ResourceProvider> resource_provider_; |