| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "media/gpu/ipc/service/gpu_jpeg_decode_accelerator.h" | 5 #include "media/gpu/ipc/service/gpu_jpeg_decode_accelerator.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 Client* client = client_map_[*route_id]; | 244 Client* client = client_map_[*route_id]; |
| 245 client->Decode(params.input_buffer, frame); | 245 client->Decode(params.input_buffer, frame); |
| 246 } | 246 } |
| 247 | 247 |
| 248 protected: | 248 protected: |
| 249 ~MessageFilter() override { | 249 ~MessageFilter() override { |
| 250 if (client_map_.empty()) | 250 if (client_map_.empty()) |
| 251 return; | 251 return; |
| 252 | 252 |
| 253 if (child_task_runner_->BelongsToCurrentThread()) { | 253 if (child_task_runner_->BelongsToCurrentThread()) { |
| 254 STLDeleteValues(&client_map_); | 254 base::STLDeleteValues(&client_map_); |
| 255 } else { | 255 } else { |
| 256 // Make sure |Client| are deleted on child thread. | 256 // Make sure |Client| are deleted on child thread. |
| 257 std::unique_ptr<ClientMap> client_map(new ClientMap); | 257 std::unique_ptr<ClientMap> client_map(new ClientMap); |
| 258 client_map->swap(client_map_); | 258 client_map->swap(client_map_); |
| 259 | 259 |
| 260 child_task_runner_->PostTask( | 260 child_task_runner_->PostTask( |
| 261 FROM_HERE, | 261 FROM_HERE, |
| 262 base::Bind(&DeleteClientMapOnChildThread, base::Passed(&client_map))); | 262 base::Bind(&DeleteClientMapOnChildThread, base::Passed(&client_map))); |
| 263 } | 263 } |
| 264 } | 264 } |
| 265 | 265 |
| 266 private: | 266 private: |
| 267 using ClientMap = base::hash_map<int32_t, Client*>; | 267 using ClientMap = base::hash_map<int32_t, Client*>; |
| 268 | 268 |
| 269 // Must be static because this method runs after destructor. | 269 // Must be static because this method runs after destructor. |
| 270 static void DeleteClientMapOnChildThread( | 270 static void DeleteClientMapOnChildThread( |
| 271 std::unique_ptr<ClientMap> client_map) { | 271 std::unique_ptr<ClientMap> client_map) { |
| 272 STLDeleteValues(client_map.get()); | 272 base::STLDeleteValues(client_map.get()); |
| 273 } | 273 } |
| 274 | 274 |
| 275 base::WeakPtr<GpuJpegDecodeAccelerator> owner_; | 275 base::WeakPtr<GpuJpegDecodeAccelerator> owner_; |
| 276 | 276 |
| 277 // GPU child task runner. | 277 // GPU child task runner. |
| 278 scoped_refptr<base::SingleThreadTaskRunner> child_task_runner_; | 278 scoped_refptr<base::SingleThreadTaskRunner> child_task_runner_; |
| 279 | 279 |
| 280 // GPU IO task runner. | 280 // GPU IO task runner. |
| 281 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; | 281 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; |
| 282 | 282 |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 409 for (const auto& create_jda_function : create_jda_fps) { | 409 for (const auto& create_jda_function : create_jda_fps) { |
| 410 std::unique_ptr<JpegDecodeAccelerator> accelerator = | 410 std::unique_ptr<JpegDecodeAccelerator> accelerator = |
| 411 (*create_jda_function)(base::ThreadTaskRunnerHandle::Get()); | 411 (*create_jda_function)(base::ThreadTaskRunnerHandle::Get()); |
| 412 if (accelerator && accelerator->IsSupported()) | 412 if (accelerator && accelerator->IsSupported()) |
| 413 return true; | 413 return true; |
| 414 } | 414 } |
| 415 return false; | 415 return false; |
| 416 } | 416 } |
| 417 | 417 |
| 418 } // namespace media | 418 } // namespace media |
| OLD | NEW |