| 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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 70 //   posting a task to insert the GpuCommandBufferMsg_RetireSyncPoint message | 70 //   posting a task to insert the GpuCommandBufferMsg_RetireSyncPoint message | 
| 71 //   into the channel's queue. | 71 //   into the channel's queue. | 
| 72 // - it generates mailbox names for clients of the GPU process on the IO thread. | 72 // - it generates mailbox names for clients of the GPU process on the IO thread. | 
| 73 class GpuChannelMessageFilter : public IPC::MessageFilter { | 73 class GpuChannelMessageFilter : public IPC::MessageFilter { | 
| 74  public: | 74  public: | 
| 75   GpuChannelMessageFilter(base::WeakPtr<GpuChannel> gpu_channel, | 75   GpuChannelMessageFilter(base::WeakPtr<GpuChannel> gpu_channel, | 
| 76                           scoped_refptr<SyncPointManager> sync_point_manager, | 76                           scoped_refptr<SyncPointManager> sync_point_manager, | 
| 77                           scoped_refptr<base::MessageLoopProxy> message_loop) | 77                           scoped_refptr<base::MessageLoopProxy> message_loop) | 
| 78       : preemption_state_(IDLE), | 78       : preemption_state_(IDLE), | 
| 79         gpu_channel_(gpu_channel), | 79         gpu_channel_(gpu_channel), | 
| 80         channel_(NULL), | 80         sender_(NULL), | 
| 81         sync_point_manager_(sync_point_manager), | 81         sync_point_manager_(sync_point_manager), | 
| 82         message_loop_(message_loop), | 82         message_loop_(message_loop), | 
| 83         messages_forwarded_to_channel_(0), | 83         messages_forwarded_to_channel_(0), | 
| 84         a_stub_is_descheduled_(false) {} | 84         a_stub_is_descheduled_(false) {} | 
| 85 | 85 | 
| 86   virtual void OnFilterAdded(IPC::Channel* channel) OVERRIDE { | 86   virtual void OnFilterAdded(IPC::Sender* sender) OVERRIDE { | 
| 87     DCHECK(!channel_); | 87     DCHECK(!sender_); | 
| 88     channel_ = channel; | 88     sender_ = sender; | 
| 89   } | 89   } | 
| 90 | 90 | 
| 91   virtual void OnFilterRemoved() OVERRIDE { | 91   virtual void OnFilterRemoved() OVERRIDE { | 
| 92     DCHECK(channel_); | 92     DCHECK(sender_); | 
| 93     channel_ = NULL; | 93     sender_ = NULL; | 
| 94   } | 94   } | 
| 95 | 95 | 
| 96   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE { | 96   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE { | 
| 97     DCHECK(channel_); | 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       // This message should not be sent explicitly by the renderer. | 101       // This message should not be sent explicitly by the renderer. | 
| 102       DLOG(ERROR) << "Client should not send " | 102       DLOG(ERROR) << "Client should not send " | 
| 103                      "GpuCommandBufferMsg_RetireSyncPoint message"; | 103                      "GpuCommandBufferMsg_RetireSyncPoint message"; | 
| 104       handled = true; | 104       handled = true; | 
| 105     } | 105     } | 
| 106 | 106 | 
| 107     // All other messages get processed by the GpuChannel. | 107     // All other messages get processed by the GpuChannel. | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 141     preempting_flag_ = preempting_flag; | 141     preempting_flag_ = preempting_flag; | 
| 142     a_stub_is_descheduled_ = a_stub_is_descheduled; | 142     a_stub_is_descheduled_ = a_stub_is_descheduled; | 
| 143   } | 143   } | 
| 144 | 144 | 
| 145   void UpdateStubSchedulingState(bool a_stub_is_descheduled) { | 145   void UpdateStubSchedulingState(bool a_stub_is_descheduled) { | 
| 146     a_stub_is_descheduled_ = a_stub_is_descheduled; | 146     a_stub_is_descheduled_ = a_stub_is_descheduled; | 
| 147     UpdatePreemptionState(); | 147     UpdatePreemptionState(); | 
| 148   } | 148   } | 
| 149 | 149 | 
| 150   bool Send(IPC::Message* message) { | 150   bool Send(IPC::Message* message) { | 
| 151     return channel_->Send(message); | 151     return sender_->Send(message); | 
| 152   } | 152   } | 
| 153 | 153 | 
| 154  protected: | 154  protected: | 
| 155   virtual ~GpuChannelMessageFilter() {} | 155   virtual ~GpuChannelMessageFilter() {} | 
| 156 | 156 | 
| 157  private: | 157  private: | 
| 158   enum PreemptionState { | 158   enum PreemptionState { | 
| 159     // Either there's no other channel to preempt, there are no messages | 159     // Either there's no other channel to preempt, there are no messages | 
| 160     // pending processing, or we just finished preempting and have to wait | 160     // pending processing, or we just finished preempting and have to wait | 
| 161     // before preempting again. | 161     // before preempting again. | 
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 352       } else { | 352       } else { | 
| 353         gpu_channel->MessageProcessed(); | 353         gpu_channel->MessageProcessed(); | 
| 354       } | 354       } | 
| 355     } | 355     } | 
| 356     manager->RetireSyncPoint(sync_point); | 356     manager->RetireSyncPoint(sync_point); | 
| 357   } | 357   } | 
| 358 | 358 | 
| 359   // NOTE: this weak pointer is never dereferenced on the IO thread, it's only | 359   // NOTE: this weak pointer is never dereferenced on the IO thread, it's only | 
| 360   // passed through - therefore the WeakPtr assumptions are respected. | 360   // passed through - therefore the WeakPtr assumptions are respected. | 
| 361   base::WeakPtr<GpuChannel> gpu_channel_; | 361   base::WeakPtr<GpuChannel> gpu_channel_; | 
| 362   IPC::Channel* channel_; | 362   IPC::Sender* sender_; | 
| 363   scoped_refptr<SyncPointManager> sync_point_manager_; | 363   scoped_refptr<SyncPointManager> sync_point_manager_; | 
| 364   scoped_refptr<base::MessageLoopProxy> message_loop_; | 364   scoped_refptr<base::MessageLoopProxy> message_loop_; | 
| 365   scoped_refptr<gpu::PreemptionFlag> preempting_flag_; | 365   scoped_refptr<gpu::PreemptionFlag> preempting_flag_; | 
| 366 | 366 | 
| 367   std::queue<PendingMessage> pending_messages_; | 367   std::queue<PendingMessage> pending_messages_; | 
| 368 | 368 | 
| 369   // Count of the number of IPCs forwarded to the GpuChannel. | 369   // Count of the number of IPCs forwarded to the GpuChannel. | 
| 370   uint64 messages_forwarded_to_channel_; | 370   uint64 messages_forwarded_to_channel_; | 
| 371 | 371 | 
| 372   base::OneShotTimer<GpuChannelMessageFilter> timer_; | 372   base::OneShotTimer<GpuChannelMessageFilter> timer_; | 
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 836 uint64 GpuChannel::GetMemoryUsage() { | 836 uint64 GpuChannel::GetMemoryUsage() { | 
| 837   uint64 size = 0; | 837   uint64 size = 0; | 
| 838   for (StubMap::Iterator<GpuCommandBufferStub> it(&stubs_); | 838   for (StubMap::Iterator<GpuCommandBufferStub> it(&stubs_); | 
| 839        !it.IsAtEnd(); it.Advance()) { | 839        !it.IsAtEnd(); it.Advance()) { | 
| 840     size += it.GetCurrentValue()->GetMemoryUsage(); | 840     size += it.GetCurrentValue()->GetMemoryUsage(); | 
| 841   } | 841   } | 
| 842   return size; | 842   return size; | 
| 843 } | 843 } | 
| 844 | 844 | 
| 845 }  // namespace content | 845 }  // namespace content | 
| OLD | NEW | 
|---|