| Index: cc/output/direct_renderer.cc
|
| diff --git a/cc/output/direct_renderer.cc b/cc/output/direct_renderer.cc
|
| index cc7fd12c67002cf9dd367ff183eebf9d9792a2d6..a22a7395be34c6e97605f1d36e72d8896055368e 100644
|
| --- a/cc/output/direct_renderer.cc
|
| +++ b/cc/output/direct_renderer.cc
|
| @@ -254,6 +254,18 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
|
|
|
| BeginDrawingFrame(&frame);
|
|
|
| + for (const auto& pass : *render_passes_in_draw_order) {
|
| + if (!pass->filters.IsEmpty())
|
| + render_pass_filters_.push_back(std::make_pair(pass->id, &pass->filters));
|
| + if (!pass->background_filters.IsEmpty()) {
|
| + render_pass_background_filters_.push_back(
|
| + std::make_pair(pass->id, &pass->background_filters));
|
| + }
|
| + std::sort(render_pass_filters_.begin(), render_pass_filters_.end());
|
| + std::sort(render_pass_background_filters_.begin(),
|
| + render_pass_background_filters_.end());
|
| + }
|
| +
|
| // Draw all non-root render passes except for the root render pass.
|
| for (const auto& pass : *render_passes_in_draw_order) {
|
| if (pass.get() == root_render_pass)
|
| @@ -277,7 +289,8 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
|
| // Attempt to replace some or all of the quads of the root render pass with
|
| // overlays.
|
| overlay_processor_->ProcessForOverlays(
|
| - resource_provider_, root_render_pass, &frame.overlay_list,
|
| + resource_provider_, root_render_pass, render_pass_filters_,
|
| + render_pass_background_filters_, &frame.overlay_list,
|
| &frame.ca_layer_overlay_list, &frame.root_damage_rect);
|
|
|
| // We can skip all drawing if the damage rect is now empty.
|
| @@ -305,6 +318,8 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
|
|
|
| FinishDrawingFrame(&frame);
|
| render_passes_in_draw_order->clear();
|
| + render_pass_filters_.clear();
|
| + render_pass_background_filters_.clear();
|
| }
|
|
|
| gfx::Rect DirectRenderer::ComputeScissorRectForRenderPass(
|
| @@ -405,6 +420,27 @@ void DirectRenderer::DoDrawPolygon(const DrawPolygon& poly,
|
| }
|
| }
|
|
|
| +const FilterOperations* DirectRenderer::FiltersForPass(
|
| + const RenderPassId& id) const {
|
| + auto it =
|
| + std::lower_bound(render_pass_filters_.begin(), render_pass_filters_.end(),
|
| + std::pair<RenderPassId, FilterOperations*>(id, nullptr));
|
| + if (it != render_pass_filters_.end() && it->first == id)
|
| + return it->second;
|
| + return nullptr;
|
| +}
|
| +
|
| +const FilterOperations* DirectRenderer::BackgroundFiltersForPass(
|
| + const RenderPassId& id) const {
|
| + auto it =
|
| + std::lower_bound(render_pass_background_filters_.begin(),
|
| + render_pass_background_filters_.end(),
|
| + std::pair<RenderPassId, FilterOperations*>(id, nullptr));
|
| + if (it != render_pass_background_filters_.end() && it->first == id)
|
| + return it->second;
|
| + return nullptr;
|
| +}
|
| +
|
| void DirectRenderer::FlushPolygons(
|
| std::deque<std::unique_ptr<DrawPolygon>>* poly_list,
|
| DrawingFrame* frame,
|
|
|