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

Side by Side Diff: content/browser/compositor/gpu_browser_compositor_output_surface.cc

Issue 1962493002: Make Mac swap code like other platforms (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Incorporate review feedback Created 4 years, 7 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/browser/compositor/gpu_browser_compositor_output_surface.h" 5 #include "content/browser/compositor/gpu_browser_compositor_output_surface.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "build/build_config.h" 9 #include "build/build_config.h"
10 #include "cc/output/compositor_frame.h" 10 #include "cc/output/compositor_frame.h"
11 #include "cc/output/output_surface_client.h" 11 #include "cc/output/output_surface_client.h"
12 #include "components/display_compositor/compositor_overlay_candidate_validator.h " 12 #include "components/display_compositor/compositor_overlay_candidate_validator.h "
13 #include "content/browser/compositor/reflector_impl.h" 13 #include "content/browser/compositor/reflector_impl.h"
14 #include "content/browser/compositor/reflector_texture.h" 14 #include "content/browser/compositor/reflector_texture.h"
15 #include "content/browser/renderer_host/render_widget_host_impl.h" 15 #include "content/browser/renderer_host/render_widget_host_impl.h"
16 #include "content/common/gpu/client/context_provider_command_buffer.h" 16 #include "content/common/gpu/client/context_provider_command_buffer.h"
17 #include "gpu/command_buffer/client/context_support.h" 17 #include "gpu/command_buffer/client/context_support.h"
18 #include "gpu/ipc/client/command_buffer_proxy_impl.h" 18 #include "gpu/ipc/client/command_buffer_proxy_impl.h"
19 19
20 #if defined(OS_MACOSX)
21 #include "content/browser/gpu/gpu_surface_tracker.h"
22 #include "gpu/ipc/client/gpu_process_hosted_ca_layer_tree_params.h"
23 #include "ui/accelerated_widget_mac/accelerated_widget_mac.h"
24 #endif
25
20 namespace content { 26 namespace content {
21 27
22 GpuBrowserCompositorOutputSurface::GpuBrowserCompositorOutputSurface( 28 GpuBrowserCompositorOutputSurface::GpuBrowserCompositorOutputSurface(
23 const scoped_refptr<ContextProviderCommandBuffer>& context, 29 const scoped_refptr<ContextProviderCommandBuffer>& context,
24 const scoped_refptr<ContextProviderCommandBuffer>& worker_context, 30 const scoped_refptr<ContextProviderCommandBuffer>& worker_context,
25 const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager, 31 const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager,
26 base::SingleThreadTaskRunner* task_runner, 32 base::SingleThreadTaskRunner* task_runner,
27 std::unique_ptr<display_compositor::CompositorOverlayCandidateValidator> 33 std::unique_ptr<display_compositor::CompositorOverlayCandidateValidator>
28 overlay_candidate_validator) 34 overlay_candidate_validator)
29 : BrowserCompositorOutputSurface(context, 35 : BrowserCompositorOutputSurface(context,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 #if defined(OS_MACOSX) 117 #if defined(OS_MACOSX)
112 if (should_show_frames_state_ == 118 if (should_show_frames_state_ ==
113 SHOULD_NOT_SHOW_FRAMES_NO_SWAP_AFTER_SUSPENDED) { 119 SHOULD_NOT_SHOW_FRAMES_NO_SWAP_AFTER_SUSPENDED) {
114 should_show_frames_state_ = SHOULD_SHOW_FRAMES; 120 should_show_frames_state_ = SHOULD_SHOW_FRAMES;
115 } 121 }
116 #endif 122 #endif
117 } 123 }
118 124
119 void GpuBrowserCompositorOutputSurface::OnGpuSwapBuffersCompleted( 125 void GpuBrowserCompositorOutputSurface::OnGpuSwapBuffersCompleted(
120 const std::vector<ui::LatencyInfo>& latency_info, 126 const std::vector<ui::LatencyInfo>& latency_info,
121 gfx::SwapResult result) { 127 gfx::SwapResult result,
128 const gpu::GpuProcessHostedCALayerTreeParamsMac* params_mac) {
129 #if defined(OS_MACOSX)
130 if (!SurfaceIsSuspendForRecycle()) {
131 gfx::AcceleratedWidget native_widget =
132 content::GpuSurfaceTracker::Get()->AcquireNativeWidget(
133 params_mac->surface_handle);
134 ui::AcceleratedWidgetMacGotFrame(
135 native_widget, params_mac->ca_context_id,
136 params_mac->fullscreen_low_power_ca_context_valid,
137 params_mac->fullscreen_low_power_ca_context_id, params_mac->io_surface,
138 params_mac->pixel_size, params_mac->scale_factor, nullptr, nullptr);
139 }
140 #endif
122 RenderWidgetHostImpl::CompositorFrameDrawn(latency_info); 141 RenderWidgetHostImpl::CompositorFrameDrawn(latency_info);
123 OnSwapBuffersComplete(); 142 OnSwapBuffersComplete();
124 } 143 }
125 144
126 #if defined(OS_MACOSX) 145 #if defined(OS_MACOSX)
127 void GpuBrowserCompositorOutputSurface::SetSurfaceSuspendedForRecycle( 146 void GpuBrowserCompositorOutputSurface::SetSurfaceSuspendedForRecycle(
128 bool suspended) { 147 bool suspended) {
129 if (suspended) { 148 if (suspended) {
130 // It may be that there are frames in-flight from the GPU process back to 149 // It may be that there are frames in-flight from the GPU process back to
131 // the browser. Make sure that these frames are not displayed by ignoring 150 // the browser. Make sure that these frames are not displayed by ignoring
(...skipping 25 matching lines...) Expand all
157 176
158 bool GpuBrowserCompositorOutputSurface::SurfaceIsSuspendForRecycle() const { 177 bool GpuBrowserCompositorOutputSurface::SurfaceIsSuspendForRecycle() const {
159 #if defined(OS_MACOSX) 178 #if defined(OS_MACOSX)
160 return should_show_frames_state_ == SHOULD_NOT_SHOW_FRAMES_SUSPENDED; 179 return should_show_frames_state_ == SHOULD_NOT_SHOW_FRAMES_SUSPENDED;
161 #else 180 #else
162 return false; 181 return false;
163 #endif 182 #endif
164 } 183 }
165 184
166 } // namespace content 185 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698