summaryrefslogtreecommitdiffstats
path: root/dx
diff options
context:
space:
mode:
authorPiotr Jastrzebski <haaawk@google.com>2015-03-02 07:54:06 +0000
committerPiotr Jastrzebski <haaawk@google.com>2015-03-02 08:05:09 +0000
commit676a597064e316cefc6423c29ac23c85e5d22c7e (patch)
treed91d7f6de0d681b22490f822763fc509f54449a1 /dx
parentd119d88adf7741f47a6a38b682dcd45e39adbd04 (diff)
downloadtoolchain_jack-676a597064e316cefc6423c29ac23c85e5d22c7e.zip
toolchain_jack-676a597064e316cefc6423c29ac23c85e5d22c7e.tar.gz
toolchain_jack-676a597064e316cefc6423c29ac23c85e5d22c7e.tar.bz2
Avoid unnecessary creation of StringIdItem objects
Profiler showed for Music app that StringIdsSection.intern(CstString) was called 430594 times and only 52903 times strings.get(value) in StringIdsSection.intern(StringIdItem) returned null. This means that 377691 instances of StringIdItem were created unnecessarily. StringIdsSection.intern(CstString) created them to be able to use StringIdsSection.intern(StringIdItem) but inside this method CstString is obtained from StringIdItem and StringIdItem is useless unless strings.get(value) returns null. Change-Id: I08978b0a28fe7bd13805e44f9d52a4bbf137fd0b
Diffstat (limited to 'dx')
-rw-r--r--dx/src/com/android/jack/dx/dex/file/StringIdsSection.java16
1 files changed, 15 insertions, 1 deletions
diff --git a/dx/src/com/android/jack/dx/dex/file/StringIdsSection.java b/dx/src/com/android/jack/dx/dex/file/StringIdsSection.java
index b9d6c0d..53e5241 100644
--- a/dx/src/com/android/jack/dx/dex/file/StringIdsSection.java
+++ b/dx/src/com/android/jack/dx/dex/file/StringIdsSection.java
@@ -108,7 +108,21 @@ public final class StringIdsSection extends UniformItemSection {
* @return {@code non-null;} the interned string
*/
public StringIdItem intern(CstString string) {
- return intern(new StringIdItem(string));
+ if (string == null) {
+ throw new NullPointerException("string == null");
+ }
+
+ throwIfPrepared();
+
+ StringIdItem already = strings.get(string);
+
+ if (already != null) {
+ return already;
+ }
+
+ StringIdItem result = new StringIdItem(string);
+ strings.put(string, result);
+ return result;
}
/**