Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(574)

Side by Side Diff: ui/android/resources/resource_manager_impl.cc

Issue 2406103002: [tracing] Add memory usage of Android UI resources to memory-infra (Closed)
Patch Set: Fixes. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698