Browse Source

Replace usage of ArrayIndexOutOfBoundsException in treewalk

Using exceptions during normal operations - for example with the
desire of expanding an array in the failure case - can have a
severe performance impact. When exceptions are instantiated,
a stack trace is collected. Generating stack trace can be expensive.

Compared to that, checking an array for length - even if done many
times - is cheap since this is a check that can run in just a
handful of CPU cycles.

Change-Id: Ifaf10623f6a876c9faecfa44654c9296315adfcb
Signed-off-by: Patrick Hiesel <hiesel@google.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
stable-5.1
Patrick Hiesel 5 years ago committed by Matthias Sohn
parent
commit
6185db3d77
  1. 6
      org.eclipse.jgit/src/org/eclipse/jgit/treewalk/AbstractTreeIterator.java
  2. 9
      org.eclipse.jgit/src/org/eclipse/jgit/treewalk/CanonicalTreeParser.java

6
org.eclipse.jgit/src/org/eclipse/jgit/treewalk/AbstractTreeIterator.java

@ -239,12 +239,10 @@ public abstract class AbstractTreeIterator {
path = p.path; path = p.path;
pathOffset = p.pathLen + 1; pathOffset = p.pathLen + 1;
try { if (pathOffset > path.length) {
path[pathOffset - 1] = '/';
} catch (ArrayIndexOutOfBoundsException e) {
growPath(p.pathLen); growPath(p.pathLen);
path[pathOffset - 1] = '/';
} }
path[pathOffset - 1] = '/';
} }
/** /**

9
org.eclipse.jgit/src/org/eclipse/jgit/treewalk/CanonicalTreeParser.java

@ -387,14 +387,13 @@ public class CanonicalTreeParser extends AbstractTreeIterator {
tmp = pathOffset; tmp = pathOffset;
for (;; tmp++) { for (;; tmp++) {
c = raw[ptr++]; c = raw[ptr++];
if (c == 0) if (c == 0) {
break; break;
try { }
path[tmp] = c; if (tmp >= path.length) {
} catch (ArrayIndexOutOfBoundsException e) {
growPath(tmp); growPath(tmp);
path[tmp] = c;
} }
path[tmp] = c;
} }
pathLen = tmp; pathLen = tmp;
nextPtr = ptr + OBJECT_ID_LENGTH; nextPtr = ptr + OBJECT_ID_LENGTH;

Loading…
Cancel
Save