| 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 #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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 // into the channel's queue. | 69 // into the channel's queue. |
| 70 // - it generates mailbox names for clients of the GPU process on the IO thread. | 70 // - it generates mailbox names for clients of the GPU process on the IO thread. |
| 71 class GpuChannelMessageFilter : public IPC::MessageFilter { | 71 class GpuChannelMessageFilter : public IPC::MessageFilter { |
| 72 public: | 72 public: |
| 73 GpuChannelMessageFilter(base::WeakPtr<GpuChannel> gpu_channel, | 73 GpuChannelMessageFilter(base::WeakPtr<GpuChannel> gpu_channel, |
| 74 scoped_refptr<SyncPointManager> sync_point_manager, | 74 scoped_refptr<SyncPointManager> sync_point_manager, |
| 75 scoped_refptr<base::MessageLoopProxy> message_loop, | 75 scoped_refptr<base::MessageLoopProxy> message_loop, |
| 76 bool future_sync_points) | 76 bool future_sync_points) |
| 77 : preemption_state_(IDLE), | 77 : preemption_state_(IDLE), |
| 78 gpu_channel_(gpu_channel), | 78 gpu_channel_(gpu_channel), |
| 79 sender_(NULL), | 79 sender_(nullptr), |
| 80 sync_point_manager_(sync_point_manager), | 80 sync_point_manager_(sync_point_manager), |
| 81 message_loop_(message_loop), | 81 message_loop_(message_loop), |
| 82 messages_forwarded_to_channel_(0), | 82 messages_forwarded_to_channel_(0), |
| 83 a_stub_is_descheduled_(false), | 83 a_stub_is_descheduled_(false), |
| 84 future_sync_points_(future_sync_points) {} | 84 future_sync_points_(future_sync_points) {} |
| 85 | 85 |
| 86 virtual void OnFilterAdded(IPC::Sender* sender) override { | 86 virtual void OnFilterAdded(IPC::Sender* sender) override { |
| 87 DCHECK(!sender_); | 87 DCHECK(!sender_); |
| 88 sender_ = sender; | 88 sender_ = sender; |
| 89 } | 89 } |
| 90 | 90 |
| 91 virtual void OnFilterRemoved() override { | 91 virtual void OnFilterRemoved() override { |
| 92 DCHECK(sender_); | 92 DCHECK(sender_); |
| 93 sender_ = NULL; | 93 sender_ = nullptr; |
| 94 } | 94 } |
| 95 | 95 |
| 96 virtual bool OnMessageReceived(const IPC::Message& message) override { | 96 virtual bool OnMessageReceived(const IPC::Message& message) override { |
| 97 DCHECK(sender_); | 97 DCHECK(sender_); |
| 98 | 98 |
| 99 bool handled = false; | 99 bool handled = false; |
| 100 if ((message.type() == GpuCommandBufferMsg_RetireSyncPoint::ID) && | 100 if ((message.type() == GpuCommandBufferMsg_RetireSyncPoint::ID) && |
| 101 !future_sync_points_) { | 101 !future_sync_points_) { |
| 102 DLOG(ERROR) << "Untrusted client should not send " | 102 DLOG(ERROR) << "Untrusted client should not send " |
| 103 "GpuCommandBufferMsg_RetireSyncPoint message"; | 103 "GpuCommandBufferMsg_RetireSyncPoint message"; |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 bool software, | 402 bool software, |
| 403 bool allow_future_sync_points) | 403 bool allow_future_sync_points) |
| 404 : gpu_channel_manager_(gpu_channel_manager), | 404 : gpu_channel_manager_(gpu_channel_manager), |
| 405 messages_processed_(0), | 405 messages_processed_(0), |
| 406 client_id_(client_id), | 406 client_id_(client_id), |
| 407 share_group_(share_group ? share_group : new gfx::GLShareGroup), | 407 share_group_(share_group ? share_group : new gfx::GLShareGroup), |
| 408 mailbox_manager_(mailbox ? mailbox : new gpu::gles2::MailboxManager), | 408 mailbox_manager_(mailbox ? mailbox : new gpu::gles2::MailboxManager), |
| 409 watchdog_(watchdog), | 409 watchdog_(watchdog), |
| 410 software_(software), | 410 software_(software), |
| 411 handle_messages_scheduled_(false), | 411 handle_messages_scheduled_(false), |
| 412 currently_processing_message_(NULL), | 412 currently_processing_message_(nullptr), |
| 413 num_stubs_descheduled_(0), | 413 num_stubs_descheduled_(0), |
| 414 allow_future_sync_points_(allow_future_sync_points), | 414 allow_future_sync_points_(allow_future_sync_points), |
| 415 weak_factory_(this) { | 415 weak_factory_(this) { |
| 416 DCHECK(gpu_channel_manager); | 416 DCHECK(gpu_channel_manager); |
| 417 DCHECK(client_id); | 417 DCHECK(client_id); |
| 418 | 418 |
| 419 channel_id_ = IPC::Channel::GenerateVerifiedChannelID("gpu"); | 419 channel_id_ = IPC::Channel::GenerateVerifiedChannelID("gpu"); |
| 420 const base::CommandLine* command_line = | 420 const base::CommandLine* command_line = |
| 421 base::CommandLine::ForCurrentProcess(); | 421 base::CommandLine::ForCurrentProcess(); |
| 422 log_messages_ = command_line->HasSwitch(switches::kLogPluginMessages); | 422 log_messages_ = command_line->HasSwitch(switches::kLogPluginMessages); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 504 } | 504 } |
| 505 | 505 |
| 506 return channel_->Send(message); | 506 return channel_->Send(message); |
| 507 } | 507 } |
| 508 | 508 |
| 509 void GpuChannel::RequeueMessage() { | 509 void GpuChannel::RequeueMessage() { |
| 510 DCHECK(currently_processing_message_); | 510 DCHECK(currently_processing_message_); |
| 511 deferred_messages_.push_front( | 511 deferred_messages_.push_front( |
| 512 new IPC::Message(*currently_processing_message_)); | 512 new IPC::Message(*currently_processing_message_)); |
| 513 messages_processed_--; | 513 messages_processed_--; |
| 514 currently_processing_message_ = NULL; | 514 currently_processing_message_ = nullptr; |
| 515 } | 515 } |
| 516 | 516 |
| 517 void GpuChannel::OnScheduled() { | 517 void GpuChannel::OnScheduled() { |
| 518 if (handle_messages_scheduled_) | 518 if (handle_messages_scheduled_) |
| 519 return; | 519 return; |
| 520 // Post a task to handle any deferred messages. The deferred message queue is | 520 // Post a task to handle any deferred messages. The deferred message queue is |
| 521 // not emptied here, which ensures that OnMessageReceived will continue to | 521 // not emptied here, which ensures that OnMessageReceived will continue to |
| 522 // defer newly received messages until the ones in the queue have all been | 522 // defer newly received messages until the ones in the queue have all been |
| 523 // handled by HandleMessage. HandleMessage is invoked as a | 523 // handled by HandleMessage. HandleMessage is invoked as a |
| 524 // task to prevent reentrancy. | 524 // task to prevent reentrancy. |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 660 IPC_END_MESSAGE_MAP() | 660 IPC_END_MESSAGE_MAP() |
| 661 DCHECK(handled) << msg.type(); | 661 DCHECK(handled) << msg.type(); |
| 662 return handled; | 662 return handled; |
| 663 } | 663 } |
| 664 | 664 |
| 665 void GpuChannel::HandleMessage() { | 665 void GpuChannel::HandleMessage() { |
| 666 handle_messages_scheduled_ = false; | 666 handle_messages_scheduled_ = false; |
| 667 if (deferred_messages_.empty()) | 667 if (deferred_messages_.empty()) |
| 668 return; | 668 return; |
| 669 | 669 |
| 670 IPC::Message* m = NULL; | 670 IPC::Message* m = nullptr; |
| 671 GpuCommandBufferStub* stub = NULL; | 671 GpuCommandBufferStub* stub = nullptr; |
| 672 | 672 |
| 673 m = deferred_messages_.front(); | 673 m = deferred_messages_.front(); |
| 674 stub = stubs_.Lookup(m->routing_id()); | 674 stub = stubs_.Lookup(m->routing_id()); |
| 675 if (stub) { | 675 if (stub) { |
| 676 if (!stub->IsScheduled()) | 676 if (!stub->IsScheduled()) |
| 677 return; | 677 return; |
| 678 if (stub->IsPreempted()) { | 678 if (stub->IsPreempted()) { |
| 679 OnScheduled(); | 679 OnScheduled(); |
| 680 return; | 680 return; |
| 681 } | 681 } |
| 682 } | 682 } |
| 683 | 683 |
| 684 scoped_ptr<IPC::Message> message(m); | 684 scoped_ptr<IPC::Message> message(m); |
| 685 deferred_messages_.pop_front(); | 685 deferred_messages_.pop_front(); |
| 686 bool message_processed = true; | 686 bool message_processed = true; |
| 687 | 687 |
| 688 currently_processing_message_ = message.get(); | 688 currently_processing_message_ = message.get(); |
| 689 bool result; | 689 bool result; |
| 690 if (message->routing_id() == MSG_ROUTING_CONTROL) | 690 if (message->routing_id() == MSG_ROUTING_CONTROL) |
| 691 result = OnControlMessageReceived(*message); | 691 result = OnControlMessageReceived(*message); |
| 692 else | 692 else |
| 693 result = router_.RouteMessage(*message); | 693 result = router_.RouteMessage(*message); |
| 694 currently_processing_message_ = NULL; | 694 currently_processing_message_ = nullptr; |
| 695 | 695 |
| 696 if (!result) { | 696 if (!result) { |
| 697 // Respond to sync messages even if router failed to route. | 697 // Respond to sync messages even if router failed to route. |
| 698 if (message->is_sync()) { | 698 if (message->is_sync()) { |
| 699 IPC::Message* reply = IPC::SyncMessage::GenerateReply(&*message); | 699 IPC::Message* reply = IPC::SyncMessage::GenerateReply(&*message); |
| 700 reply->set_reply_error(); | 700 reply->set_reply_error(); |
| 701 Send(reply); | 701 Send(reply); |
| 702 } | 702 } |
| 703 } else { | 703 } else { |
| 704 // If the command buffer becomes unscheduled as a result of handling the | 704 // If the command buffer becomes unscheduled as a result of handling the |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 812 uint64 GpuChannel::GetMemoryUsage() { | 812 uint64 GpuChannel::GetMemoryUsage() { |
| 813 uint64 size = 0; | 813 uint64 size = 0; |
| 814 for (StubMap::Iterator<GpuCommandBufferStub> it(&stubs_); | 814 for (StubMap::Iterator<GpuCommandBufferStub> it(&stubs_); |
| 815 !it.IsAtEnd(); it.Advance()) { | 815 !it.IsAtEnd(); it.Advance()) { |
| 816 size += it.GetCurrentValue()->GetMemoryUsage(); | 816 size += it.GetCurrentValue()->GetMemoryUsage(); |
| 817 } | 817 } |
| 818 return size; | 818 return size; |
| 819 } | 819 } |
| 820 | 820 |
| 821 } // namespace content | 821 } // namespace content |
| OLD | NEW |