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_; |