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

Side by Side Diff: content/common/gpu/gpu_channel.cc

Issue 9567028: Make echo message per-command-buffer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « content/common/gpu/gpu_channel.h ('k') | content/common/gpu/gpu_command_buffer_stub.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #if defined(OS_WIN) 5 #if defined(OS_WIN)
6 #include <windows.h> 6 #include <windows.h>
7 #endif 7 #endif
8 8
9 #include "content/common/gpu/gpu_channel.h" 9 #include "content/common/gpu/gpu_channel.h"
10 10
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 #endif 66 #endif
67 } 67 }
68 68
69 bool GpuChannel::OnMessageReceived(const IPC::Message& message) { 69 bool GpuChannel::OnMessageReceived(const IPC::Message& message) {
70 if (log_messages_) { 70 if (log_messages_) {
71 DVLOG(1) << "received message @" << &message << " on channel @" << this 71 DVLOG(1) << "received message @" << &message << " on channel @" << this
72 << " with type " << message.type(); 72 << " with type " << message.type();
73 } 73 }
74 74
75 // Control messages are not deferred and can be handled out of order with 75 // Control messages are not deferred and can be handled out of order with
76 // respect to routed ones. Except for Echo, which must be deferred in order 76 // respect to routed ones.
77 // to respect the asynchronous Mac SwapBuffers. 77 if (message.routing_id() == MSG_ROUTING_CONTROL)
78 if (message.routing_id() == MSG_ROUTING_CONTROL &&
79 message.type() != GpuChannelMsg_Echo::ID)
80 return OnControlMessageReceived(message); 78 return OnControlMessageReceived(message);
81 79
82 if (message.type() == GpuCommandBufferMsg_GetStateFast::ID) { 80 if (message.type() == GpuCommandBufferMsg_GetStateFast::ID) {
83 if (processed_get_state_fast_) { 81 if (processed_get_state_fast_) {
84 // Require a non-GetStateFast message in between two GetStateFast 82 // Require a non-GetStateFast message in between two GetStateFast
85 // messages, to ensure progress is made. 83 // messages, to ensure progress is made.
86 std::deque<IPC::Message*>::iterator point = deferred_messages_.begin(); 84 std::deque<IPC::Message*>::iterator point = deferred_messages_.begin();
87 85
88 while (point != deferred_messages_.end() && 86 while (point != deferred_messages_.end() &&
89 (*point)->type() == GpuCommandBufferMsg_GetStateFast::ID) { 87 (*point)->type() == GpuCommandBufferMsg_GetStateFast::ID) {
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 bool GpuChannel::OnControlMessageReceived(const IPC::Message& msg) { 220 bool GpuChannel::OnControlMessageReceived(const IPC::Message& msg) {
223 // Always use IPC_MESSAGE_HANDLER_DELAY_REPLY for synchronous message handlers 221 // Always use IPC_MESSAGE_HANDLER_DELAY_REPLY for synchronous message handlers
224 // here. This is so the reply can be delayed if the scheduler is unscheduled. 222 // here. This is so the reply can be delayed if the scheduler is unscheduled.
225 bool handled = true; 223 bool handled = true;
226 IPC_BEGIN_MESSAGE_MAP(GpuChannel, msg) 224 IPC_BEGIN_MESSAGE_MAP(GpuChannel, msg)
227 IPC_MESSAGE_HANDLER(GpuChannelMsg_Initialize, OnInitialize) 225 IPC_MESSAGE_HANDLER(GpuChannelMsg_Initialize, OnInitialize)
228 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuChannelMsg_CreateOffscreenCommandBuffer, 226 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuChannelMsg_CreateOffscreenCommandBuffer,
229 OnCreateOffscreenCommandBuffer) 227 OnCreateOffscreenCommandBuffer)
230 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuChannelMsg_DestroyCommandBuffer, 228 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuChannelMsg_DestroyCommandBuffer,
231 OnDestroyCommandBuffer) 229 OnDestroyCommandBuffer)
232 IPC_MESSAGE_HANDLER(GpuChannelMsg_Echo, OnEcho);
233 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuChannelMsg_WillGpuSwitchOccur, 230 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuChannelMsg_WillGpuSwitchOccur,
234 OnWillGpuSwitchOccur) 231 OnWillGpuSwitchOccur)
235 IPC_MESSAGE_HANDLER(GpuChannelMsg_CloseChannel, OnCloseChannel) 232 IPC_MESSAGE_HANDLER(GpuChannelMsg_CloseChannel, OnCloseChannel)
236 IPC_MESSAGE_UNHANDLED(handled = false) 233 IPC_MESSAGE_UNHANDLED(handled = false)
237 IPC_END_MESSAGE_MAP() 234 IPC_END_MESSAGE_MAP()
238 DCHECK(handled) << msg.type(); 235 DCHECK(handled) << msg.type();
239 return handled; 236 return handled;
240 } 237 }
241 238
242 void GpuChannel::HandleMessage() { 239 void GpuChannel::HandleMessage() {
243 handle_messages_scheduled_ = false; 240 handle_messages_scheduled_ = false;
244 if (!IsScheduled()) 241 if (!IsScheduled())
245 return; 242 return;
246 243
247 if (!deferred_messages_.empty()) { 244 if (!deferred_messages_.empty()) {
248 scoped_ptr<IPC::Message> message(deferred_messages_.front()); 245 scoped_ptr<IPC::Message> message(deferred_messages_.front());
249 deferred_messages_.pop_front(); 246 deferred_messages_.pop_front();
250 processed_get_state_fast_ = 247 processed_get_state_fast_ =
251 (message->type() == GpuCommandBufferMsg_GetStateFast::ID); 248 (message->type() == GpuCommandBufferMsg_GetStateFast::ID);
252 // Handle deferred control messages. 249 // Handle deferred control messages.
253 if (message->routing_id() == MSG_ROUTING_CONTROL) 250 if (!router_.RouteMessage(*message)) {
254 OnControlMessageReceived(*message);
255 else if (!router_.RouteMessage(*message)) {
256 // Respond to sync messages even if router failed to route. 251 // Respond to sync messages even if router failed to route.
257 if (message->is_sync()) { 252 if (message->is_sync()) {
258 IPC::Message* reply = IPC::SyncMessage::GenerateReply(&*message); 253 IPC::Message* reply = IPC::SyncMessage::GenerateReply(&*message);
259 reply->set_reply_error(); 254 reply->set_reply_error();
260 Send(reply); 255 Send(reply);
261 } 256 }
262 } else { 257 } else {
263 // If the channel becomes unscheduled as a result of handling the message 258 // If the channel becomes unscheduled as a result of handling the message
264 // or has more work to do, synthesize an IPC message to flush the command 259 // or has more work to do, synthesize an IPC message to flush the command
265 // buffer that became unscheduled. 260 // buffer that became unscheduled.
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 if (need_reschedule) 362 if (need_reschedule)
368 OnScheduled(); 363 OnScheduled();
369 DidDestroyCommandBuffer(gpu_preference); 364 DidDestroyCommandBuffer(gpu_preference);
370 } 365 }
371 #endif 366 #endif
372 367
373 if (reply_message) 368 if (reply_message)
374 Send(reply_message); 369 Send(reply_message);
375 } 370 }
376 371
377 void GpuChannel::OnEcho(const IPC::Message& message) {
378 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnEcho");
379 Send(new IPC::Message(message));
380 }
381 372
382 void GpuChannel::OnWillGpuSwitchOccur(bool is_creating_context, 373 void GpuChannel::OnWillGpuSwitchOccur(bool is_creating_context,
383 gfx::GpuPreference gpu_preference, 374 gfx::GpuPreference gpu_preference,
384 IPC::Message* reply_message) { 375 IPC::Message* reply_message) {
385 TRACE_EVENT0("gpu", "GpuChannel::OnWillGpuSwitchOccur"); 376 TRACE_EVENT0("gpu", "GpuChannel::OnWillGpuSwitchOccur");
386 377
387 bool will_switch_occur = false; 378 bool will_switch_occur = false;
388 379
389 if (gpu_preference == gfx::PreferDiscreteGpu && 380 if (gpu_preference == gfx::PreferDiscreteGpu &&
390 gfx::GLContext::SupportsDualGpus()) { 381 gfx::GLContext::SupportsDualGpus()) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 431
441 #if defined(OS_POSIX) 432 #if defined(OS_POSIX)
442 int GpuChannel::TakeRendererFileDescriptor() { 433 int GpuChannel::TakeRendererFileDescriptor() {
443 if (!channel_.get()) { 434 if (!channel_.get()) {
444 NOTREACHED(); 435 NOTREACHED();
445 return -1; 436 return -1;
446 } 437 }
447 return channel_->TakeClientFileDescriptor(); 438 return channel_->TakeClientFileDescriptor();
448 } 439 }
449 #endif // defined(OS_POSIX) 440 #endif // defined(OS_POSIX)
OLDNEW
« no previous file with comments | « content/common/gpu/gpu_channel.h ('k') | content/common/gpu/gpu_command_buffer_stub.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698