aboutsummaryrefslogtreecommitdiffstats
path: root/ide_common/src/com/android/ide/common/resources
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2012-06-10 13:09:37 -0700
committerTor Norbye <tnorbye@google.com>2012-06-11 12:17:48 -0700
commit7f875357d503f71f69da81bd2c7f52a5dbfc5aff (patch)
tree4eff6719580e816367c89d0cb4be7721ab612eb6 /ide_common/src/com/android/ide/common/resources
parent0fcf4bee6d93c5a5b1c449d48f0307abe953454d (diff)
downloadsdk-7f875357d503f71f69da81bd2c7f52a5dbfc5aff.zip
sdk-7f875357d503f71f69da81bd2c7f52a5dbfc5aff.tar.gz
sdk-7f875357d503f71f69da81bd2c7f52a5dbfc5aff.tar.bz2
Set default sizes for framework resource maps to avoid resizing
Change-Id: I09b9538032dfff71f5e3b09d5271ebb286ed36c7
Diffstat (limited to 'ide_common/src/com/android/ide/common/resources')
-rwxr-xr-xide_common/src/com/android/ide/common/resources/ResourceRepository.java45
1 files changed, 41 insertions, 4 deletions
diff --git a/ide_common/src/com/android/ide/common/resources/ResourceRepository.java b/ide_common/src/com/android/ide/common/resources/ResourceRepository.java
index 48c9690..7e0338f 100755
--- a/ide_common/src/com/android/ide/common/resources/ResourceRepository.java
+++ b/ide_common/src/com/android/ide/common/resources/ResourceRepository.java
@@ -60,11 +60,11 @@ public abstract class ResourceRepository {
protected final Map<ResourceFolderType, List<ResourceFolder>> mFolderMap =
new EnumMap<ResourceFolderType, List<ResourceFolder>>(ResourceFolderType.class);
- protected final Map<ResourceType, Map<String, ResourceItem>> mResourceMap =
+ protected final Map<ResourceType, Map<String, ResourceItem>> mResourceMap =
new EnumMap<ResourceType, Map<String, ResourceItem>>(
ResourceType.class);
- private final Map<Map<String, ResourceItem>, Collection<ResourceItem>> mReadOnlyListMap =
+ private final Map<Map<String, ResourceItem>, Collection<ResourceItem>> mReadOnlyListMap =
new IdentityHashMap<Map<String, ResourceItem>, Collection<ResourceItem>>();
private final boolean mFrameworkRepository;
@@ -231,9 +231,46 @@ public abstract class ResourceRepository {
Map<String, ResourceItem> map = mResourceMap.get(type);
if (map == null) {
- map = new HashMap<String, ResourceItem>();
+ if (isFrameworkRepository()) {
+ // Pick initial size for the maps. Also change the load factor to 1.0
+ // to avoid rehashing the whole table when we (as expected) get near
+ // the known rough size of each resource type map.
+ int size;
+ switch (type) {
+ // Based on counts in API 16. Going back to API 10, the counts
+ // are roughly 25-50% smaller (e.g. compared to the top 5 types below
+ // the fractions are 1107 vs 1734, 831 vs 1508, 895 vs 1255,
+ // 733 vs 1064 and 171 vs 783.
+ case PUBLIC: size = 1734; break;
+ case DRAWABLE: size = 1508; break;
+ case STRING: size = 1255; break;
+ case ATTR: size = 1064; break;
+ case STYLE: size = 783; break;
+ case ID: size = 347; break;
+ case DECLARE_STYLEABLE: size = 210; break;
+ case LAYOUT: size = 187; break;
+ case COLOR: size = 120; break;
+ case ANIM: size = 95; break;
+ case DIMEN: size = 81; break;
+ case BOOL: size = 54; break;
+ case INTEGER: size = 52; break;
+ case ARRAY: size = 51; break;
+ case PLURALS: size = 20; break;
+ case XML: size = 14; break;
+ case INTERPOLATOR : size = 13; break;
+ case ANIMATOR: size = 8; break;
+ case RAW: size = 4; break;
+ case MENU: size = 2; break;
+ case MIPMAP: size = 2; break;
+ case FRACTION: size = 1; break;
+ default:
+ size = 2;
+ }
+ map = new HashMap<String, ResourceItem>(size, 1.0f);
+ } else {
+ map = new HashMap<String, ResourceItem>();
+ }
mResourceMap.put(type, map);
-
}
map.put(item.getName(), item);