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

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

Issue 1371523003: Android: Don't destroy LayerTreeHost when Surface goes away (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 "base/android/jni_string.h" 7 #include "base/android/jni_string.h"
8 #include "base/trace_event/trace_event.h" 8 #include "base/trace_event/trace_event.h"
9 #include "cc/resources/scoped_ui_resource.h"
9 #include "jni/ResourceManager_jni.h" 10 #include "jni/ResourceManager_jni.h"
10 #include "ui/android/resources/ui_resource_android.h"
11 #include "ui/android/resources/ui_resource_provider.h" 11 #include "ui/android/resources/ui_resource_provider.h"
12 #include "ui/gfx/android/java_bitmap.h" 12 #include "ui/gfx/android/java_bitmap.h"
13 13
14 namespace ui { 14 namespace ui {
15 15
16 // static 16 // static
17 ResourceManagerImpl* ResourceManagerImpl::FromJavaObject(jobject jobj) { 17 ResourceManagerImpl* ResourceManagerImpl::FromJavaObject(jobject jobj) {
18 return reinterpret_cast<ResourceManagerImpl*>( 18 return reinterpret_cast<ResourceManagerImpl*>(
19 Java_ResourceManager_getNativePtr(base::android::AttachCurrentThread(), 19 Java_ResourceManager_getNativePtr(base::android::AttachCurrentThread(),
20 jobj)); 20 jobj));
21 } 21 }
22 22
23 ResourceManagerImpl::ResourceManagerImpl( 23 ResourceManagerImpl::ResourceManagerImpl() {
jdduke (slow) 2015/09/30 17:19:43 : host_(nullptr)
no sievers 2015/09/30 21:58:48 Done.
24 ui::UIResourceProvider* ui_resource_provider)
25 : ui_resource_provider_(ui_resource_provider) {
26 JNIEnv* env = base::android::AttachCurrentThread(); 24 JNIEnv* env = base::android::AttachCurrentThread();
27 java_obj_.Reset(env, Java_ResourceManager_create( 25 java_obj_.Reset(env, Java_ResourceManager_create(
28 env, base::android::GetApplicationContext(), 26 env, base::android::GetApplicationContext(),
29 reinterpret_cast<intptr_t>(this)).obj()); 27 reinterpret_cast<intptr_t>(this)).obj());
30 DCHECK(!java_obj_.is_null()); 28 DCHECK(!java_obj_.is_null());
31 } 29 }
32 30
33 ResourceManagerImpl::~ResourceManagerImpl() { 31 ResourceManagerImpl::~ResourceManagerImpl() {
34 Java_ResourceManager_destroy(base::android::AttachCurrentThread(), 32 Java_ResourceManager_destroy(base::android::AttachCurrentThread(),
35 java_obj_.obj()); 33 java_obj_.obj());
36 } 34 }
37 35
36 void ResourceManagerImpl::Init(cc::LayerTreeHost* host) {
37 DCHECK(!host_);
38 DCHECK(host);
39 host_ = host;
40 }
41
38 base::android::ScopedJavaLocalRef<jobject> 42 base::android::ScopedJavaLocalRef<jobject>
39 ResourceManagerImpl::GetJavaObject() { 43 ResourceManagerImpl::GetJavaObject() {
40 return base::android::ScopedJavaLocalRef<jobject>(java_obj_); 44 return base::android::ScopedJavaLocalRef<jobject>(java_obj_);
41 } 45 }
42 46
43 ResourceManager::Resource* ResourceManagerImpl::GetResource( 47 ResourceManager::Resource* ResourceManagerImpl::GetResource(
44 AndroidResourceType res_type, 48 AndroidResourceType res_type,
45 int res_id) { 49 int res_id) {
46 DCHECK_GE(res_type, ANDROID_RESOURCE_TYPE_FIRST); 50 DCHECK_GE(res_type, ANDROID_RESOURCE_TYPE_FIRST);
47 DCHECK_LE(res_type, ANDROID_RESOURCE_TYPE_LAST); 51 DCHECK_LE(res_type, ANDROID_RESOURCE_TYPE_LAST);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 } 99 }
96 100
97 gfx::JavaBitmap jbitmap(bitmap); 101 gfx::JavaBitmap jbitmap(bitmap);
98 resource->size = jbitmap.size(); 102 resource->size = jbitmap.size();
99 resource->padding.SetRect(padding_left, padding_top, 103 resource->padding.SetRect(padding_left, padding_top,
100 padding_right - padding_left, 104 padding_right - padding_left,
101 padding_bottom - padding_top); 105 padding_bottom - padding_top);
102 resource->aperture.SetRect(aperture_left, aperture_top, 106 resource->aperture.SetRect(aperture_left, aperture_top,
103 aperture_right - aperture_left, 107 aperture_right - aperture_left,
104 aperture_bottom - aperture_top); 108 aperture_bottom - aperture_top);
109
110 SkBitmap skbitmap = gfx::CreateSkBitmapFromJavaBitmap(jbitmap);
111 skbitmap.setImmutable();
105 resource->ui_resource = 112 resource->ui_resource =
106 UIResourceAndroid::CreateFromJavaBitmap(ui_resource_provider_, jbitmap); 113 cc::ScopedUIResource::Create(host_, cc::UIResourceBitmap(skbitmap));
107 } 114 }
108 115
109 // static 116 // static
110 bool ResourceManagerImpl::RegisterResourceManager(JNIEnv* env) { 117 bool ResourceManagerImpl::RegisterResourceManager(JNIEnv* env) {
111 return RegisterNativesImpl(env); 118 return RegisterNativesImpl(env);
112 } 119 }
113 120
114 void ResourceManagerImpl::PreloadResourceFromJava(AndroidResourceType res_type, 121 void ResourceManagerImpl::PreloadResourceFromJava(AndroidResourceType res_type,
115 int res_id) { 122 int res_id) {
116 TRACE_EVENT2("ui", "ResourceManagerImpl::PreloadResourceFromJava", 123 TRACE_EVENT2("ui", "ResourceManagerImpl::PreloadResourceFromJava",
117 "resource_type", res_type, 124 "resource_type", res_type,
118 "resource_id", res_id); 125 "resource_id", res_id);
119 Java_ResourceManager_preloadResource(base::android::AttachCurrentThread(), 126 Java_ResourceManager_preloadResource(base::android::AttachCurrentThread(),
120 java_obj_.obj(), res_type, res_id); 127 java_obj_.obj(), res_type, res_id);
121 } 128 }
122 129
123 void ResourceManagerImpl::RequestResourceFromJava(AndroidResourceType res_type, 130 void ResourceManagerImpl::RequestResourceFromJava(AndroidResourceType res_type,
124 int res_id) { 131 int res_id) {
125 TRACE_EVENT2("ui", "ResourceManagerImpl::RequestResourceFromJava", 132 TRACE_EVENT2("ui", "ResourceManagerImpl::RequestResourceFromJava",
126 "resource_type", res_type, 133 "resource_type", res_type,
127 "resource_id", res_id); 134 "resource_id", res_id);
128 Java_ResourceManager_resourceRequested(base::android::AttachCurrentThread(), 135 Java_ResourceManager_resourceRequested(base::android::AttachCurrentThread(),
129 java_obj_.obj(), res_type, res_id); 136 java_obj_.obj(), res_type, res_id);
130 } 137 }
131 138
132 } // namespace ui 139 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698