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 "content/common/gpu/client/command_buffer_proxy_impl.h" | 5 #include "content/common/gpu/client/command_buffer_proxy_impl.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/process_util.h" | 10 #include "base/process_util.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 | 39 |
40 CommandBufferProxyImpl::~CommandBufferProxyImpl() { | 40 CommandBufferProxyImpl::~CommandBufferProxyImpl() { |
41 // Delete all the locally cached shared memory objects, closing the handle | 41 // Delete all the locally cached shared memory objects, closing the handle |
42 // in this process. | 42 // in this process. |
43 for (TransferBufferMap::iterator it = transfer_buffers_.begin(); | 43 for (TransferBufferMap::iterator it = transfer_buffers_.begin(); |
44 it != transfer_buffers_.end(); | 44 it != transfer_buffers_.end(); |
45 ++it) { | 45 ++it) { |
46 delete it->second.shared_memory; | 46 delete it->second.shared_memory; |
47 it->second.shared_memory = NULL; | 47 it->second.shared_memory = NULL; |
48 } | 48 } |
| 49 for (Decoders::iterator it = video_decoder_hosts_.begin(); |
| 50 it != video_decoder_hosts_.end(); ++it) { |
| 51 it->second->Destroy(); |
| 52 } |
49 } | 53 } |
50 | 54 |
51 bool CommandBufferProxyImpl::OnMessageReceived(const IPC::Message& message) { | 55 bool CommandBufferProxyImpl::OnMessageReceived(const IPC::Message& message) { |
52 bool handled = true; | 56 bool handled = true; |
53 IPC_BEGIN_MESSAGE_MAP(CommandBufferProxyImpl, message) | 57 IPC_BEGIN_MESSAGE_MAP(CommandBufferProxyImpl, message) |
54 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_Destroyed, OnDestroyed); | 58 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_Destroyed, OnDestroyed); |
55 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_NotifyRepaint, | 59 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_NotifyRepaint, |
56 OnNotifyRepaint); | 60 OnNotifyRepaint); |
57 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_EchoAck, OnEchoAck); | 61 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_EchoAck, OnEchoAck); |
58 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_ConsoleMsg, OnConsoleMessage); | 62 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_ConsoleMsg, OnConsoleMessage); |
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 } | 480 } |
477 } | 481 } |
478 | 482 |
479 return result; | 483 return result; |
480 } | 484 } |
481 | 485 |
482 void CommandBufferProxyImpl::SetNotifyRepaintTask(const base::Closure& task) { | 486 void CommandBufferProxyImpl::SetNotifyRepaintTask(const base::Closure& task) { |
483 notify_repaint_task_ = task; | 487 notify_repaint_task_ = task; |
484 } | 488 } |
485 | 489 |
486 scoped_refptr<GpuVideoDecodeAcceleratorHost> | 490 GpuVideoDecodeAcceleratorHost* |
487 CommandBufferProxyImpl::CreateVideoDecoder( | 491 CommandBufferProxyImpl::CreateVideoDecoder( |
488 media::VideoCodecProfile profile, | 492 media::VideoCodecProfile profile, |
489 media::VideoDecodeAccelerator::Client* client) { | 493 media::VideoDecodeAccelerator::Client* client) { |
490 int decoder_route_id; | 494 int decoder_route_id; |
491 if (!Send(new GpuCommandBufferMsg_CreateVideoDecoder(route_id_, profile, | 495 if (!Send(new GpuCommandBufferMsg_CreateVideoDecoder(route_id_, profile, |
492 &decoder_route_id))) { | 496 &decoder_route_id))) { |
493 LOG(ERROR) << "Send(GpuCommandBufferMsg_CreateVideoDecoder) failed"; | 497 LOG(ERROR) << "Send(GpuCommandBufferMsg_CreateVideoDecoder) failed"; |
494 return NULL; | 498 return NULL; |
495 } | 499 } |
496 | 500 |
497 if (decoder_route_id < 0) { | 501 if (decoder_route_id < 0) { |
498 DLOG(ERROR) << "Failed to Initialize GPU decoder on profile: " << profile; | 502 DLOG(ERROR) << "Failed to Initialize GPU decoder on profile: " << profile; |
499 return NULL; | 503 return NULL; |
500 } | 504 } |
501 | 505 |
502 scoped_refptr<GpuVideoDecodeAcceleratorHost> decoder_host = | 506 GpuVideoDecodeAcceleratorHost* decoder_host = |
503 new GpuVideoDecodeAcceleratorHost(channel_, decoder_route_id, client); | 507 new GpuVideoDecodeAcceleratorHost(channel_, decoder_route_id, client); |
504 bool inserted = video_decoder_hosts_.insert(std::make_pair( | 508 bool inserted = video_decoder_hosts_.insert(std::make_pair( |
505 decoder_route_id, decoder_host)).second; | 509 decoder_route_id, decoder_host)).second; |
506 DCHECK(inserted); | 510 DCHECK(inserted); |
507 | 511 |
508 channel_->AddRoute(decoder_route_id, decoder_host->AsWeakPtr()); | 512 channel_->AddRoute(decoder_route_id, base::AsWeakPtr(decoder_host)); |
509 | 513 |
510 return decoder_host; | 514 return decoder_host; |
511 } | 515 } |
512 | 516 |
513 gpu::error::Error CommandBufferProxyImpl::GetLastError() { | 517 gpu::error::Error CommandBufferProxyImpl::GetLastError() { |
514 return last_state_.error; | 518 return last_state_.error; |
515 } | 519 } |
516 | 520 |
517 bool CommandBufferProxyImpl::Send(IPC::Message* msg) { | 521 bool CommandBufferProxyImpl::Send(IPC::Message* msg) { |
518 // Caller should not intentionally send a message if the context is lost. | 522 // Caller should not intentionally send a message if the context is lost. |
(...skipping 27 matching lines...) Expand all Loading... |
546 | 550 |
547 void CommandBufferProxyImpl::SetOnConsoleMessageCallback( | 551 void CommandBufferProxyImpl::SetOnConsoleMessageCallback( |
548 const GpuConsoleMessageCallback& callback) { | 552 const GpuConsoleMessageCallback& callback) { |
549 console_message_callback_ = callback; | 553 console_message_callback_ = callback; |
550 } | 554 } |
551 | 555 |
552 void CommandBufferProxyImpl::TryUpdateState() { | 556 void CommandBufferProxyImpl::TryUpdateState() { |
553 if (last_state_.error == gpu::error::kNoError) | 557 if (last_state_.error == gpu::error::kNoError) |
554 shared_state_->Read(&last_state_); | 558 shared_state_->Read(&last_state_); |
555 } | 559 } |
OLD | NEW |