| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/android/jni_array.h" | 12 #include "base/android/jni_array.h" |
| 13 #include "base/android/jni_string.h" | 13 #include "base/android/jni_string.h" |
| 14 #include "base/memory/ptr_util.h" | 14 #include "base/memory/ptr_util.h" |
| 15 #include "base/trace_event/trace_event.h" | 15 #include "base/trace_event/trace_event.h" |
| 16 #include "cc/resources/scoped_ui_resource.h" | 16 #include "cc/resources/scoped_ui_resource.h" |
| 17 #include "cc/resources/ui_resource_manager.h" |
| 17 #include "jni/ResourceManager_jni.h" | 18 #include "jni/ResourceManager_jni.h" |
| 18 #include "third_party/skia/include/core/SkBitmap.h" | 19 #include "third_party/skia/include/core/SkBitmap.h" |
| 19 #include "third_party/skia/include/core/SkCanvas.h" | 20 #include "third_party/skia/include/core/SkCanvas.h" |
| 20 #include "third_party/skia/include/core/SkColorFilter.h" | 21 #include "third_party/skia/include/core/SkColorFilter.h" |
| 21 #include "ui/android/resources/ui_resource_provider.h" | 22 #include "ui/android/resources/ui_resource_provider.h" |
| 22 #include "ui/android/window_android.h" | 23 #include "ui/android/window_android.h" |
| 23 #include "ui/gfx/android/java_bitmap.h" | 24 #include "ui/gfx/android/java_bitmap.h" |
| 24 #include "ui/gfx/geometry/rect.h" | 25 #include "ui/gfx/geometry/rect.h" |
| 25 | 26 |
| 26 using base::android::JavaArrayOfIntArrayToIntVector; | 27 using base::android::JavaArrayOfIntArrayToIntVector; |
| 27 using base::android::JavaRef; | 28 using base::android::JavaRef; |
| 28 | 29 |
| 29 namespace ui { | 30 namespace ui { |
| 30 | 31 |
| 31 // static | 32 // static |
| 32 ResourceManagerImpl* ResourceManagerImpl::FromJavaObject(jobject jobj) { | 33 ResourceManagerImpl* ResourceManagerImpl::FromJavaObject(jobject jobj) { |
| 33 return reinterpret_cast<ResourceManagerImpl*>( | 34 return reinterpret_cast<ResourceManagerImpl*>( |
| 34 Java_ResourceManager_getNativePtr(base::android::AttachCurrentThread(), | 35 Java_ResourceManager_getNativePtr(base::android::AttachCurrentThread(), |
| 35 jobj)); | 36 jobj)); |
| 36 } | 37 } |
| 37 | 38 |
| 38 ResourceManagerImpl::ResourceManagerImpl(gfx::NativeWindow native_window) | 39 ResourceManagerImpl::ResourceManagerImpl(gfx::NativeWindow native_window) |
| 39 : host_(nullptr) { | 40 : ui_resource_manager_(nullptr) { |
| 40 JNIEnv* env = base::android::AttachCurrentThread(); | 41 JNIEnv* env = base::android::AttachCurrentThread(); |
| 41 java_obj_.Reset( | 42 java_obj_.Reset( |
| 42 env, Java_ResourceManager_create(env, native_window->GetJavaObject(), | 43 env, Java_ResourceManager_create(env, native_window->GetJavaObject(), |
| 43 reinterpret_cast<intptr_t>(this)) | 44 reinterpret_cast<intptr_t>(this)) |
| 44 .obj()); | 45 .obj()); |
| 45 DCHECK(!java_obj_.is_null()); | 46 DCHECK(!java_obj_.is_null()); |
| 46 } | 47 } |
| 47 | 48 |
| 48 ResourceManagerImpl::~ResourceManagerImpl() { | 49 ResourceManagerImpl::~ResourceManagerImpl() { |
| 49 Java_ResourceManager_destroy(base::android::AttachCurrentThread(), java_obj_); | 50 Java_ResourceManager_destroy(base::android::AttachCurrentThread(), java_obj_); |
| 50 } | 51 } |
| 51 | 52 |
| 52 void ResourceManagerImpl::Init(cc::LayerTreeHost* host) { | 53 void ResourceManagerImpl::Init(cc::UIResourceManager* ui_resource_manager) { |
| 53 DCHECK(!host_); | 54 DCHECK(!ui_resource_manager_); |
| 54 DCHECK(host); | 55 DCHECK(ui_resource_manager); |
| 55 host_ = host; | 56 ui_resource_manager_ = ui_resource_manager; |
| 56 } | 57 } |
| 57 | 58 |
| 58 base::android::ScopedJavaLocalRef<jobject> | 59 base::android::ScopedJavaLocalRef<jobject> |
| 59 ResourceManagerImpl::GetJavaObject() { | 60 ResourceManagerImpl::GetJavaObject() { |
| 60 return base::android::ScopedJavaLocalRef<jobject>(java_obj_); | 61 return base::android::ScopedJavaLocalRef<jobject>(java_obj_); |
| 61 } | 62 } |
| 62 | 63 |
| 63 ResourceManager::Resource* ResourceManagerImpl::GetResource( | 64 ResourceManager::Resource* ResourceManagerImpl::GetResource( |
| 64 AndroidResourceType res_type, | 65 AndroidResourceType res_type, |
| 65 int res_id) { | 66 int res_id) { |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 // Draw the resource and make it immutable. | 129 // Draw the resource and make it immutable. |
| 129 base_image->ui_resource->GetBitmap(base_image->ui_resource->id(), false) | 130 base_image->ui_resource->GetBitmap(base_image->ui_resource->id(), false) |
| 130 .DrawToCanvas(&canvas, &color_filter); | 131 .DrawToCanvas(&canvas, &color_filter); |
| 131 tinted_bitmap.setImmutable(); | 132 tinted_bitmap.setImmutable(); |
| 132 | 133 |
| 133 // Create a UI resource from the new bitmap. | 134 // Create a UI resource from the new bitmap. |
| 134 tinted_resource = new Resource(); | 135 tinted_resource = new Resource(); |
| 135 tinted_resource->size = gfx::Size(base_image->size); | 136 tinted_resource->size = gfx::Size(base_image->size); |
| 136 tinted_resource->padding = gfx::Rect(base_image->padding); | 137 tinted_resource->padding = gfx::Rect(base_image->padding); |
| 137 tinted_resource->aperture = gfx::Rect(base_image->aperture); | 138 tinted_resource->aperture = gfx::Rect(base_image->aperture); |
| 138 tinted_resource->ui_resource = cc::ScopedUIResource::Create(host_, | 139 tinted_resource->ui_resource = cc::ScopedUIResource::Create( |
| 139 cc::UIResourceBitmap(tinted_bitmap)); | 140 ui_resource_manager_, cc::UIResourceBitmap(tinted_bitmap)); |
| 140 | 141 |
| 141 resource_map->AddWithID(tinted_resource, res_id); | 142 resource_map->AddWithID(tinted_resource, res_id); |
| 142 | 143 |
| 143 return tinted_resource; | 144 return tinted_resource; |
| 144 } | 145 } |
| 145 | 146 |
| 146 void ResourceManagerImpl::ClearTintedResourceCache(JNIEnv* env, | 147 void ResourceManagerImpl::ClearTintedResourceCache(JNIEnv* env, |
| 147 const JavaRef<jobject>& jobj) { | 148 const JavaRef<jobject>& jobj) { |
| 148 tinted_resources_.clear(); | 149 tinted_resources_.clear(); |
| 149 } | 150 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 resource->size = jbitmap.size(); | 190 resource->size = jbitmap.size(); |
| 190 resource->padding.SetRect(padding_left, padding_top, | 191 resource->padding.SetRect(padding_left, padding_top, |
| 191 padding_right - padding_left, | 192 padding_right - padding_left, |
| 192 padding_bottom - padding_top); | 193 padding_bottom - padding_top); |
| 193 resource->aperture.SetRect(aperture_left, aperture_top, | 194 resource->aperture.SetRect(aperture_left, aperture_top, |
| 194 aperture_right - aperture_left, | 195 aperture_right - aperture_left, |
| 195 aperture_bottom - aperture_top); | 196 aperture_bottom - aperture_top); |
| 196 | 197 |
| 197 SkBitmap skbitmap = gfx::CreateSkBitmapFromJavaBitmap(jbitmap); | 198 SkBitmap skbitmap = gfx::CreateSkBitmapFromJavaBitmap(jbitmap); |
| 198 skbitmap.setImmutable(); | 199 skbitmap.setImmutable(); |
| 199 resource->ui_resource = | 200 resource->ui_resource = cc::ScopedUIResource::Create( |
| 200 cc::ScopedUIResource::Create(host_, cc::UIResourceBitmap(skbitmap)); | 201 ui_resource_manager_, cc::UIResourceBitmap(skbitmap)); |
| 201 } | 202 } |
| 202 | 203 |
| 203 CrushedSpriteResource* ResourceManagerImpl::GetCrushedSpriteResource( | 204 CrushedSpriteResource* ResourceManagerImpl::GetCrushedSpriteResource( |
| 204 int bitmap_res_id, int metadata_res_id) { | 205 int bitmap_res_id, int metadata_res_id) { |
| 205 CrushedSpriteResource* resource = | 206 CrushedSpriteResource* resource = |
| 206 crushed_sprite_resources_.Lookup(bitmap_res_id); | 207 crushed_sprite_resources_.Lookup(bitmap_res_id); |
| 207 if (!resource) { | 208 if (!resource) { |
| 208 RequestCrushedSpriteResourceFromJava(bitmap_res_id, metadata_res_id, false); | 209 RequestCrushedSpriteResourceFromJava(bitmap_res_id, metadata_res_id, false); |
| 209 resource = crushed_sprite_resources_.Lookup(bitmap_res_id); | 210 resource = crushed_sprite_resources_.Lookup(bitmap_res_id); |
| 210 } else if (resource->BitmapHasBeenEvictedFromMemory()) { | 211 } else if (resource->BitmapHasBeenEvictedFromMemory()) { |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 TRACE_EVENT2("ui", | 322 TRACE_EVENT2("ui", |
| 322 "ResourceManagerImpl::RequestCrushedSpriteResourceFromJava", | 323 "ResourceManagerImpl::RequestCrushedSpriteResourceFromJava", |
| 323 "bitmap_res_id", bitmap_res_id, | 324 "bitmap_res_id", bitmap_res_id, |
| 324 "metadata_res_id", metadata_res_id); | 325 "metadata_res_id", metadata_res_id); |
| 325 Java_ResourceManager_crushedSpriteResourceRequested( | 326 Java_ResourceManager_crushedSpriteResourceRequested( |
| 326 base::android::AttachCurrentThread(), java_obj_, bitmap_res_id, | 327 base::android::AttachCurrentThread(), java_obj_, bitmap_res_id, |
| 327 metadata_res_id, reloading); | 328 metadata_res_id, reloading); |
| 328 } | 329 } |
| 329 | 330 |
| 330 } // namespace ui | 331 } // namespace ui |
| OLD | NEW |