Chromium Code Reviews| Index: media/gpu/ipc/service/gpu_jpeg_decode_accelerator.cc |
| diff --git a/media/gpu/ipc/service/gpu_jpeg_decode_accelerator.cc b/media/gpu/ipc/service/gpu_jpeg_decode_accelerator.cc |
| index eabded5d1d7d8652d8b63d49f33815a6a22dd7d1..b1fee38d3aee06c488dce19f2125dfa43034148a 100644 |
| --- a/media/gpu/ipc/service/gpu_jpeg_decode_accelerator.cc |
| +++ b/media/gpu/ipc/service/gpu_jpeg_decode_accelerator.cc |
| @@ -12,9 +12,9 @@ |
| #include "base/bind.h" |
| #include "base/containers/hash_tables.h" |
| #include "base/logging.h" |
| +#include "base/memory/ptr_util.h" |
| #include "base/memory/shared_memory.h" |
| #include "base/single_thread_task_runner.h" |
| -#include "base/stl_util.h" |
| #include "base/threading/thread_task_runner_handle.h" |
| #include "base/trace_event/trace_event.h" |
| #include "build/build_config.h" |
| @@ -158,7 +158,8 @@ class GpuJpegDecodeAccelerator::MessageFilter : public IPC::MessageFilter { |
| DCHECK(io_task_runner_->BelongsToCurrentThread()); |
| DCHECK(client_map_.count(route_id) == 0); |
| - client_map_[route_id] = client; |
| + // See the comment on GpuJpegDecodeAccelerator::AddClient. |
| + client_map_[route_id] = base::WrapUnique(client); |
| response.Run(true); |
| } |
| @@ -166,17 +167,17 @@ class GpuJpegDecodeAccelerator::MessageFilter : public IPC::MessageFilter { |
| DCHECK(io_task_runner_->BelongsToCurrentThread()); |
| const auto& it = client_map_.find(*route_id); |
| DCHECK(it != client_map_.end()); |
| - Client* client = it->second; |
| + std::unique_ptr<Client> client = std::move(it->second); |
| DCHECK(client); |
| client_map_.erase(it); |
| child_task_runner_->PostTask( |
| - FROM_HERE, base::Bind(&MessageFilter::DestroyClient, this, client)); |
| + FROM_HERE, |
| + base::Bind(&MessageFilter::DestroyClient, this, base::Passed(&client))); |
| } |
| - void DestroyClient(Client* client) { |
| + void DestroyClient(std::unique_ptr<Client> client) { |
| DCHECK(child_task_runner_->BelongsToCurrentThread()); |
| - delete client; |
| if (owner_) |
|
wolenetz
2016/09/27 22:01:12
nit: include a comment here like on l.273, too?
Avi (use Gerrit)
2016/09/28 15:41:46
Done.
|
| owner_->ClientRemoved(); |
| } |
| @@ -241,7 +242,7 @@ class GpuJpegDecodeAccelerator::MessageFilter : public IPC::MessageFilter { |
| base::Bind(DecodeFinished, base::Passed(&output_shm))); |
| DCHECK_GT(client_map_.count(*route_id), 0u); |
| - Client* client = client_map_[*route_id]; |
| + Client* client = client_map_[*route_id].get(); |
| client->Decode(params.input_buffer, frame); |
| } |
| @@ -251,7 +252,7 @@ class GpuJpegDecodeAccelerator::MessageFilter : public IPC::MessageFilter { |
| return; |
| if (child_task_runner_->BelongsToCurrentThread()) { |
| - base::STLDeleteValues(&client_map_); |
| + client_map_.clear(); |
| } else { |
| // Make sure |Client| are deleted on child thread. |
| std::unique_ptr<ClientMap> client_map(new ClientMap); |
| @@ -264,12 +265,12 @@ class GpuJpegDecodeAccelerator::MessageFilter : public IPC::MessageFilter { |
| } |
| private: |
| - using ClientMap = base::hash_map<int32_t, Client*>; |
| + using ClientMap = base::hash_map<int32_t, std::unique_ptr<Client>>; |
| // Must be static because this method runs after destructor. |
| static void DeleteClientMapOnChildThread( |
| std::unique_ptr<ClientMap> client_map) { |
| - base::STLDeleteValues(client_map.get()); |
| + // |client_map| is cleared when the scope of this function is left. |
| } |
| base::WeakPtr<GpuJpegDecodeAccelerator> owner_; |