OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ui/android/resources/resource_manager_impl.h" | 5 #include "ui/android/resources/resource_manager_impl.h" |
6 | 6 |
| 7 #include <inttypes.h> |
7 #include <stddef.h> | 8 #include <stddef.h> |
8 | 9 |
9 #include <utility> | 10 #include <utility> |
10 #include <vector> | 11 #include <vector> |
11 | 12 |
12 #include "base/android/jni_array.h" | 13 #include "base/android/jni_array.h" |
13 #include "base/android/jni_string.h" | 14 #include "base/android/jni_string.h" |
14 #include "base/memory/ptr_util.h" | 15 #include "base/memory/ptr_util.h" |
| 16 #include "base/strings/stringprintf.h" |
| 17 #include "base/threading/thread_task_runner_handle.h" |
| 18 #include "base/trace_event/memory_dump_manager.h" |
| 19 #include "base/trace_event/process_memory_dump.h" |
15 #include "base/trace_event/trace_event.h" | 20 #include "base/trace_event/trace_event.h" |
16 #include "cc/resources/scoped_ui_resource.h" | 21 #include "cc/resources/scoped_ui_resource.h" |
17 #include "cc/resources/ui_resource_manager.h" | 22 #include "cc/resources/ui_resource_manager.h" |
18 #include "jni/ResourceManager_jni.h" | 23 #include "jni/ResourceManager_jni.h" |
19 #include "third_party/skia/include/core/SkBitmap.h" | 24 #include "third_party/skia/include/core/SkBitmap.h" |
20 #include "third_party/skia/include/core/SkCanvas.h" | 25 #include "third_party/skia/include/core/SkCanvas.h" |
21 #include "third_party/skia/include/core/SkColorFilter.h" | 26 #include "third_party/skia/include/core/SkColorFilter.h" |
22 #include "ui/android/resources/ui_resource_provider.h" | 27 #include "ui/android/resources/ui_resource_provider.h" |
23 #include "ui/android/window_android.h" | 28 #include "ui/android/window_android.h" |
24 #include "ui/gfx/android/java_bitmap.h" | 29 #include "ui/gfx/android/java_bitmap.h" |
(...skipping 12 matching lines...) Expand all Loading... |
37 } | 42 } |
38 | 43 |
39 ResourceManagerImpl::ResourceManagerImpl(gfx::NativeWindow native_window) | 44 ResourceManagerImpl::ResourceManagerImpl(gfx::NativeWindow native_window) |
40 : ui_resource_manager_(nullptr) { | 45 : ui_resource_manager_(nullptr) { |
41 JNIEnv* env = base::android::AttachCurrentThread(); | 46 JNIEnv* env = base::android::AttachCurrentThread(); |
42 java_obj_.Reset( | 47 java_obj_.Reset( |
43 env, Java_ResourceManager_create(env, native_window->GetJavaObject(), | 48 env, Java_ResourceManager_create(env, native_window->GetJavaObject(), |
44 reinterpret_cast<intptr_t>(this)) | 49 reinterpret_cast<intptr_t>(this)) |
45 .obj()); | 50 .obj()); |
46 DCHECK(!java_obj_.is_null()); | 51 DCHECK(!java_obj_.is_null()); |
| 52 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
| 53 this, "android::ResourceManagerImpl", |
| 54 base::ThreadTaskRunnerHandle::Get()); |
47 } | 55 } |
48 | 56 |
49 ResourceManagerImpl::~ResourceManagerImpl() { | 57 ResourceManagerImpl::~ResourceManagerImpl() { |
| 58 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( |
| 59 this); |
50 Java_ResourceManager_destroy(base::android::AttachCurrentThread(), java_obj_); | 60 Java_ResourceManager_destroy(base::android::AttachCurrentThread(), java_obj_); |
51 } | 61 } |
52 | 62 |
53 void ResourceManagerImpl::Init(cc::UIResourceManager* ui_resource_manager) { | 63 void ResourceManagerImpl::Init(cc::UIResourceManager* ui_resource_manager) { |
54 DCHECK(!ui_resource_manager_); | 64 DCHECK(!ui_resource_manager_); |
55 DCHECK(ui_resource_manager); | 65 DCHECK(ui_resource_manager); |
56 ui_resource_manager_ = ui_resource_manager; | 66 ui_resource_manager_ = ui_resource_manager; |
57 } | 67 } |
58 | 68 |
59 base::android::ScopedJavaLocalRef<jobject> | 69 base::android::ScopedJavaLocalRef<jobject> |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 frame_ints[j+4], | 290 frame_ints[j+4], |
281 frame_ints[j+5]); | 291 frame_ints[j+5]); |
282 frame_src_dst_rects.push_back(std::pair<gfx::Rect, gfx::Rect>( | 292 frame_src_dst_rects.push_back(std::pair<gfx::Rect, gfx::Rect>( |
283 sprite_rect_source, sprite_rect_destination)); | 293 sprite_rect_source, sprite_rect_destination)); |
284 } | 294 } |
285 src_dst_rects.push_back(frame_src_dst_rects); | 295 src_dst_rects.push_back(frame_src_dst_rects); |
286 } | 296 } |
287 return src_dst_rects; | 297 return src_dst_rects; |
288 } | 298 } |
289 | 299 |
| 300 bool ResourceManagerImpl::OnMemoryDump( |
| 301 const base::trace_event::MemoryDumpArgs& args, |
| 302 base::trace_event::ProcessMemoryDump* pmd) { |
| 303 size_t size = 0; |
| 304 for (const auto& resource_map : resources_) { |
| 305 for (const auto& id_and_resource : resource_map) { |
| 306 if (id_and_resource.second && id_and_resource.second->ui_resource) |
| 307 size += id_and_resource.second->ui_resource->GetAllocatedSizeInBytes(); |
| 308 } |
| 309 } |
| 310 for (const auto& id_and_resource : crushed_sprite_resources_) { |
| 311 if (id_and_resource.second) |
| 312 size += id_and_resource.second->GetAllocatedSizeInBytes(); |
| 313 } |
| 314 for (const auto& color_and_resources : tinted_resources_) { |
| 315 for (const auto& id_and_resource : *color_and_resources.second) { |
| 316 if (id_and_resource.second && id_and_resource.second->ui_resource) |
| 317 size += id_and_resource.second->ui_resource->GetAllocatedSizeInBytes(); |
| 318 } |
| 319 } |
| 320 |
| 321 base::trace_event::MemoryAllocatorDump* dump = pmd->CreateAllocatorDump( |
| 322 base::StringPrintf("ui/resource_manager_0x%" PRIXPTR, |
| 323 reinterpret_cast<uintptr_t>(this))); |
| 324 dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, |
| 325 base::trace_event::MemoryAllocatorDump::kUnitsBytes, size); |
| 326 |
| 327 // Bitmaps are allocated from malloc. |
| 328 const char* system_allocator_name = |
| 329 base::trace_event::MemoryDumpManager::GetInstance() |
| 330 ->system_allocator_pool_name(); |
| 331 if (system_allocator_name) { |
| 332 pmd->AddSuballocation(dump->guid(), system_allocator_name); |
| 333 } |
| 334 |
| 335 return true; |
| 336 } |
| 337 |
290 void ResourceManagerImpl::OnCrushedSpriteResourceReloaded( | 338 void ResourceManagerImpl::OnCrushedSpriteResourceReloaded( |
291 JNIEnv* env, | 339 JNIEnv* env, |
292 const JavaRef<jobject>& jobj, | 340 const JavaRef<jobject>& jobj, |
293 jint bitmap_res_id, | 341 jint bitmap_res_id, |
294 const JavaRef<jobject>& bitmap) { | 342 const JavaRef<jobject>& bitmap) { |
295 std::unordered_map<int, std::unique_ptr<CrushedSpriteResource>>::iterator | 343 std::unordered_map<int, std::unique_ptr<CrushedSpriteResource>>::iterator |
296 item = crushed_sprite_resources_.find(bitmap_res_id); | 344 item = crushed_sprite_resources_.find(bitmap_res_id); |
297 if (item == crushed_sprite_resources_.end()) { | 345 if (item == crushed_sprite_resources_.end()) { |
298 // Cannot reload a resource that has not been previously loaded. | 346 // Cannot reload a resource that has not been previously loaded. |
299 return; | 347 return; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 TRACE_EVENT2("ui", | 379 TRACE_EVENT2("ui", |
332 "ResourceManagerImpl::RequestCrushedSpriteResourceFromJava", | 380 "ResourceManagerImpl::RequestCrushedSpriteResourceFromJava", |
333 "bitmap_res_id", bitmap_res_id, | 381 "bitmap_res_id", bitmap_res_id, |
334 "metadata_res_id", metadata_res_id); | 382 "metadata_res_id", metadata_res_id); |
335 Java_ResourceManager_crushedSpriteResourceRequested( | 383 Java_ResourceManager_crushedSpriteResourceRequested( |
336 base::android::AttachCurrentThread(), java_obj_, bitmap_res_id, | 384 base::android::AttachCurrentThread(), java_obj_, bitmap_res_id, |
337 metadata_res_id, reloading); | 385 metadata_res_id, reloading); |
338 } | 386 } |
339 | 387 |
340 } // namespace ui | 388 } // namespace ui |
OLD | NEW |