Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2152)

Unified Diff: cc/output/ca_layer_overlay.cc

Issue 2543473004: cc: Move filters from RenderPassDrawQuad to RenderPass (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/output/ca_layer_overlay.cc
diff --git a/cc/output/ca_layer_overlay.cc b/cc/output/ca_layer_overlay.cc
index 0715345705dfd0ce7fed1272ce992ff171c23624..eb74bc4a290e2b5fe564dec18315b86315f00b71 100644
--- a/cc/output/ca_layer_overlay.cc
+++ b/cc/output/ca_layer_overlay.cc
@@ -4,6 +4,8 @@
#include "cc/output/ca_layer_overlay.h"
+#include <algorithm>
+
#include "base/metrics/histogram_macros.h"
#include "cc/quads/render_pass_draw_quad.h"
#include "cc/quads/solid_color_draw_quad.h"
@@ -72,19 +74,38 @@ bool FilterOperationSupported(const FilterOperation& operation) {
}
}
-CALayerResult FromRenderPassQuad(ResourceProvider* resource_provider,
- const RenderPassDrawQuad* quad,
- CALayerOverlay* ca_layer_overlay) {
- if (quad->background_filters.size() != 0)
+static const FilterOperations* FiltersForPass(
+ RenderPassId id,
+ const RenderPassFilterList& filter_list) {
+ auto it =
+ std::find_if(filter_list.begin(), filter_list.end(),
+ [id](const std::pair<RenderPassId, FilterOperations>& p) {
+ return p.first == id;
+ });
+ return it == filter_list.end() ? nullptr : &it->second;
+}
+
+CALayerResult FromRenderPassQuad(
+ ResourceProvider* resource_provider,
+ const RenderPassDrawQuad* quad,
+ const RenderPassFilterList& render_pass_filters,
+ const RenderPassFilterList& render_pass_background_filters,
+ CALayerOverlay* ca_layer_overlay) {
+ if (FiltersForPass(quad->render_pass_id, render_pass_background_filters)) {
return CA_LAYER_FAILED_RENDER_PASS_BACKGROUND_FILTERS;
+ }
if (quad->shared_quad_state->sorting_context_id != 0)
return CA_LAYER_FAILED_RENDER_PASS_SORTING_CONTEXT_ID;
- for (const FilterOperation& operation : quad->filters.operations()) {
- bool success = FilterOperationSupported(operation);
- if (!success)
- return CA_LAYER_FAILED_RENDER_PASS_FILTER_OPERATION;
+ const FilterOperations* filters =
+ FiltersForPass(quad->render_pass_id, render_pass_filters);
+ if (filters) {
+ for (const FilterOperation& operation : filters->operations()) {
+ bool success = FilterOperationSupported(operation);
+ if (!success)
+ return CA_LAYER_FAILED_RENDER_PASS_FILTER_OPERATION;
+ }
}
ca_layer_overlay->rpdq = quad;
@@ -163,12 +184,15 @@ CALayerResult FromTileQuad(ResourceProvider* resource_provider,
class CALayerOverlayProcessor {
public:
- CALayerResult FromDrawQuad(ResourceProvider* resource_provider,
- const gfx::RectF& display_rect,
- const DrawQuad* quad,
- CALayerOverlay* ca_layer_overlay,
- bool* skip,
- bool* render_pass_draw_quad) {
+ CALayerResult FromDrawQuad(
+ ResourceProvider* resource_provider,
+ const gfx::RectF& display_rect,
+ const DrawQuad* quad,
+ const RenderPassFilterList& render_pass_filters,
+ const RenderPassFilterList& render_pass_background_filters,
+ CALayerOverlay* ca_layer_overlay,
+ bool* skip,
+ bool* render_pass_draw_quad) {
if (quad->shared_quad_state->blend_mode != SkBlendMode::kSrcOver)
return CA_LAYER_FAILED_QUAD_BLEND_MODE;
@@ -230,9 +254,10 @@ class CALayerOverlayProcessor {
case DrawQuad::PICTURE_CONTENT:
return CA_LAYER_FAILED_PICTURE_CONTENT;
case DrawQuad::RENDER_PASS:
- return FromRenderPassQuad(resource_provider,
- RenderPassDrawQuad::MaterialCast(quad),
- ca_layer_overlay);
+ return FromRenderPassQuad(
+ resource_provider, RenderPassDrawQuad::MaterialCast(quad),
+ render_pass_filters, render_pass_background_filters,
+ ca_layer_overlay);
case DrawQuad::SURFACE_CONTENT:
return CA_LAYER_FAILED_SURFACE_CONTENT;
case DrawQuad::YUV_VIDEO_CONTENT:
@@ -257,10 +282,13 @@ CALayerOverlay::CALayerOverlay(const CALayerOverlay& other) = default;
CALayerOverlay::~CALayerOverlay() {}
-bool ProcessForCALayerOverlays(ResourceProvider* resource_provider,
- const gfx::RectF& display_rect,
- const QuadList& quad_list,
- CALayerOverlayList* ca_layer_overlays) {
+bool ProcessForCALayerOverlays(
+ ResourceProvider* resource_provider,
+ const gfx::RectF& display_rect,
+ const QuadList& quad_list,
+ const RenderPassFilterList& render_pass_filters,
+ const RenderPassFilterList& render_pass_background_filters,
+ CALayerOverlayList* ca_layer_overlays) {
CALayerResult result = CA_LAYER_SUCCESS;
ca_layer_overlays->reserve(quad_list.size());
@@ -273,7 +301,9 @@ bool ProcessForCALayerOverlays(ResourceProvider* resource_provider,
bool skip = false;
bool render_pass_draw_quad = false;
result = processor.FromDrawQuad(resource_provider, display_rect, quad,
- &ca_layer, &skip, &render_pass_draw_quad);
+ render_pass_filters,
+ render_pass_background_filters, &ca_layer,
+ &skip, &render_pass_draw_quad);
if (result != CA_LAYER_SUCCESS)
break;

Powered by Google App Engine
This is Rietveld 408576698