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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 // Generates mailbox names for clients of the GPU process on the IO thread. | 51 // Generates mailbox names for clients of the GPU process on the IO thread. |
52 class MailboxMessageFilter : public IPC::ChannelProxy::MessageFilter { | 52 class MailboxMessageFilter : public IPC::ChannelProxy::MessageFilter { |
53 public: | 53 public: |
54 explicit MailboxMessageFilter(const std::string& private_key) | 54 explicit MailboxMessageFilter(const std::string& private_key) |
55 : channel_(NULL), | 55 : channel_(NULL), |
56 hmac_(crypto::HMAC::SHA256) { | 56 hmac_(crypto::HMAC::SHA256) { |
57 bool success = hmac_.Init(base::StringPiece(private_key)); | 57 bool success = hmac_.Init(base::StringPiece(private_key)); |
58 DCHECK(success); | 58 DCHECK(success); |
59 } | 59 } |
60 | 60 |
61 virtual void OnFilterAdded(IPC::Channel* channel) { | 61 virtual void OnFilterAdded(IPC::Channel* channel) OVERRIDE { |
62 DCHECK(!channel_); | 62 DCHECK(!channel_); |
63 channel_ = channel; | 63 channel_ = channel; |
64 } | 64 } |
65 | 65 |
66 virtual void OnFilterRemoved() { | 66 virtual void OnFilterRemoved() OVERRIDE { |
67 DCHECK(channel_); | 67 DCHECK(channel_); |
68 channel_ = NULL; | 68 channel_ = NULL; |
69 } | 69 } |
70 | 70 |
71 virtual bool OnMessageReceived(const IPC::Message& message) { | 71 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE { |
72 DCHECK(channel_); | 72 DCHECK(channel_); |
73 | 73 |
74 bool handled = true; | 74 bool handled = true; |
75 IPC_BEGIN_MESSAGE_MAP(MailboxMessageFilter, message) | 75 IPC_BEGIN_MESSAGE_MAP(MailboxMessageFilter, message) |
76 IPC_MESSAGE_HANDLER(GpuChannelMsg_GenerateMailboxNames, | 76 IPC_MESSAGE_HANDLER(GpuChannelMsg_GenerateMailboxNames, |
77 OnGenerateMailboxNames) | 77 OnGenerateMailboxNames) |
78 IPC_MESSAGE_HANDLER(GpuChannelMsg_GenerateMailboxNamesAsync, | 78 IPC_MESSAGE_HANDLER(GpuChannelMsg_GenerateMailboxNamesAsync, |
79 OnGenerateMailboxNamesAsync) | 79 OnGenerateMailboxNamesAsync) |
80 IPC_MESSAGE_UNHANDLED(handled = false) | 80 IPC_MESSAGE_UNHANDLED(handled = false) |
81 IPC_END_MESSAGE_MAP() | 81 IPC_END_MESSAGE_MAP() |
82 | 82 |
83 return handled; | 83 return handled; |
84 } | 84 } |
85 | 85 |
86 bool Send(IPC::Message* message) { | 86 bool Send(IPC::Message* message) { |
87 return channel_->Send(message); | 87 return channel_->Send(message); |
88 } | 88 } |
89 | 89 |
90 private: | 90 private: |
91 ~MailboxMessageFilter() { | 91 virtual ~MailboxMessageFilter() { |
92 } | 92 } |
93 | 93 |
94 // Message handlers. | 94 // Message handlers. |
95 void OnGenerateMailboxNames(unsigned num, std::vector<std::string>* result) { | 95 void OnGenerateMailboxNames(unsigned num, std::vector<std::string>* result) { |
96 TRACE_EVENT1("gpu", "OnGenerateMailboxNames", "num", num); | 96 TRACE_EVENT1("gpu", "OnGenerateMailboxNames", "num", num); |
97 | 97 |
98 result->resize(num); | 98 result->resize(num); |
99 | 99 |
100 for (unsigned i = 0; i < num; ++i) { | 100 for (unsigned i = 0; i < num; ++i) { |
101 char name[GL_MAILBOX_SIZE_CHROMIUM]; | 101 char name[GL_MAILBOX_SIZE_CHROMIUM]; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 scoped_refptr<gpu::PreemptionFlag> processing_stalled, | 137 scoped_refptr<gpu::PreemptionFlag> processing_stalled, |
138 base::AtomicRefCount* unprocessed_messages) | 138 base::AtomicRefCount* unprocessed_messages) |
139 : gpu_channel_(gpu_channel), | 139 : gpu_channel_(gpu_channel), |
140 channel_(NULL), | 140 channel_(NULL), |
141 sync_point_manager_(sync_point_manager), | 141 sync_point_manager_(sync_point_manager), |
142 message_loop_(message_loop), | 142 message_loop_(message_loop), |
143 processing_stalled_(processing_stalled), | 143 processing_stalled_(processing_stalled), |
144 unprocessed_messages_(unprocessed_messages) { | 144 unprocessed_messages_(unprocessed_messages) { |
145 } | 145 } |
146 | 146 |
147 virtual void OnFilterAdded(IPC::Channel* channel) { | 147 virtual void OnFilterAdded(IPC::Channel* channel) OVERRIDE { |
148 DCHECK(!channel_); | 148 DCHECK(!channel_); |
149 channel_ = channel; | 149 channel_ = channel; |
150 } | 150 } |
151 | 151 |
152 virtual void OnFilterRemoved() { | 152 virtual void OnFilterRemoved() OVERRIDE { |
153 DCHECK(channel_); | 153 DCHECK(channel_); |
154 channel_ = NULL; | 154 channel_ = NULL; |
155 } | 155 } |
156 | 156 |
157 virtual bool OnMessageReceived(const IPC::Message& message) { | 157 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE { |
158 DCHECK(channel_); | 158 DCHECK(channel_); |
159 base::AtomicRefCountInc(unprocessed_messages_.get()); | 159 base::AtomicRefCountInc(unprocessed_messages_.get()); |
160 if (!timer_.IsRunning()) | 160 if (!timer_.IsRunning()) |
161 timer_.Start(FROM_HERE, | 161 timer_.Start(FROM_HERE, |
162 base::TimeDelta::FromMilliseconds(kPreemptPeriodMs), | 162 base::TimeDelta::FromMilliseconds(kPreemptPeriodMs), |
163 this, &SyncPointMessageFilter::TriggerPreemption); | 163 this, &SyncPointMessageFilter::TriggerPreemption); |
164 if (message.type() == GpuCommandBufferMsg_InsertSyncPoint::ID) { | 164 if (message.type() == GpuCommandBufferMsg_InsertSyncPoint::ID) { |
165 uint32 sync_point = sync_point_manager_->GenerateSyncPoint(); | 165 uint32 sync_point = sync_point_manager_->GenerateSyncPoint(); |
166 IPC::Message* reply = IPC::SyncMessage::GenerateReply(&message); | 166 IPC::Message* reply = IPC::SyncMessage::GenerateReply(&message); |
167 GpuCommandBufferMsg_InsertSyncPoint::WriteReplyParams(reply, sync_point); | 167 GpuCommandBufferMsg_InsertSyncPoint::WriteReplyParams(reply, sync_point); |
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
702 } | 702 } |
703 | 703 |
704 void GpuChannel::MessageProcessed() { | 704 void GpuChannel::MessageProcessed() { |
705 base::AtomicRefCountDec(unprocessed_messages_); | 705 base::AtomicRefCountDec(unprocessed_messages_); |
706 io_message_loop_->PostTask( | 706 io_message_loop_->PostTask( |
707 FROM_HERE, | 707 FROM_HERE, |
708 base::Bind(&SyncPointMessageFilter::ReschedulePreemption, filter_)); | 708 base::Bind(&SyncPointMessageFilter::ReschedulePreemption, filter_)); |
709 } | 709 } |
710 | 710 |
711 } // namespace content | 711 } // namespace content |
OLD | NEW |