You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by sj...@apache.org on 2008/07/21 16:06:44 UTC
svn commit: r678424 - in
/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200:
IcBands.java IcTuple.java
Author: sjanuary
Date: Mon Jul 21 07:06:43 2008
New Revision: 678424
URL: http://svn.apache.org/viewvc?rev=678424&view=rev
Log:
Apply patch for HARMONY-5921 ([classlib][pack200][performance] IcBands.getRelevantIcTuples() optimization)
Modified:
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/IcBands.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/IcTuple.java
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/IcBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/IcBands.java?rev=678424&r1=678423&r2=678424&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/IcBands.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/IcBands.java Mon Jul 21 07:06:43 2008
@@ -19,7 +19,9 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.apache.harmony.pack200.Codec;
import org.apache.harmony.pack200.Pack200Exception;
@@ -118,11 +120,13 @@
* @return array of IcTuple
*/
public IcTuple[] getRelevantIcTuples(String className, ClassConstantPool cp) {
+ Set relevantTuplesContains = new HashSet();
List relevantTuples = new ArrayList();
IcTuple[] allTuples = getIcTuples();
int allTuplesSize = allTuples.length;
for (int index = 0; index < allTuplesSize; index++) {
if (allTuples[index].shouldAddToRelevantForClassName(className)) {
+ relevantTuplesContains.add(allTuples[index]);
relevantTuples.add(allTuples[index]);
}
}
@@ -142,7 +146,7 @@
if (poolClassName.equals(allTuples[allTupleIndex]
.thisClassString())) {
// If the tuple isn't already in there, then add it
- if (relevantTuples.indexOf(allTuples[allTupleIndex]) == -1) {
+ if (relevantTuplesContains.add(allTuples[allTupleIndex])) {
relevantTuples.add(allTuples[allTupleIndex]);
changed = true;
}
@@ -175,7 +179,7 @@
if (tuplesToAdd.size() > 0) {
for(int index = 0; index < tuplesToAdd.size(); index++) {
IcTuple tuple = (IcTuple) tuplesToAdd.get(index);
- if (!relevantTuples.contains(tuple)) {
+ if (relevantTuplesContains.add(tuple)) {
changedFixup = true;
relevantTuples.add(tuple);
}
@@ -189,7 +193,7 @@
IcTuple[] orderedRelevantTuples = new IcTuple[relevantTuples.size()];
int orderedRelevantIndex = 0;
for (int index = 0; index < allTuplesSize; index++) {
- if (relevantTuples.contains(allTuples[index])) {
+ if (relevantTuplesContains.contains(allTuples[index])) {
orderedRelevantTuples[orderedRelevantIndex] = allTuples[index];
orderedRelevantIndex++;
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/IcTuple.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/IcTuple.java?rev=678424&r1=678423&r2=678424&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/IcTuple.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/IcTuple.java Mon Jul 21 07:06:43 2008
@@ -75,6 +75,7 @@
private String cachedSimpleClassName;
private boolean initialized;
private boolean anonymous;
+ private boolean outerIsAnonymous;
private boolean member = true;
private int cachedOuterClassIndex = -1;
private int cachedSimpleClassNameIndex = -1;
@@ -155,7 +156,12 @@
return anonymous;
}
+
public boolean outerIsAnonymous() {
+ return outerIsAnonymous;
+ }
+
+ private boolean computeOuterIsAnonymous() {
String[] result = innerBreakAtDollar(cachedOuterClassString);
if (result.length == 0) {
throw new Error(
@@ -250,6 +256,8 @@
member = true;
}
}
+
+ outerIsAnonymous = computeOuterIsAnonymous();
}
private boolean isAllDigits(String nameString) {
@@ -303,8 +311,21 @@
return true;
}
+ private boolean hashcodeComputed;
+ private int cachedHashCode;
+
+ private void generateHashCode() {
+ hashcodeComputed = true;
+ cachedHashCode = 17;
+ if(C != null) { cachedHashCode =+ C.hashCode(); }
+ if(C2 != null) { cachedHashCode =+ C2.hashCode(); }
+ if(N != null) { cachedHashCode =+ N.hashCode(); }
+ }
+
public int hashCode() {
- return 17 + C.hashCode() + C2.hashCode() + N.hashCode();
+ if (!hashcodeComputed)
+ generateHashCode();
+ return cachedHashCode;
}
public String getC() {