| Index: cc/output/direct_renderer.cc
|
| diff --git a/cc/output/direct_renderer.cc b/cc/output/direct_renderer.cc
|
| index a1d3a65a8a11b6b1eb17f7e7edb0d52442f3e90e..9ec397f434f74a957b4ad4be6059399fede02760 100644
|
| --- a/cc/output/direct_renderer.cc
|
| +++ b/cc/output/direct_renderer.cc
|
| @@ -151,7 +151,7 @@ void DirectRenderer::DecideRenderPassAllocationsForFrame(
|
| for (size_t i = 0; i < render_passes_in_draw_order.size(); ++i)
|
| render_passes_in_frame.insert(std::pair<RenderPassId, gfx::Size>(
|
| render_passes_in_draw_order[i]->id,
|
| - RenderPassTextureSize(render_passes_in_draw_order[i])));
|
| + RenderPassTextureSize(render_passes_in_draw_order[i].get())));
|
|
|
| std::vector<RenderPassId> passes_to_delete;
|
| for (auto pass_iter = render_pass_textures_.begin();
|
| @@ -198,7 +198,8 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
|
| "Renderer4.renderPassCount",
|
| base::saturated_cast<int>(render_passes_in_draw_order->size()));
|
|
|
| - const RenderPass* root_render_pass = render_passes_in_draw_order->back();
|
| + const RenderPass* root_render_pass =
|
| + render_passes_in_draw_order->back().get();
|
| DCHECK(root_render_pass);
|
|
|
| DrawingFrame frame;
|
| @@ -256,7 +257,7 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
|
| // overlays and dont have any copy requests.
|
| if (frame.root_damage_rect.IsEmpty()) {
|
| bool handle_copy_requests = false;
|
| - for (auto* pass : *render_passes_in_draw_order) {
|
| + for (const auto& pass : *render_passes_in_draw_order) {
|
| if (!pass->copy_requests.empty()) {
|
| handle_copy_requests = true;
|
| break;
|
| @@ -276,20 +277,17 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
|
| }
|
| }
|
|
|
| - for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) {
|
| - RenderPass* pass = render_passes_in_draw_order->at(i);
|
| - DrawRenderPass(&frame, pass);
|
| -
|
| - for (ScopedPtrVector<CopyOutputRequest>::iterator it =
|
| - pass->copy_requests.begin();
|
| - it != pass->copy_requests.end();
|
| - ++it) {
|
| - if (it != pass->copy_requests.begin()) {
|
| - // Doing a readback is destructive of our state on Mac, so make sure
|
| - // we restore the state between readbacks. http://crbug.com/99393.
|
| - UseRenderPass(&frame, pass);
|
| - }
|
| - CopyCurrentRenderPassToBitmap(&frame, pass->copy_requests.take(it));
|
| + for (const auto& pass : *render_passes_in_draw_order) {
|
| + DrawRenderPass(&frame, pass.get());
|
| +
|
| + bool first_request = true;
|
| + for (auto& copy_request : pass->copy_requests) {
|
| + // Doing a readback is destructive of our state on Mac, so make sure
|
| + // we restore the state between readbacks. http://crbug.com/99393.
|
| + if (!first_request)
|
| + UseRenderPass(&frame, pass.get());
|
| + CopyCurrentRenderPassToBitmap(&frame, std::move(copy_request));
|
| + first_request = false;
|
| }
|
| }
|
| FinishDrawingFrame(&frame);
|
|
|