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

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

Issue 23125014: Run VDA::Decode on GPU IO thread if VDA supports it. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 4 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
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 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 virtual void OnFilterAdded(IPC::Channel* channel) OVERRIDE { 97 virtual void OnFilterAdded(IPC::Channel* channel) OVERRIDE {
98 DCHECK(!channel_); 98 DCHECK(!channel_);
99 channel_ = channel; 99 channel_ = channel;
100 } 100 }
101 101
102 virtual void OnFilterRemoved() OVERRIDE { 102 virtual void OnFilterRemoved() OVERRIDE {
103 DCHECK(channel_); 103 DCHECK(channel_);
104 channel_ = NULL; 104 channel_ = NULL;
105 } 105 }
106 106
107 void AddRoute(int32 route_id, IPC::Listener* listener) {
108 router_.AddRoute(route_id, listener);
109 }
110
111 void RemoveRoute(int32 route_id) {
112 router_.RemoveRoute(route_id);
113 }
114
107 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE { 115 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
108 DCHECK(channel_); 116 DCHECK(channel_);
109 117
110 bool handled = true; 118 bool handled = true;
111 IPC_BEGIN_MESSAGE_MAP(GpuChannelMessageFilter, message) 119 IPC_BEGIN_MESSAGE_MAP(GpuChannelMessageFilter, message)
112 IPC_MESSAGE_HANDLER(GpuChannelMsg_GenerateMailboxNames, 120 IPC_MESSAGE_HANDLER(GpuChannelMsg_GenerateMailboxNames,
113 OnGenerateMailboxNames) 121 OnGenerateMailboxNames)
114 IPC_MESSAGE_HANDLER(GpuChannelMsg_GenerateMailboxNamesAsync, 122 IPC_MESSAGE_HANDLER(GpuChannelMsg_GenerateMailboxNamesAsync,
115 OnGenerateMailboxNamesAsync) 123 OnGenerateMailboxNamesAsync)
116 IPC_MESSAGE_UNHANDLED(handled = false) 124 IPC_MESSAGE_UNHANDLED(handled = false)
117 IPC_END_MESSAGE_MAP() 125 IPC_END_MESSAGE_MAP()
118 126
119 if (message.type() == GpuCommandBufferMsg_RetireSyncPoint::ID) { 127 if (message.type() == GpuCommandBufferMsg_RetireSyncPoint::ID) {
120 // This message should not be sent explicitly by the renderer. 128 // This message should not be sent explicitly by the renderer.
121 NOTREACHED(); 129 NOTREACHED();
122 handled = true; 130 handled = true;
123 } 131 }
124 132
133 if (message.type() == AcceleratedVideoDecoderMsg_Decode::ID) {
134 handled = router_.RouteMessage(message);
135 }
136
125 // All other messages get processed by the GpuChannel. 137 // All other messages get processed by the GpuChannel.
126 if (!handled) { 138 if (!handled) {
127 messages_forwarded_to_channel_++; 139 messages_forwarded_to_channel_++;
128 if (preempting_flag_.get()) 140 if (preempting_flag_.get())
129 pending_messages_.push(PendingMessage(messages_forwarded_to_channel_)); 141 pending_messages_.push(PendingMessage(messages_forwarded_to_channel_));
130 UpdatePreemptionState(); 142 UpdatePreemptionState();
131 } 143 }
132 144
133 if (message.type() == GpuCommandBufferMsg_InsertSyncPoint::ID) { 145 if (message.type() == GpuCommandBufferMsg_InsertSyncPoint::ID) {
134 uint32 sync_point = sync_point_manager_->GenerateSyncPoint(); 146 uint32 sync_point = sync_point_manager_->GenerateSyncPoint();
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 std::queue<PendingMessage> pending_messages_; 433 std::queue<PendingMessage> pending_messages_;
422 434
423 // Count of the number of IPCs forwarded to the GpuChannel. 435 // Count of the number of IPCs forwarded to the GpuChannel.
424 uint64 messages_forwarded_to_channel_; 436 uint64 messages_forwarded_to_channel_;
425 437
426 base::OneShotTimer<GpuChannelMessageFilter> timer_; 438 base::OneShotTimer<GpuChannelMessageFilter> timer_;
427 439
428 bool a_stub_is_descheduled_; 440 bool a_stub_is_descheduled_;
429 441
430 crypto::HMAC hmac_; 442 crypto::HMAC hmac_;
443
444 // Used to implement message routing functionality running on IO thread.
445 MessageRouter router_;
431 }; 446 };
432 447
433 GpuChannel::GpuChannel(GpuChannelManager* gpu_channel_manager, 448 GpuChannel::GpuChannel(GpuChannelManager* gpu_channel_manager,
434 GpuWatchdog* watchdog, 449 GpuWatchdog* watchdog,
435 gfx::GLShareGroup* share_group, 450 gfx::GLShareGroup* share_group,
436 gpu::gles2::MailboxManager* mailbox, 451 gpu::gles2::MailboxManager* mailbox,
437 int client_id, 452 int client_id,
438 bool software) 453 bool software)
439 : gpu_channel_manager_(gpu_channel_manager), 454 : gpu_channel_manager_(gpu_channel_manager),
440 messages_processed_(0), 455 messages_processed_(0),
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 } 728 }
714 729
715 void GpuChannel::AddRoute(int32 route_id, IPC::Listener* listener) { 730 void GpuChannel::AddRoute(int32 route_id, IPC::Listener* listener) {
716 router_.AddRoute(route_id, listener); 731 router_.AddRoute(route_id, listener);
717 } 732 }
718 733
719 void GpuChannel::RemoveRoute(int32 route_id) { 734 void GpuChannel::RemoveRoute(int32 route_id) {
720 router_.RemoveRoute(route_id); 735 router_.RemoveRoute(route_id);
721 } 736 }
722 737
738 void GpuChannel::AddMessageFilterRoute(int32 route_id,
739 IPC::Listener* listener) {
740 filter_->AddRoute(route_id, listener);
741 }
742
743 void GpuChannel::RemoveMessageFilterRoute(int32 route_id) {
744 filter_->RemoveRoute(route_id);
745 }
746
723 gpu::PreemptionFlag* GpuChannel::GetPreemptionFlag() { 747 gpu::PreemptionFlag* GpuChannel::GetPreemptionFlag() {
724 if (!preempting_flag_.get()) { 748 if (!preempting_flag_.get()) {
725 preempting_flag_ = new gpu::PreemptionFlag; 749 preempting_flag_ = new gpu::PreemptionFlag;
726 io_message_loop_->PostTask( 750 io_message_loop_->PostTask(
727 FROM_HERE, base::Bind( 751 FROM_HERE, base::Bind(
728 &GpuChannelMessageFilter::SetPreemptingFlagAndSchedulingState, 752 &GpuChannelMessageFilter::SetPreemptingFlagAndSchedulingState,
729 filter_, preempting_flag_, num_stubs_descheduled_ > 0)); 753 filter_, preempting_flag_, num_stubs_descheduled_ > 0));
730 } 754 }
731 return preempting_flag_.get(); 755 return preempting_flag_.get();
732 } 756 }
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 } 1003 }
980 } 1004 }
981 1005
982 void GpuChannel::CacheShader(const std::string& key, 1006 void GpuChannel::CacheShader(const std::string& key,
983 const std::string& shader) { 1007 const std::string& shader) {
984 gpu_channel_manager_->Send( 1008 gpu_channel_manager_->Send(
985 new GpuHostMsg_CacheShader(client_id_, key, shader)); 1009 new GpuHostMsg_CacheShader(client_id_, key, shader));
986 } 1010 }
987 1011
988 } // namespace content 1012 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698