| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/gpu/gpu_process_host.h" | 5 #include "content/browser/gpu/gpu_process_host.h" |
| 6 | 6 |
| 7 #include "base/base64.h" | 7 #include "base/base64.h" |
| 8 #include "base/base_switches.h" | 8 #include "base/base_switches.h" |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 CauseForGpuLaunch cause, | 73 CauseForGpuLaunch cause, |
| 74 IPC::Message* message) { | 74 IPC::Message* message) { |
| 75 GpuProcessHost* host = GpuProcessHost::Get(kind, cause); | 75 GpuProcessHost* host = GpuProcessHost::Get(kind, cause); |
| 76 if (host) { | 76 if (host) { |
| 77 host->Send(message); | 77 host->Send(message); |
| 78 } else { | 78 } else { |
| 79 delete message; | 79 delete message; |
| 80 } | 80 } |
| 81 } | 81 } |
| 82 | 82 |
| 83 void AcceleratedSurfaceBuffersSwappedCompletedForGPU(int host_id, | 83 void AcceleratedSurfaceBuffersSwappedCompletedForGPU( |
| 84 int route_id, | 84 int host_id, |
| 85 bool alive) { | 85 int route_id, |
| 86 bool alive, |
| 87 base::TimeTicks vsync_timebase, |
| 88 base::TimeDelta vsync_interval) { |
| 86 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { | 89 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
| 87 BrowserThread::PostTask( | 90 BrowserThread::PostTask( |
| 88 BrowserThread::IO, | 91 BrowserThread::IO, |
| 89 FROM_HERE, | 92 FROM_HERE, |
| 90 base::Bind(&AcceleratedSurfaceBuffersSwappedCompletedForGPU, | 93 base::Bind(&AcceleratedSurfaceBuffersSwappedCompletedForGPU, |
| 91 host_id, | 94 host_id, |
| 92 route_id, | 95 route_id, |
| 93 alive)); | 96 alive, |
| 97 vsync_timebase, |
| 98 vsync_interval)); |
| 94 return; | 99 return; |
| 95 } | 100 } |
| 96 | 101 |
| 97 GpuProcessHost* host = GpuProcessHost::FromID(host_id); | 102 GpuProcessHost* host = GpuProcessHost::FromID(host_id); |
| 98 if (host) { | 103 if (host) { |
| 99 if (alive) { | 104 if (alive) { |
| 100 AcceleratedSurfaceMsg_BufferPresented_Params ack_params; | 105 AcceleratedSurfaceMsg_BufferPresented_Params ack_params; |
| 101 ack_params.sync_point = 0; | 106 ack_params.sync_point = 0; |
| 107 #if defined(OS_WIN) |
| 108 ack_params.vsync_timebase = vsync_timebase; |
| 109 ack_params.vsync_interval = vsync_interval; |
| 110 #endif |
| 102 host->Send( | 111 host->Send( |
| 103 new AcceleratedSurfaceMsg_BufferPresented(route_id, ack_params)); | 112 new AcceleratedSurfaceMsg_BufferPresented(route_id, ack_params)); |
| 104 } else { | 113 } else { |
| 105 host->ForceShutdown(); | 114 host->ForceShutdown(); |
| 106 } | 115 } |
| 107 } | 116 } |
| 108 } | 117 } |
| 109 | 118 |
| 110 #if defined(OS_WIN) | 119 #if defined(OS_WIN) |
| 111 // This sends a ViewMsg_SwapBuffers_ACK directly to the renderer process | 120 // This sends a ViewMsg_SwapBuffers_ACK directly to the renderer process |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 } | 152 } |
| 144 | 153 |
| 145 void AcceleratedSurfaceBuffersSwappedCompleted( | 154 void AcceleratedSurfaceBuffersSwappedCompleted( |
| 146 int host_id, | 155 int host_id, |
| 147 int route_id, | 156 int route_id, |
| 148 int surface_id, | 157 int surface_id, |
| 149 bool alive, | 158 bool alive, |
| 150 base::TimeTicks timebase, | 159 base::TimeTicks timebase, |
| 151 base::TimeDelta interval, | 160 base::TimeDelta interval, |
| 152 const ui::LatencyInfo& latency_info) { | 161 const ui::LatencyInfo& latency_info) { |
| 153 AcceleratedSurfaceBuffersSwappedCompletedForGPU(host_id, route_id, | 162 AcceleratedSurfaceBuffersSwappedCompletedForGPU( |
| 154 alive); | 163 host_id, route_id, alive, timebase, interval); |
| 155 AcceleratedSurfaceBuffersSwappedCompletedForRenderer(surface_id, timebase, | 164 AcceleratedSurfaceBuffersSwappedCompletedForRenderer( |
| 156 interval, latency_info); | 165 surface_id, timebase, interval, latency_info); |
| 157 } | 166 } |
| 158 | 167 |
| 159 // NOTE: changes to this class need to be reviewed by the security team. | 168 // NOTE: changes to this class need to be reviewed by the security team. |
| 160 class GpuSandboxedProcessLauncherDelegate | 169 class GpuSandboxedProcessLauncherDelegate |
| 161 : public SandboxedProcessLauncherDelegate { | 170 : public SandboxedProcessLauncherDelegate { |
| 162 public: | 171 public: |
| 163 explicit GpuSandboxedProcessLauncherDelegate(CommandLine* cmd_line) | 172 explicit GpuSandboxedProcessLauncherDelegate(CommandLine* cmd_line) |
| 164 : cmd_line_(cmd_line) {} | 173 : cmd_line_(cmd_line) {} |
| 165 virtual ~GpuSandboxedProcessLauncherDelegate() {} | 174 virtual ~GpuSandboxedProcessLauncherDelegate() {} |
| 166 | 175 |
| (...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 875 // plugin windows. | 884 // plugin windows. |
| 876 if (surface_handle.handle != gfx::kNullPluginWindow || | 885 if (surface_handle.handle != gfx::kNullPluginWindow || |
| 877 surface_handle.transport_type == gfx::TEXTURE_TRANSPORT) { | 886 surface_handle.transport_type == gfx::TEXTURE_TRANSPORT) { |
| 878 RouteOnUIThread(GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params)); | 887 RouteOnUIThread(GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params)); |
| 879 return; | 888 return; |
| 880 } | 889 } |
| 881 | 890 |
| 882 base::ScopedClosureRunner scoped_completion_runner( | 891 base::ScopedClosureRunner scoped_completion_runner( |
| 883 base::Bind(&AcceleratedSurfaceBuffersSwappedCompletedForGPU, | 892 base::Bind(&AcceleratedSurfaceBuffersSwappedCompletedForGPU, |
| 884 host_id_, params.route_id, | 893 host_id_, params.route_id, |
| 885 true /* alive */)); | 894 true /* alive */, base::TimeTicks(), base::TimeDelta())); |
| 886 | 895 |
| 887 int render_process_id = 0; | 896 int render_process_id = 0; |
| 888 int render_widget_id = 0; | 897 int render_widget_id = 0; |
| 889 if (!GpuSurfaceTracker::Get()->GetRenderWidgetIDForSurface( | 898 if (!GpuSurfaceTracker::Get()->GetRenderWidgetIDForSurface( |
| 890 params.surface_id, &render_process_id, &render_widget_id)) { | 899 params.surface_id, &render_process_id, &render_widget_id)) { |
| 891 return; | 900 return; |
| 892 } | 901 } |
| 893 RenderWidgetHelper* helper = | 902 RenderWidgetHelper* helper = |
| 894 RenderWidgetHelper::FromProcessHostID(render_process_id); | 903 RenderWidgetHelper::FromProcessHostID(render_process_id); |
| 895 if (!helper) | 904 if (!helper) |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1241 TRACE_EVENT0("gpu", "GpuProcessHost::OnCacheShader"); | 1250 TRACE_EVENT0("gpu", "GpuProcessHost::OnCacheShader"); |
| 1242 ClientIdToShaderCacheMap::iterator iter = | 1251 ClientIdToShaderCacheMap::iterator iter = |
| 1243 client_id_to_shader_cache_.find(client_id); | 1252 client_id_to_shader_cache_.find(client_id); |
| 1244 // If the cache doesn't exist then this is an off the record profile. | 1253 // If the cache doesn't exist then this is an off the record profile. |
| 1245 if (iter == client_id_to_shader_cache_.end()) | 1254 if (iter == client_id_to_shader_cache_.end()) |
| 1246 return; | 1255 return; |
| 1247 iter->second->Cache(GetShaderPrefixKey() + ":" + key, shader); | 1256 iter->second->Cache(GetShaderPrefixKey() + ":" + key, shader); |
| 1248 } | 1257 } |
| 1249 | 1258 |
| 1250 } // namespace content | 1259 } // namespace content |
| OLD | NEW |