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 "gpu/ipc/client/gpu_channel_host.h" | 5 #include "gpu/ipc/client/gpu_channel_host.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/atomic_sequence_num.h" | 10 #include "base/atomic_sequence_num.h" |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/location.h" | 12 #include "base/location.h" |
| 13 #include "base/memory/ptr_util.h" |
13 #include "base/posix/eintr_wrapper.h" | 14 #include "base/posix/eintr_wrapper.h" |
14 #include "base/profiler/scoped_tracker.h" | 15 #include "base/profiler/scoped_tracker.h" |
15 #include "base/single_thread_task_runner.h" | 16 #include "base/single_thread_task_runner.h" |
16 #include "base/thread_task_runner_handle.h" | 17 #include "base/thread_task_runner_handle.h" |
17 #include "base/threading/thread_restrictions.h" | 18 #include "base/threading/thread_restrictions.h" |
18 #include "base/trace_event/trace_event.h" | 19 #include "base/trace_event/trace_event.h" |
19 #include "build/build_config.h" | 20 #include "build/build_config.h" |
20 #include "gpu/ipc/client/command_buffer_proxy_impl.h" | 21 #include "gpu/ipc/client/command_buffer_proxy_impl.h" |
21 #include "gpu/ipc/common/gpu_messages.h" | 22 #include "gpu/ipc/common/gpu_messages.h" |
22 #include "gpu/ipc/common/gpu_param_traits_macros.h" | 23 #include "gpu/ipc/common/gpu_param_traits_macros.h" |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 channel_filter_ = new MessageFilter(); | 94 channel_filter_ = new MessageFilter(); |
94 | 95 |
95 // Install the filter last, because we intercept all leftover | 96 // Install the filter last, because we intercept all leftover |
96 // messages. | 97 // messages. |
97 channel_->AddFilter(channel_filter_.get()); | 98 channel_->AddFilter(channel_filter_.get()); |
98 } | 99 } |
99 | 100 |
100 bool GpuChannelHost::Send(IPC::Message* msg) { | 101 bool GpuChannelHost::Send(IPC::Message* msg) { |
101 // Callee takes ownership of message, regardless of whether Send is | 102 // Callee takes ownership of message, regardless of whether Send is |
102 // successful. See IPC::Sender. | 103 // successful. See IPC::Sender. |
103 scoped_ptr<IPC::Message> message(msg); | 104 std::unique_ptr<IPC::Message> message(msg); |
104 // The GPU process never sends synchronous IPCs so clear the unblock flag to | 105 // The GPU process never sends synchronous IPCs so clear the unblock flag to |
105 // preserve order. | 106 // preserve order. |
106 message->set_unblock(false); | 107 message->set_unblock(false); |
107 | 108 |
108 // Currently we need to choose between two different mechanisms for sending. | 109 // Currently we need to choose between two different mechanisms for sending. |
109 // On the main thread we use the regular channel Send() method, on another | 110 // On the main thread we use the regular channel Send() method, on another |
110 // thread we use SyncMessageFilter. We also have to be careful interpreting | 111 // thread we use SyncMessageFilter. We also have to be careful interpreting |
111 // IsMainThread() since it might return false during shutdown, | 112 // IsMainThread() since it might return false during shutdown, |
112 // impl we are actually calling from the main thread (discard message then). | 113 // impl we are actually calling from the main thread (discard message then). |
113 // | 114 // |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 DCHECK_LT(flush_info->flushed_stream_flush_id, flush_info->flush_id); | 182 DCHECK_LT(flush_info->flushed_stream_flush_id, flush_info->flush_id); |
182 Send(new GpuCommandBufferMsg_AsyncFlush( | 183 Send(new GpuCommandBufferMsg_AsyncFlush( |
183 flush_info->route_id, flush_info->put_offset, flush_info->flush_count, | 184 flush_info->route_id, flush_info->put_offset, flush_info->flush_count, |
184 flush_info->latency_info)); | 185 flush_info->latency_info)); |
185 flush_info->latency_info.clear(); | 186 flush_info->latency_info.clear(); |
186 flush_info->flush_pending = false; | 187 flush_info->flush_pending = false; |
187 | 188 |
188 flush_info->flushed_stream_flush_id = flush_info->flush_id; | 189 flush_info->flushed_stream_flush_id = flush_info->flush_id; |
189 } | 190 } |
190 | 191 |
191 scoped_ptr<CommandBufferProxyImpl> GpuChannelHost::CreateCommandBuffer( | 192 std::unique_ptr<CommandBufferProxyImpl> GpuChannelHost::CreateCommandBuffer( |
192 gpu::SurfaceHandle surface_handle, | 193 gpu::SurfaceHandle surface_handle, |
193 const gfx::Size& size, | 194 const gfx::Size& size, |
194 CommandBufferProxyImpl* share_group, | 195 CommandBufferProxyImpl* share_group, |
195 int32_t stream_id, | 196 int32_t stream_id, |
196 gpu::GpuStreamPriority stream_priority, | 197 gpu::GpuStreamPriority stream_priority, |
197 const std::vector<int32_t>& attribs, | 198 const std::vector<int32_t>& attribs, |
198 const GURL& active_url, | 199 const GURL& active_url, |
199 gfx::GpuPreference gpu_preference) { | 200 gfx::GpuPreference gpu_preference) { |
200 DCHECK(!share_group || (stream_id == share_group->stream_id())); | 201 DCHECK(!share_group || (stream_id == share_group->stream_id())); |
201 TRACE_EVENT1("gpu", "GpuChannelHost::CreateViewCommandBuffer", | 202 TRACE_EVENT1("gpu", "GpuChannelHost::CreateViewCommandBuffer", |
(...skipping 25 matching lines...) Expand all Loading... |
227 surface_handle, size, init_params, route_id, &succeeded))) { | 228 surface_handle, size, init_params, route_id, &succeeded))) { |
228 LOG(ERROR) << "Failed to send GpuChannelMsg_CreateCommandBuffer."; | 229 LOG(ERROR) << "Failed to send GpuChannelMsg_CreateCommandBuffer."; |
229 return nullptr; | 230 return nullptr; |
230 } | 231 } |
231 | 232 |
232 if (!succeeded) { | 233 if (!succeeded) { |
233 LOG(ERROR) << "GpuChannelMsg_CreateCommandBuffer returned failure."; | 234 LOG(ERROR) << "GpuChannelMsg_CreateCommandBuffer returned failure."; |
234 return nullptr; | 235 return nullptr; |
235 } | 236 } |
236 | 237 |
237 scoped_ptr<CommandBufferProxyImpl> command_buffer = | 238 std::unique_ptr<CommandBufferProxyImpl> command_buffer = |
238 make_scoped_ptr(new CommandBufferProxyImpl(this, route_id, stream_id)); | 239 base::WrapUnique(new CommandBufferProxyImpl(this, route_id, stream_id)); |
239 AddRoute(route_id, command_buffer->AsWeakPtr()); | 240 AddRoute(route_id, command_buffer->AsWeakPtr()); |
240 | 241 |
241 return command_buffer; | 242 return command_buffer; |
242 } | 243 } |
243 | 244 |
244 void GpuChannelHost::DestroyCommandBuffer( | 245 void GpuChannelHost::DestroyCommandBuffer( |
245 CommandBufferProxyImpl* command_buffer) { | 246 CommandBufferProxyImpl* command_buffer) { |
246 TRACE_EVENT0("gpu", "GpuChannelHost::DestroyCommandBuffer"); | 247 TRACE_EVENT0("gpu", "GpuChannelHost::DestroyCommandBuffer"); |
247 | 248 |
248 int32_t route_id = command_buffer->route_id(); | 249 int32_t route_id = command_buffer->route_id(); |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
469 | 470 |
470 listeners_.clear(); | 471 listeners_.clear(); |
471 } | 472 } |
472 | 473 |
473 bool GpuChannelHost::MessageFilter::IsLost() const { | 474 bool GpuChannelHost::MessageFilter::IsLost() const { |
474 AutoLock lock(lock_); | 475 AutoLock lock(lock_); |
475 return lost_; | 476 return lost_; |
476 } | 477 } |
477 | 478 |
478 } // namespace gpu | 479 } // namespace gpu |
OLD | NEW |