| 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 #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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |