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