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

Side by Side Diff: cc/output/gl_renderer.cc

Issue 2693023002: Use SwapBuffersWithBounds on Chromecast (Closed)
Patch Set: danakj nits 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 The Chromium Authors. All rights reserved. 1 // Copyright 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/output/gl_renderer.h" 5 #include "cc/output/gl_renderer.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 const auto& context_caps = 395 const auto& context_caps =
396 output_surface_->context_provider()->ContextCapabilities(); 396 output_surface_->context_provider()->ContextCapabilities();
397 DCHECK(!context_caps.iosurface || context_caps.texture_rectangle); 397 DCHECK(!context_caps.iosurface || context_caps.texture_rectangle);
398 398
399 use_discard_framebuffer_ = context_caps.discard_framebuffer; 399 use_discard_framebuffer_ = context_caps.discard_framebuffer;
400 use_sync_query_ = context_caps.sync_query; 400 use_sync_query_ = context_caps.sync_query;
401 use_blend_equation_advanced_ = context_caps.blend_equation_advanced; 401 use_blend_equation_advanced_ = context_caps.blend_equation_advanced;
402 use_blend_equation_advanced_coherent_ = 402 use_blend_equation_advanced_coherent_ =
403 context_caps.blend_equation_advanced_coherent; 403 context_caps.blend_equation_advanced_coherent;
404 use_occlusion_query_ = context_caps.occlusion_query; 404 use_occlusion_query_ = context_caps.occlusion_query;
405 use_swap_with_bounds_ = context_caps.swap_buffers_with_bounds;
405 406
406 InitializeSharedObjects(); 407 InitializeSharedObjects();
407 } 408 }
408 409
409 GLRenderer::~GLRenderer() { 410 GLRenderer::~GLRenderer() {
410 CleanupSharedObjects(); 411 CleanupSharedObjects();
411 412
412 if (context_visibility_) { 413 if (context_visibility_) {
413 auto* context_provider = output_surface_->context_provider(); 414 auto* context_provider = output_surface_->context_provider();
414 auto* cache_controller = context_provider->CacheController(); 415 auto* cache_controller = context_provider->CacheController();
415 cache_controller->ClientBecameNotVisible(std::move(context_visibility_)); 416 cache_controller->ClientBecameNotVisible(std::move(context_visibility_));
416 } 417 }
417 } 418 }
418 419
419 bool GLRenderer::CanPartialSwap() { 420 bool GLRenderer::CanPartialSwap() {
421 if (use_swap_with_bounds_)
422 return false;
420 auto* context_provider = output_surface_->context_provider(); 423 auto* context_provider = output_surface_->context_provider();
421 return context_provider->ContextCapabilities().post_sub_buffer; 424 return context_provider->ContextCapabilities().post_sub_buffer;
422 } 425 }
423 426
424 ResourceFormat GLRenderer::BackbufferFormat() const { 427 ResourceFormat GLRenderer::BackbufferFormat() const {
425 // TODO(ccameron): If we are targeting high bit depth or HDR, we should use 428 // TODO(ccameron): If we are targeting high bit depth or HDR, we should use
426 // RGBA_F16 here. 429 // RGBA_F16 here.
427 return resource_provider_->best_texture_format(); 430 return resource_provider_->best_texture_format();
428 } 431 }
429 432
(...skipping 2154 matching lines...) Expand 10 before | Expand all | Expand 10 after
2584 DCHECK(visible_); 2587 DCHECK(visible_);
2585 2588
2586 TRACE_EVENT0("cc", "GLRenderer::SwapBuffers"); 2589 TRACE_EVENT0("cc", "GLRenderer::SwapBuffers");
2587 // We're done! Time to swapbuffers! 2590 // We're done! Time to swapbuffers!
2588 2591
2589 gfx::Size surface_size = surface_size_for_swap_buffers(); 2592 gfx::Size surface_size = surface_size_for_swap_buffers();
2590 2593
2591 OutputSurfaceFrame output_frame; 2594 OutputSurfaceFrame output_frame;
2592 output_frame.latency_info = std::move(latency_info); 2595 output_frame.latency_info = std::move(latency_info);
2593 output_frame.size = surface_size; 2596 output_frame.size = surface_size;
2594 if (use_partial_swap_) { 2597 if (use_swap_with_bounds_) {
2598 output_frame.content_bounds = current_frame()->root_content_bounds;
2599 } else if (use_partial_swap_) {
2595 // If supported, we can save significant bandwidth by only swapping the 2600 // If supported, we can save significant bandwidth by only swapping the
2596 // damaged/scissored region (clamped to the viewport). 2601 // damaged/scissored region (clamped to the viewport).
2597 swap_buffer_rect_.Intersect(gfx::Rect(surface_size)); 2602 swap_buffer_rect_.Intersect(gfx::Rect(surface_size));
2598 int flipped_y_pos_of_rect_bottom = surface_size.height() - 2603 int flipped_y_pos_of_rect_bottom = surface_size.height() -
2599 swap_buffer_rect_.y() - 2604 swap_buffer_rect_.y() -
2600 swap_buffer_rect_.height(); 2605 swap_buffer_rect_.height();
2601 output_frame.sub_buffer_rect = 2606 output_frame.sub_buffer_rect =
2602 gfx::Rect(swap_buffer_rect_.x(), 2607 gfx::Rect(swap_buffer_rect_.x(),
2603 FlippedRootFramebuffer() ? flipped_y_pos_of_rect_bottom 2608 FlippedRootFramebuffer() ? flipped_y_pos_of_rect_bottom
2604 : swap_buffer_rect_.y(), 2609 : swap_buffer_rect_.y(),
(...skipping 888 matching lines...) Expand 10 before | Expand all | Expand 10 after
3493 return; 3498 return;
3494 3499
3495 // Report GPU overdraw as a percentage of |max_result|. 3500 // Report GPU overdraw as a percentage of |max_result|.
3496 TRACE_COUNTER1( 3501 TRACE_COUNTER1(
3497 TRACE_DISABLED_BY_DEFAULT("cc.debug.overdraw"), "GPU Overdraw", 3502 TRACE_DISABLED_BY_DEFAULT("cc.debug.overdraw"), "GPU Overdraw",
3498 (std::accumulate(overdraw->begin(), overdraw->end(), 0) * 100) / 3503 (std::accumulate(overdraw->begin(), overdraw->end(), 0) * 100) /
3499 max_result); 3504 max_result);
3500 } 3505 }
3501 3506
3502 } // namespace cc 3507 } // namespace cc
OLDNEW
« 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