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

Side by Side Diff: gpu/ipc/service/gpu_channel.cc

Issue 2349713003: IPC::MessageFilter::OnFilterAdded: IPC::Sender -> IPC::Channel (Closed)
Patch Set: . Created 4 years, 3 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
« no previous file with comments | « gpu/ipc/service/gpu_channel.h ('k') | ipc/ipc_channel_proxy_unittest.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 #include "gpu/ipc/service/gpu_channel.h" 5 #include "gpu/ipc/service/gpu_channel.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #if defined(OS_WIN) 9 #if defined(OS_WIN)
10 #include <windows.h> 10 #include <windows.h>
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 channel_lock_.AssertAcquired(); 441 channel_lock_.AssertAcquired();
442 DCHECK(preemption_state_ == CHECKING || preemption_state_ == PREEMPTING); 442 DCHECK(preemption_state_ == CHECKING || preemption_state_ == PREEMPTING);
443 DCHECK(!scheduled_); 443 DCHECK(!scheduled_);
444 444
445 preemption_state_ = WOULD_PREEMPT_DESCHEDULED; 445 preemption_state_ = WOULD_PREEMPT_DESCHEDULED;
446 preempting_flag_->Reset(); 446 preempting_flag_->Reset();
447 TRACE_COUNTER_ID1("gpu", "GpuChannel::Preempting", this, 0); 447 TRACE_COUNTER_ID1("gpu", "GpuChannel::Preempting", this, 0);
448 } 448 }
449 449
450 GpuChannelMessageFilter::GpuChannelMessageFilter() 450 GpuChannelMessageFilter::GpuChannelMessageFilter()
451 : sender_(nullptr), peer_pid_(base::kNullProcessId) {} 451 : channel_(nullptr), peer_pid_(base::kNullProcessId) {}
452 452
453 GpuChannelMessageFilter::~GpuChannelMessageFilter() {} 453 GpuChannelMessageFilter::~GpuChannelMessageFilter() {}
454 454
455 void GpuChannelMessageFilter::OnFilterAdded(IPC::Sender* sender) { 455 void GpuChannelMessageFilter::OnFilterAdded(IPC::Channel* channel) {
456 DCHECK(!sender_); 456 DCHECK(!channel_);
457 sender_ = sender; 457 channel_ = channel;
458 for (scoped_refptr<IPC::MessageFilter>& filter : channel_filters_) { 458 for (scoped_refptr<IPC::MessageFilter>& filter : channel_filters_) {
459 filter->OnFilterAdded(sender_); 459 filter->OnFilterAdded(channel_);
460 } 460 }
461 } 461 }
462 462
463 void GpuChannelMessageFilter::OnFilterRemoved() { 463 void GpuChannelMessageFilter::OnFilterRemoved() {
464 DCHECK(sender_); 464 DCHECK(channel_);
465 for (scoped_refptr<IPC::MessageFilter>& filter : channel_filters_) { 465 for (scoped_refptr<IPC::MessageFilter>& filter : channel_filters_) {
466 filter->OnFilterRemoved(); 466 filter->OnFilterRemoved();
467 } 467 }
468 sender_ = nullptr; 468 channel_ = nullptr;
469 peer_pid_ = base::kNullProcessId; 469 peer_pid_ = base::kNullProcessId;
470 } 470 }
471 471
472 void GpuChannelMessageFilter::OnChannelConnected(int32_t peer_pid) { 472 void GpuChannelMessageFilter::OnChannelConnected(int32_t peer_pid) {
473 DCHECK(peer_pid_ == base::kNullProcessId); 473 DCHECK(peer_pid_ == base::kNullProcessId);
474 peer_pid_ = peer_pid; 474 peer_pid_ = peer_pid;
475 for (scoped_refptr<IPC::MessageFilter>& filter : channel_filters_) { 475 for (scoped_refptr<IPC::MessageFilter>& filter : channel_filters_) {
476 filter->OnChannelConnected(peer_pid); 476 filter->OnChannelConnected(peer_pid);
477 } 477 }
478 } 478 }
479 479
480 void GpuChannelMessageFilter::OnChannelError() { 480 void GpuChannelMessageFilter::OnChannelError() {
481 for (scoped_refptr<IPC::MessageFilter>& filter : channel_filters_) { 481 for (scoped_refptr<IPC::MessageFilter>& filter : channel_filters_) {
482 filter->OnChannelError(); 482 filter->OnChannelError();
483 } 483 }
484 } 484 }
485 485
486 void GpuChannelMessageFilter::OnChannelClosing() { 486 void GpuChannelMessageFilter::OnChannelClosing() {
487 for (scoped_refptr<IPC::MessageFilter>& filter : channel_filters_) { 487 for (scoped_refptr<IPC::MessageFilter>& filter : channel_filters_) {
488 filter->OnChannelClosing(); 488 filter->OnChannelClosing();
489 } 489 }
490 } 490 }
491 491
492 void GpuChannelMessageFilter::AddChannelFilter( 492 void GpuChannelMessageFilter::AddChannelFilter(
493 scoped_refptr<IPC::MessageFilter> filter) { 493 scoped_refptr<IPC::MessageFilter> filter) {
494 channel_filters_.push_back(filter); 494 channel_filters_.push_back(filter);
495 if (sender_) 495 if (channel_)
496 filter->OnFilterAdded(sender_); 496 filter->OnFilterAdded(channel_);
497 if (peer_pid_ != base::kNullProcessId) 497 if (peer_pid_ != base::kNullProcessId)
498 filter->OnChannelConnected(peer_pid_); 498 filter->OnChannelConnected(peer_pid_);
499 } 499 }
500 500
501 void GpuChannelMessageFilter::RemoveChannelFilter( 501 void GpuChannelMessageFilter::RemoveChannelFilter(
502 scoped_refptr<IPC::MessageFilter> filter) { 502 scoped_refptr<IPC::MessageFilter> filter) {
503 if (sender_) 503 if (channel_)
504 filter->OnFilterRemoved(); 504 filter->OnFilterRemoved();
505 channel_filters_.erase( 505 channel_filters_.erase(
506 std::find(channel_filters_.begin(), channel_filters_.end(), filter)); 506 std::find(channel_filters_.begin(), channel_filters_.end(), filter));
507 } 507 }
508 508
509 // This gets called from the main thread and assumes that all messages which 509 // This gets called from the main thread and assumes that all messages which
510 // lead to creation of a new route are synchronous messages. 510 // lead to creation of a new route are synchronous messages.
511 // TODO(sunnyps): Create routes (and streams) on the IO thread so that we can 511 // TODO(sunnyps): Create routes (and streams) on the IO thread so that we can
512 // make the CreateCommandBuffer/VideoDecoder/VideoEncoder messages asynchronous. 512 // make the CreateCommandBuffer/VideoDecoder/VideoEncoder messages asynchronous.
513 void GpuChannelMessageFilter::AddRoute( 513 void GpuChannelMessageFilter::AddRoute(
514 int32_t route_id, 514 int32_t route_id,
515 const scoped_refptr<GpuChannelMessageQueue>& queue) { 515 const scoped_refptr<GpuChannelMessageQueue>& queue) {
516 base::AutoLock lock(routes_lock_); 516 base::AutoLock lock(routes_lock_);
517 routes_.insert(std::make_pair(route_id, queue)); 517 routes_.insert(std::make_pair(route_id, queue));
518 } 518 }
519 519
520 void GpuChannelMessageFilter::RemoveRoute(int32_t route_id) { 520 void GpuChannelMessageFilter::RemoveRoute(int32_t route_id) {
521 base::AutoLock lock(routes_lock_); 521 base::AutoLock lock(routes_lock_);
522 routes_.erase(route_id); 522 routes_.erase(route_id);
523 } 523 }
524 524
525 bool GpuChannelMessageFilter::OnMessageReceived(const IPC::Message& message) { 525 bool GpuChannelMessageFilter::OnMessageReceived(const IPC::Message& message) {
526 DCHECK(sender_); 526 DCHECK(channel_);
527 527
528 if (message.should_unblock() || message.is_reply()) 528 if (message.should_unblock() || message.is_reply())
529 return MessageErrorHandler(message, "Unexpected message type"); 529 return MessageErrorHandler(message, "Unexpected message type");
530 530
531 if (message.type() == GpuChannelMsg_Nop::ID) { 531 if (message.type() == GpuChannelMsg_Nop::ID) {
532 IPC::Message* reply = IPC::SyncMessage::GenerateReply(&message); 532 IPC::Message* reply = IPC::SyncMessage::GenerateReply(&message);
533 Send(reply); 533 Send(reply);
534 return true; 534 return true;
535 } 535 }
536 536
537 for (scoped_refptr<IPC::MessageFilter>& filter : channel_filters_) { 537 for (scoped_refptr<IPC::MessageFilter>& filter : channel_filters_) {
538 if (filter->OnMessageReceived(message)) 538 if (filter->OnMessageReceived(message))
539 return true; 539 return true;
540 } 540 }
541 541
542 scoped_refptr<GpuChannelMessageQueue> message_queue = 542 scoped_refptr<GpuChannelMessageQueue> message_queue =
543 LookupStreamByRoute(message.routing_id()); 543 LookupStreamByRoute(message.routing_id());
544 544
545 if (!message_queue) 545 if (!message_queue)
546 return MessageErrorHandler(message, "Could not find message queue"); 546 return MessageErrorHandler(message, "Could not find message queue");
547 547
548 if (!message_queue->PushBackMessage(message)) 548 if (!message_queue->PushBackMessage(message))
549 return MessageErrorHandler(message, "Channel destroyed"); 549 return MessageErrorHandler(message, "Channel destroyed");
550 550
551 return true; 551 return true;
552 } 552 }
553 553
554 bool GpuChannelMessageFilter::Send(IPC::Message* message) { 554 bool GpuChannelMessageFilter::Send(IPC::Message* message) {
555 return sender_->Send(message); 555 return channel_->Send(message);
556 } 556 }
557 557
558 scoped_refptr<GpuChannelMessageQueue> 558 scoped_refptr<GpuChannelMessageQueue>
559 GpuChannelMessageFilter::LookupStreamByRoute(int32_t route_id) { 559 GpuChannelMessageFilter::LookupStreamByRoute(int32_t route_id) {
560 base::AutoLock lock(routes_lock_); 560 base::AutoLock lock(routes_lock_);
561 auto it = routes_.find(route_id); 561 auto it = routes_.find(route_id);
562 if (it != routes_.end()) 562 if (it != routes_.end())
563 return it->second; 563 return it->second;
564 return nullptr; 564 return nullptr;
565 } 565 }
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 1062
1063 return manager->gpu_memory_buffer_factory() 1063 return manager->gpu_memory_buffer_factory()
1064 ->AsImageFactory() 1064 ->AsImageFactory()
1065 ->CreateImageForGpuMemoryBuffer(handle, size, format, internalformat, 1065 ->CreateImageForGpuMemoryBuffer(handle, size, format, internalformat,
1066 client_id_, surface_handle); 1066 client_id_, surface_handle);
1067 } 1067 }
1068 } 1068 }
1069 } 1069 }
1070 1070
1071 } // namespace gpu 1071 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/ipc/service/gpu_channel.h ('k') | ipc/ipc_channel_proxy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698