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

Unified Diff: ui/android/resources/resource_manager_impl.cc

Issue 2325623003: Replace IDMap with std::unordered_map in ResourceManager (Closed)
Patch Set: fix GetResource for certain dynamic resources Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/android/resources/resource_manager_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/android/resources/resource_manager_impl.cc
diff --git a/ui/android/resources/resource_manager_impl.cc b/ui/android/resources/resource_manager_impl.cc
index 7a903740448c0c84c6c5681007005334fa2238d9..0b11774a7854889d45103f11b01a34f33b549297 100644
--- a/ui/android/resources/resource_manager_impl.cc
+++ b/ui/android/resources/resource_manager_impl.cc
@@ -67,12 +67,22 @@ ResourceManager::Resource* ResourceManagerImpl::GetResource(
DCHECK_GE(res_type, ANDROID_RESOURCE_TYPE_FIRST);
DCHECK_LE(res_type, ANDROID_RESOURCE_TYPE_LAST);
- Resource* resource = resources_[res_type].Lookup(res_id);
+ Resource* resource = nullptr;
aelias_OOO_until_Jul13 2016/09/14 20:14:37 Could you delete this variable and just do: std
mdjones 2016/09/14 22:23:02 Done.
- if (!resource || res_type == ANDROID_RESOURCE_TYPE_DYNAMIC ||
+ std::unordered_map<int, std::unique_ptr<Resource>>::iterator item =
+ resources_[res_type].find(res_id);
+
+ if (item == resources_[res_type].end() ||
+ res_type == ANDROID_RESOURCE_TYPE_DYNAMIC ||
res_type == ANDROID_RESOURCE_TYPE_DYNAMIC_BITMAP) {
RequestResourceFromJava(res_type, res_id);
- resource = resources_[res_type].Lookup(res_id);
+
+ // Check if the resource has been added (some dynamic may not have been).
+ item = resources_[res_type].find(res_id);
+ if (item != resources_[res_type].end())
+ resource = item->second.get();
+ } else {
+ resource = item->second.get();
}
return resource;
@@ -93,19 +103,19 @@ void ResourceManagerImpl::RemoveUnusedTints(
ResourceManager::Resource* ResourceManagerImpl::GetStaticResourceWithTint(
int res_id,
- int tint_color) {
+ SkColor tint_color) {
if (tinted_resources_.find(tint_color) == tinted_resources_.end()) {
tinted_resources_[tint_color] = base::MakeUnique<ResourceMap>();
}
ResourceMap* resource_map = tinted_resources_[tint_color].get();
- Resource* tinted_resource = resource_map->Lookup(res_id);
-
// If the resource is already cached, use it.
- if (tinted_resource)
- return tinted_resource;
+ std::unordered_map<int, std::unique_ptr<Resource>>::iterator item =
+ resource_map->find(res_id);
+ if (item != resource_map->end())
+ return item->second.get();
- tinted_resource = new Resource();
+ std::unique_ptr<Resource> tinted_resource = base::MakeUnique<Resource>();
ResourceManager::Resource* base_image =
GetResource(ANDROID_RESOURCE_TYPE_STATIC, res_id);
@@ -132,16 +142,15 @@ ResourceManager::Resource* ResourceManagerImpl::GetStaticResourceWithTint(
tinted_bitmap.setImmutable();
// Create a UI resource from the new bitmap.
- tinted_resource = new Resource();
tinted_resource->size = gfx::Size(base_image->size);
tinted_resource->padding = gfx::Rect(base_image->padding);
tinted_resource->aperture = gfx::Rect(base_image->aperture);
tinted_resource->ui_resource = cc::ScopedUIResource::Create(
ui_resource_manager_, cc::UIResourceBitmap(tinted_bitmap));
- resource_map->AddWithID(tinted_resource, res_id);
+ (*resource_map)[res_id].swap(tinted_resource);
- return tinted_resource;
+ return (*resource_map)[res_id].get();
}
void ResourceManagerImpl::ClearTintedResourceCache(JNIEnv* env,
@@ -155,7 +164,7 @@ void ResourceManagerImpl::PreloadResource(AndroidResourceType res_type,
DCHECK_LE(res_type, ANDROID_RESOURCE_TYPE_LAST);
// Don't send out a query if the resource is already loaded.
- if (resources_[res_type].Lookup(res_id))
+ if (resources_[res_type].find(res_id) != resources_[res_type].end())
return;
PreloadResourceFromJava(res_type, res_id);
@@ -180,12 +189,14 @@ void ResourceManagerImpl::OnResourceReady(JNIEnv* env,
"resource_type", res_type,
"resource_id", res_id);
- Resource* resource = resources_[res_type].Lookup(res_id);
- if (!resource) {
- resource = new Resource();
- resources_[res_type].AddWithID(resource, res_id);
+ std::unordered_map<int, std::unique_ptr<Resource>>::iterator item =
+ resources_[res_type].find(res_id);
+ if (item == resources_[res_type].end()) {
+ resources_[res_type][res_id] = base::MakeUnique<Resource>();
}
+ Resource* resource = resources_[res_type][res_id].get();
+
gfx::JavaBitmap jbitmap(bitmap.obj());
resource->size = jbitmap.size();
resource->padding.SetRect(padding_left, padding_top,
@@ -203,11 +214,16 @@ void ResourceManagerImpl::OnResourceReady(JNIEnv* env,
CrushedSpriteResource* ResourceManagerImpl::GetCrushedSpriteResource(
int bitmap_res_id, int metadata_res_id) {
- CrushedSpriteResource* resource =
- crushed_sprite_resources_.Lookup(bitmap_res_id);
+
+ CrushedSpriteResource* resource = nullptr;
+ if (crushed_sprite_resources_.find(bitmap_res_id)
+ != crushed_sprite_resources_.end()) {
+ resource = crushed_sprite_resources_[bitmap_res_id].get();
+ }
+
if (!resource) {
RequestCrushedSpriteResourceFromJava(bitmap_res_id, metadata_res_id, false);
- resource = crushed_sprite_resources_.Lookup(bitmap_res_id);
+ resource = crushed_sprite_resources_[bitmap_res_id].get();
} else if (resource->BitmapHasBeenEvictedFromMemory()) {
RequestCrushedSpriteResourceFromJava(bitmap_res_id, metadata_res_id, true);
}
@@ -236,17 +252,14 @@ void ResourceManagerImpl::OnCrushedSpriteResourceReady(
SkBitmap skbitmap =
gfx::CreateSkBitmapFromJavaBitmap(gfx::JavaBitmap(bitmap.obj()));
- CrushedSpriteResource* resource = new CrushedSpriteResource(
- skbitmap,
- src_dst_rects,
- gfx::Size(unscaled_sprite_width, unscaled_sprite_height),
- gfx::Size(scaled_sprite_width, scaled_sprite_height));
+ std::unique_ptr<CrushedSpriteResource> resource =
+ base::MakeUnique<CrushedSpriteResource>(
+ skbitmap,
+ src_dst_rects,
+ gfx::Size(unscaled_sprite_width, unscaled_sprite_height),
+ gfx::Size(scaled_sprite_width, scaled_sprite_height));
- if (crushed_sprite_resources_.Lookup(bitmap_res_id)) {
- crushed_sprite_resources_.Replace(bitmap_res_id, resource);
- } else {
- crushed_sprite_resources_.AddWithID(resource, bitmap_res_id);
- }
+ crushed_sprite_resources_[bitmap_res_id].swap(resource);
}
CrushedSpriteResource::SrcDstRects
@@ -283,15 +296,15 @@ void ResourceManagerImpl::OnCrushedSpriteResourceReloaded(
const JavaRef<jobject>& jobj,
jint bitmap_res_id,
const JavaRef<jobject>& bitmap) {
- CrushedSpriteResource* resource =
- crushed_sprite_resources_.Lookup(bitmap_res_id);
- if (!resource) {
+ std::unordered_map<int, std::unique_ptr<CrushedSpriteResource>>::iterator
+ item = crushed_sprite_resources_.find(bitmap_res_id);
+ if (item == crushed_sprite_resources_.end()) {
// Cannot reload a resource that has not been previously loaded.
return;
}
SkBitmap skbitmap =
gfx::CreateSkBitmapFromJavaBitmap(gfx::JavaBitmap(bitmap.obj()));
- resource->SetBitmap(skbitmap);
+ item->second->SetBitmap(skbitmap);
}
// static
« no previous file with comments | « ui/android/resources/resource_manager_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698