| 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 #ifndef CONTENT_BROWSER_GPU_GPU_PROCESS_HOST_H_ | 5 #ifndef CONTENT_BROWSER_GPU_GPU_PROCESS_HOST_H_ |
| 6 #define CONTENT_BROWSER_GPU_GPU_PROCESS_HOST_H_ | 6 #define CONTENT_BROWSER_GPU_GPU_PROCESS_HOST_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <queue> | 10 #include <queue> |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 struct GPUCreateCommandBufferConfig; | 25 struct GPUCreateCommandBufferConfig; |
| 26 struct GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params; | 26 struct GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params; |
| 27 struct GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params; | 27 struct GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params; |
| 28 | 28 |
| 29 class BrowserChildProcessHostImpl; | 29 class BrowserChildProcessHostImpl; |
| 30 | 30 |
| 31 class GpuProcessHost : public content::BrowserChildProcessHostDelegate, | 31 class GpuProcessHost : public content::BrowserChildProcessHostDelegate, |
| 32 public IPC::Message::Sender, | 32 public IPC::Message::Sender, |
| 33 public base::NonThreadSafe { | 33 public base::NonThreadSafe { |
| 34 public: | 34 public: |
| 35 enum GpuProcessKind { |
| 36 GPU_PROCESS_KIND_UNSANDBOXED, |
| 37 GPU_PROCESS_KIND_SANDBOXED |
| 38 }; |
| 39 |
| 35 typedef base::Callback<void(const IPC::ChannelHandle&, | 40 typedef base::Callback<void(const IPC::ChannelHandle&, |
| 36 base::ProcessHandle, | 41 base::ProcessHandle, |
| 37 const content::GPUInfo&)> | 42 const content::GPUInfo&)> |
| 38 EstablishChannelCallback; | 43 EstablishChannelCallback; |
| 39 | 44 |
| 40 typedef base::Callback<void(int32)> CreateCommandBufferCallback; | 45 typedef base::Callback<void(int32)> CreateCommandBufferCallback; |
| 41 | 46 |
| 42 static bool gpu_enabled() { return gpu_enabled_; } | 47 static bool gpu_enabled() { return gpu_enabled_; } |
| 43 | 48 |
| 44 // Creates a new GpuProcessHost or gets one for a particular client, resulting | 49 // Creates a new GpuProcessHost or gets an existing one, resulting in the |
| 45 // in the launching of a GPU process if required. Returns null on failure. It | 50 // launching of a GPU process if required. Returns null on failure. It |
| 46 // is not safe to store the pointer once control has returned to the message | 51 // is not safe to store the pointer once control has returned to the message |
| 47 // loop as it can be destroyed. Instead store the associated GPU host ID. | 52 // loop as it can be destroyed. Instead store the associated GPU host ID. |
| 48 // This could return NULL if GPU access is not allowed (blacklisted). | 53 // This could return NULL if GPU access is not allowed (blacklisted). |
| 49 static GpuProcessHost* GetForClient(int client_id, | 54 static GpuProcessHost* Get(GpuProcessKind kind, |
| 50 content::CauseForGpuLaunch cause); | 55 content::CauseForGpuLaunch cause); |
| 51 | 56 |
| 52 // Helper function to send the given message to the GPU process on the IO | 57 // Helper function to send the given message to the GPU process on the IO |
| 53 // thread. Calls GetForClient and if a host is returned, sends it. | 58 // thread. Calls Get and if a host is returned, sends it. Can be called from |
| 54 // Can be called from any thread. | 59 // any thread. |
| 55 CONTENT_EXPORT static void SendOnIO(int client_id, | 60 CONTENT_EXPORT static void SendOnIO(GpuProcessKind kind, |
| 56 content::CauseForGpuLaunch cause, | 61 content::CauseForGpuLaunch cause, |
| 57 IPC::Message* message); | 62 IPC::Message* message); |
| 58 | 63 |
| 59 // Get the GPU process host for the GPU process with the given ID. Returns | 64 // Get the GPU process host for the GPU process with the given ID. Returns |
| 60 // null if the process no longer exists. | 65 // null if the process no longer exists. |
| 61 static GpuProcessHost* FromID(int host_id); | 66 static GpuProcessHost* FromID(int host_id); |
| 62 int host_id() const { return host_id_; } | 67 int host_id() const { return host_id_; } |
| 63 | 68 |
| 64 // IPC::Message::Sender implementation. | 69 // IPC::Message::Sender implementation. |
| 65 virtual bool Send(IPC::Message* msg) OVERRIDE; | 70 virtual bool Send(IPC::Message* msg) OVERRIDE; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 76 void CreateViewCommandBuffer( | 81 void CreateViewCommandBuffer( |
| 77 const gfx::GLSurfaceHandle& compositing_surface, | 82 const gfx::GLSurfaceHandle& compositing_surface, |
| 78 int surface_id, | 83 int surface_id, |
| 79 int client_id, | 84 int client_id, |
| 80 const GPUCreateCommandBufferConfig& init_params, | 85 const GPUCreateCommandBufferConfig& init_params, |
| 81 const CreateCommandBufferCallback& callback); | 86 const CreateCommandBufferCallback& callback); |
| 82 | 87 |
| 83 // Whether this GPU process is set up to use software rendering. | 88 // Whether this GPU process is set up to use software rendering. |
| 84 bool software_rendering(); | 89 bool software_rendering(); |
| 85 | 90 |
| 86 // Whether this GPU process is sandboxed. | 91 // What kind of GPU process, e.g. sandboxed or unsandboxed. |
| 87 bool sandboxed(); | 92 GpuProcessKind kind(); |
| 88 | 93 |
| 89 void ForceShutdown(); | 94 void ForceShutdown(); |
| 90 | 95 |
| 91 private: | 96 private: |
| 92 static bool HostIsValid(GpuProcessHost* host); | 97 static bool HostIsValid(GpuProcessHost* host); |
| 93 | 98 |
| 94 GpuProcessHost(int host_id, bool sandboxed); | 99 GpuProcessHost(int host_id, GpuProcessKind kind); |
| 95 virtual ~GpuProcessHost(); | 100 virtual ~GpuProcessHost(); |
| 96 | 101 |
| 97 bool Init(); | 102 bool Init(); |
| 98 | 103 |
| 99 // Post an IPC message to the UI shim's message handler on the UI thread. | 104 // Post an IPC message to the UI shim's message handler on the UI thread. |
| 100 void RouteOnUIThread(const IPC::Message& message); | 105 void RouteOnUIThread(const IPC::Message& message); |
| 101 | 106 |
| 102 // BrowserChildProcessHostDelegate implementation. | 107 // BrowserChildProcessHostDelegate implementation. |
| 103 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; | 108 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
| 104 virtual void OnChannelConnected(int32 peer_pid) OVERRIDE; | 109 virtual void OnChannelConnected(int32 peer_pid) OVERRIDE; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 std::queue<IPC::Message*> queued_messages_; | 161 std::queue<IPC::Message*> queued_messages_; |
| 157 | 162 |
| 158 // The handle for the GPU process or null if it is not known to be launched. | 163 // The handle for the GPU process or null if it is not known to be launched. |
| 159 base::ProcessHandle gpu_process_; | 164 base::ProcessHandle gpu_process_; |
| 160 | 165 |
| 161 // Whether we are running a GPU thread inside the browser process instead | 166 // Whether we are running a GPU thread inside the browser process instead |
| 162 // of a separate GPU process. | 167 // of a separate GPU process. |
| 163 bool in_process_; | 168 bool in_process_; |
| 164 | 169 |
| 165 bool software_rendering_; | 170 bool software_rendering_; |
| 166 bool sandboxed_; | 171 GpuProcessKind kind_; |
| 167 | 172 |
| 168 scoped_ptr<GpuMainThread> in_process_gpu_thread_; | 173 scoped_ptr<GpuMainThread> in_process_gpu_thread_; |
| 169 | 174 |
| 170 // Whether we actually launched a GPU process. | 175 // Whether we actually launched a GPU process. |
| 171 bool process_launched_; | 176 bool process_launched_; |
| 172 | 177 |
| 173 // Master switch for enabling/disabling GPU acceleration for the current | 178 // Master switch for enabling/disabling GPU acceleration for the current |
| 174 // browser session. It does not change the acceleration settings for | 179 // browser session. It does not change the acceleration settings for |
| 175 // existing tabs, just the future ones. | 180 // existing tabs, just the future ones. |
| 176 static bool gpu_enabled_; | 181 static bool gpu_enabled_; |
| 177 | 182 |
| 178 static bool hardware_gpu_enabled_; | 183 static bool hardware_gpu_enabled_; |
| 179 | 184 |
| 180 scoped_ptr<BrowserChildProcessHostImpl> process_; | 185 scoped_ptr<BrowserChildProcessHostImpl> process_; |
| 181 | 186 |
| 182 DISALLOW_COPY_AND_ASSIGN(GpuProcessHost); | 187 DISALLOW_COPY_AND_ASSIGN(GpuProcessHost); |
| 183 }; | 188 }; |
| 184 | 189 |
| 185 #endif // CONTENT_BROWSER_GPU_GPU_PROCESS_HOST_H_ | 190 #endif // CONTENT_BROWSER_GPU_GPU_PROCESS_HOST_H_ |
| OLD | NEW |