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

Unified Diff: cc/output/gl_renderer.cc

Issue 2736643004: Add DCLayerOverlayProcessor and supporting DCLayer structures. (Closed)
Patch Set: split CALayerOverlay into DCLayerOverlay Created 3 years, 9 months 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
« no previous file with comments | « cc/output/gl_renderer.h ('k') | cc/output/gl_renderer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/gl_renderer.cc
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
index 1eac5f85d19fd7268dc7b9c2d33a9288ab115f9b..1fc9ece2979bb98609006801d559893607a54d5a 100644
--- a/cc/output/gl_renderer.cc
+++ b/cc/output/gl_renderer.cc
@@ -2442,6 +2442,7 @@ void GLRenderer::FinishDrawingFrame() {
blend_shadow_ = false;
ScheduleCALayers();
+ ScheduleDCLayers();
ScheduleOverlays();
}
@@ -3177,6 +3178,64 @@ void GLRenderer::ScheduleCALayers() {
}
}
+void GLRenderer::ScheduleDCLayers() {
+ if (overlay_resource_pool_) {
+ overlay_resource_pool_->CheckBusyResources();
+ }
+
+ scoped_refptr<DCLayerOverlaySharedState> shared_state;
+ size_t copied_render_pass_count = 0;
+ for (const DCLayerOverlay& dc_layer_overlay :
+ current_frame()->dc_layer_overlay_list) {
+ DCHECK(!dc_layer_overlay.rpdq);
+
+ ResourceId contents_resource_id = dc_layer_overlay.contents_resource_id;
+ unsigned texture_id = 0;
+ if (contents_resource_id) {
+ pending_overlay_resources_.push_back(
+ base::MakeUnique<ResourceProvider::ScopedReadLockGL>(
+ resource_provider_, contents_resource_id));
+ texture_id = pending_overlay_resources_.back()->texture_id();
+ }
+ GLfloat contents_rect[4] = {
+ dc_layer_overlay.contents_rect.x(), dc_layer_overlay.contents_rect.y(),
+ dc_layer_overlay.contents_rect.width(),
+ dc_layer_overlay.contents_rect.height(),
+ };
+ GLfloat bounds_rect[4] = {
+ dc_layer_overlay.bounds_rect.x(), dc_layer_overlay.bounds_rect.y(),
+ dc_layer_overlay.bounds_rect.width(),
+ dc_layer_overlay.bounds_rect.height(),
+ };
+ GLboolean is_clipped = dc_layer_overlay.shared_state->is_clipped;
+ GLfloat clip_rect[4] = {dc_layer_overlay.shared_state->clip_rect.x(),
+ dc_layer_overlay.shared_state->clip_rect.y(),
+ dc_layer_overlay.shared_state->clip_rect.width(),
+ dc_layer_overlay.shared_state->clip_rect.height()};
+ GLint z_order = dc_layer_overlay.shared_state->z_order;
+ GLfloat transform[16];
+ dc_layer_overlay.shared_state->transform.asColMajorf(transform);
+ unsigned filter = dc_layer_overlay.filter;
+
+ if (dc_layer_overlay.shared_state != shared_state) {
+ shared_state = dc_layer_overlay.shared_state;
+ gl_->ScheduleDCLayerSharedStateCHROMIUM(
+ dc_layer_overlay.shared_state->opacity, is_clipped, clip_rect,
+ z_order, transform);
+ }
+ gl_->ScheduleDCLayerCHROMIUM(
+ texture_id, contents_rect, dc_layer_overlay.background_color,
+ dc_layer_overlay.edge_aa_mask, bounds_rect, filter);
+ }
+
+ // Take the number of copied render passes in this frame, and use 3 times that
+ // amount as the cache limit.
+ if (overlay_resource_pool_) {
+ overlay_resource_pool_->SetResourceUsageLimits(
+ std::numeric_limits<std::size_t>::max(), copied_render_pass_count * 5);
+ }
+}
+
void GLRenderer::ScheduleOverlays() {
if (current_frame()->overlay_list.empty())
return;
« no previous file with comments | « cc/output/gl_renderer.h ('k') | cc/output/gl_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698