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

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

Issue 2194013002: cc: Delete the Renderer base class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dcheck-delegating
Patch Set: delete-renderer-base-class: rebase Created 4 years, 4 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
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 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 295
296 gpu::gles2::GLES2Interface* gl_; 296 gpu::gles2::GLES2Interface* gl_;
297 unsigned query_id_; 297 unsigned query_id_;
298 bool is_pending_; 298 bool is_pending_;
299 base::WeakPtrFactory<SyncQuery> weak_ptr_factory_; 299 base::WeakPtrFactory<SyncQuery> weak_ptr_factory_;
300 300
301 DISALLOW_COPY_AND_ASSIGN(SyncQuery); 301 DISALLOW_COPY_AND_ASSIGN(SyncQuery);
302 }; 302 };
303 303
304 std::unique_ptr<GLRenderer> GLRenderer::Create( 304 std::unique_ptr<GLRenderer> GLRenderer::Create(
305 RendererClient* client, 305 DirectRendererClient* client,
306 const RendererSettings* settings, 306 const RendererSettings* settings,
307 OutputSurface* output_surface, 307 OutputSurface* output_surface,
308 ResourceProvider* resource_provider, 308 ResourceProvider* resource_provider,
309 TextureMailboxDeleter* texture_mailbox_deleter, 309 TextureMailboxDeleter* texture_mailbox_deleter,
310 int highp_threshold_min) { 310 int highp_threshold_min) {
311 return base::WrapUnique( 311 return base::WrapUnique(
312 new GLRenderer(client, settings, output_surface, resource_provider, 312 new GLRenderer(client, settings, output_surface, resource_provider,
313 texture_mailbox_deleter, highp_threshold_min)); 313 texture_mailbox_deleter, highp_threshold_min));
314 } 314 }
315 315
316 GLRenderer::GLRenderer(RendererClient* client, 316 GLRenderer::GLRenderer(DirectRendererClient* client,
317 const RendererSettings* settings, 317 const RendererSettings* settings,
318 OutputSurface* output_surface, 318 OutputSurface* output_surface,
319 ResourceProvider* resource_provider, 319 ResourceProvider* resource_provider,
320 TextureMailboxDeleter* texture_mailbox_deleter, 320 TextureMailboxDeleter* texture_mailbox_deleter,
321 int highp_threshold_min) 321 int highp_threshold_min)
322 : DirectRenderer(client, settings, output_surface, resource_provider), 322 : DirectRenderer(client, settings, output_surface, resource_provider),
323 offscreen_framebuffer_id_(0), 323 offscreen_framebuffer_id_(0),
324 shared_geometry_quad_(QuadVertexRect()), 324 shared_geometry_quad_(QuadVertexRect()),
325 gl_(output_surface->context_provider()->ContextGL()), 325 gl_(output_surface->context_provider()->ContextGL()),
326 context_support_(output_surface->context_provider()->ContextSupport()), 326 context_support_(output_surface->context_provider()->ContextSupport()),
327 texture_mailbox_deleter_(texture_mailbox_deleter), 327 texture_mailbox_deleter_(texture_mailbox_deleter),
328 is_backbuffer_discarded_(false),
329 is_scissor_enabled_(false), 328 is_scissor_enabled_(false),
330 scissor_rect_needs_reset_(true), 329 scissor_rect_needs_reset_(true),
331 stencil_shadow_(false), 330 stencil_shadow_(false),
332 blend_shadow_(false), 331 blend_shadow_(false),
333 highp_threshold_min_(highp_threshold_min), 332 highp_threshold_min_(highp_threshold_min),
334 highp_threshold_cache_(0), 333 highp_threshold_cache_(0),
335 use_sync_query_(false), 334 use_sync_query_(false),
336 bound_geometry_(NO_BINDING) { 335 bound_geometry_(NO_BINDING) {
337 DCHECK(gl_); 336 DCHECK(gl_);
338 DCHECK(context_support_); 337 DCHECK(context_support_);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 pending_async_read_pixels_.pop_back(); 383 pending_async_read_pixels_.pop_back();
385 } 384 }
386 385
387 CleanupSharedObjects(); 386 CleanupSharedObjects();
388 } 387 }
389 388
390 const RendererCapabilitiesImpl& GLRenderer::Capabilities() const { 389 const RendererCapabilitiesImpl& GLRenderer::Capabilities() const {
391 return capabilities_; 390 return capabilities_;
392 } 391 }
393 392
394 void GLRenderer::DidChangeVisibility() {
395 EnforceMemoryPolicy();
396
397 // If we are not visible, we ask the context to aggressively free resources.
398 context_support_->SetAggressivelyFreeResources(!visible());
399 }
400
401 void GLRenderer::ReleaseRenderPassTextures() { render_pass_textures_.clear(); } 393 void GLRenderer::ReleaseRenderPassTextures() { render_pass_textures_.clear(); }
402 394
403 void GLRenderer::DiscardPixels() { 395 void GLRenderer::DiscardPixels() {
404 if (!capabilities_.using_discard_framebuffer) 396 if (!capabilities_.using_discard_framebuffer)
405 return; 397 return;
406 bool using_default_framebuffer = 398 bool using_default_framebuffer =
407 !current_framebuffer_lock_ && 399 !current_framebuffer_lock_ &&
408 output_surface_->capabilities().uses_default_gl_framebuffer; 400 output_surface_->capabilities().uses_default_gl_framebuffer;
409 GLenum attachments[] = {static_cast<GLenum>( 401 GLenum attachments[] = {static_cast<GLenum>(
410 using_default_framebuffer ? GL_COLOR_EXT : GL_COLOR_ATTACHMENT0_EXT)}; 402 using_default_framebuffer ? GL_COLOR_EXT : GL_COLOR_ATTACHMENT0_EXT)};
(...skipping 2296 matching lines...) Expand 10 before | Expand all | Expand 10 after
2707 PrepareGeometry(SHARED_BINDING); 2699 PrepareGeometry(SHARED_BINDING);
2708 gfx::Transform quad_rect_matrix; 2700 gfx::Transform quad_rect_matrix;
2709 QuadRectTransform(&quad_rect_matrix, draw_transform, quad_rect); 2701 QuadRectTransform(&quad_rect_matrix, draw_transform, quad_rect);
2710 static float gl_matrix[16]; 2702 static float gl_matrix[16];
2711 ToGLMatrix(&gl_matrix[0], frame->projection_matrix * quad_rect_matrix); 2703 ToGLMatrix(&gl_matrix[0], frame->projection_matrix * quad_rect_matrix);
2712 gl_->UniformMatrix4fv(matrix_location, 1, false, &gl_matrix[0]); 2704 gl_->UniformMatrix4fv(matrix_location, 1, false, &gl_matrix[0]);
2713 2705
2714 gl_->DrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0); 2706 gl_->DrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
2715 } 2707 }
2716 2708
2717 void GLRenderer::Finish() {
2718 TRACE_EVENT0("cc", "GLRenderer::Finish");
2719 gl_->Finish();
2720 }
2721
2722 void GLRenderer::SwapBuffers(CompositorFrameMetadata metadata) { 2709 void GLRenderer::SwapBuffers(CompositorFrameMetadata metadata) {
2723 DCHECK(!is_backbuffer_discarded_);
2724
2725 TRACE_EVENT0("cc,benchmark", "GLRenderer::SwapBuffers"); 2710 TRACE_EVENT0("cc,benchmark", "GLRenderer::SwapBuffers");
2726 // We're done! Time to swapbuffers! 2711 // We're done! Time to swapbuffers!
2727 2712
2728 gfx::Size surface_size = output_surface_->SurfaceSize(); 2713 gfx::Size surface_size = output_surface_->SurfaceSize();
2729 2714
2730 CompositorFrame compositor_frame; 2715 CompositorFrame compositor_frame;
2731 compositor_frame.metadata = std::move(metadata); 2716 compositor_frame.metadata = std::move(metadata);
2732 compositor_frame.gl_frame_data = base::WrapUnique(new GLFrameData); 2717 compositor_frame.gl_frame_data = base::WrapUnique(new GLFrameData);
2733 compositor_frame.gl_frame_data->size = surface_size; 2718 compositor_frame.gl_frame_data->size = surface_size;
2734 if (capabilities_.using_partial_swap) { 2719 if (capabilities_.using_partial_swap) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
2803 void GLRenderer::DidReceiveTextureInUseResponses( 2788 void GLRenderer::DidReceiveTextureInUseResponses(
2804 const gpu::TextureInUseResponses& responses) { 2789 const gpu::TextureInUseResponses& responses) {
2805 DCHECK(settings_->release_overlay_resources_after_gpu_query); 2790 DCHECK(settings_->release_overlay_resources_after_gpu_query);
2806 for (const gpu::TextureInUseResponse& response : responses) { 2791 for (const gpu::TextureInUseResponse& response : responses) {
2807 if (!response.in_use) { 2792 if (!response.in_use) {
2808 swapped_and_acked_overlay_resources_.erase(response.texture); 2793 swapped_and_acked_overlay_resources_.erase(response.texture);
2809 } 2794 }
2810 } 2795 }
2811 } 2796 }
2812 2797
2813 void GLRenderer::EnforceMemoryPolicy() {
2814 if (!visible()) {
2815 TRACE_EVENT0("cc", "GLRenderer::EnforceMemoryPolicy dropping resources");
2816 ReleaseRenderPassTextures();
2817 DiscardBackbuffer();
2818 output_surface_->context_provider()->DeleteCachedResources();
2819 gl_->Flush();
2820 }
2821 PrepareGeometry(NO_BINDING);
2822 }
2823
2824 void GLRenderer::DiscardBackbuffer() {
2825 if (is_backbuffer_discarded_)
2826 return;
2827
2828 output_surface_->DiscardBackbuffer();
2829
2830 is_backbuffer_discarded_ = true;
2831
2832 // Damage tracker needs a full reset every time framebuffer is discarded.
2833 client_->SetFullRootLayerDamage();
2834 }
2835
2836 void GLRenderer::EnsureBackbuffer() {
2837 if (!is_backbuffer_discarded_)
2838 return;
2839
2840 output_surface_->EnsureBackbuffer();
2841 is_backbuffer_discarded_ = false;
2842 }
2843
2844 void GLRenderer::GetFramebufferPixelsAsync( 2798 void GLRenderer::GetFramebufferPixelsAsync(
2845 const DrawingFrame* frame, 2799 const DrawingFrame* frame,
2846 const gfx::Rect& rect, 2800 const gfx::Rect& rect,
2847 std::unique_ptr<CopyOutputRequest> request) { 2801 std::unique_ptr<CopyOutputRequest> request) {
2848 DCHECK(!request->IsEmpty()); 2802 DCHECK(!request->IsEmpty());
2849 if (request->IsEmpty()) 2803 if (request->IsEmpty())
2850 return; 2804 return;
2851 if (rect.IsEmpty()) 2805 if (rect.IsEmpty())
2852 return; 2806 return;
2853 2807
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
2943 base::Closure cancelable_callback = 2897 base::Closure cancelable_callback =
2944 pending_async_read_pixels_.front()-> 2898 pending_async_read_pixels_.front()->
2945 finished_read_pixels_callback.callback(); 2899 finished_read_pixels_callback.callback();
2946 2900
2947 // Save the buffer to verify the callbacks happen in the expected order. 2901 // Save the buffer to verify the callbacks happen in the expected order.
2948 pending_async_read_pixels_.front()->buffer = buffer; 2902 pending_async_read_pixels_.front()->buffer = buffer;
2949 2903
2950 gl_->EndQueryEXT(GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM); 2904 gl_->EndQueryEXT(GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM);
2951 context_support_->SignalQuery(query, cancelable_callback); 2905 context_support_->SignalQuery(query, cancelable_callback);
2952 2906
2953 EnforceMemoryPolicy(); 2907 // WHY???
enne (OOO) 2016/08/08 21:41:18 This doesn't seem needed to me, but feel free to r
2908 PrepareGeometry(NO_BINDING);
2954 } 2909 }
2955 2910
2956 void GLRenderer::FinishedReadback(unsigned source_buffer, 2911 void GLRenderer::FinishedReadback(unsigned source_buffer,
2957 unsigned query, 2912 unsigned query,
2958 const gfx::Size& size) { 2913 const gfx::Size& size) {
2959 DCHECK(!pending_async_read_pixels_.empty()); 2914 DCHECK(!pending_async_read_pixels_.empty());
2960 2915
2961 if (query != 0) { 2916 if (query != 0) {
2962 gl_->DeleteQueriesEXT(1, &query); 2917 gl_->DeleteQueriesEXT(1, &query);
2963 } 2918 }
(...skipping 813 matching lines...) Expand 10 before | Expand all | Expand 10 after
3777 resource_provider_, contents_texture->id())); 3732 resource_provider_, contents_texture->id()));
3778 source_texture = source->texture_id(); 3733 source_texture = source->texture_id();
3779 } 3734 }
3780 gl_->CopySubTextureCHROMIUM(source_texture, destination.texture_id(), 0, 0, 0, 3735 gl_->CopySubTextureCHROMIUM(source_texture, destination.texture_id(), 0, 0, 0,
3781 0, contents_texture->size().width(), 3736 0, contents_texture->size().width(),
3782 contents_texture->size().height(), GL_TRUE, 3737 contents_texture->size().height(), GL_TRUE,
3783 GL_FALSE, GL_FALSE); 3738 GL_FALSE, GL_FALSE);
3784 } 3739 }
3785 3740
3786 } // namespace cc 3741 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698