Browse Source

Merge "PackBitmapIndex: Not buffer inflated bitmap during bitmap creation."

master
Terry Parker 4 years ago committed by Gerrit Code Review @ Eclipse.org
parent
commit
641069971d
  1. 17
      org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/BasePackBitmapIndex.java
  2. 3
      org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndexRemapper.java

17
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/BasePackBitmapIndex.java

@ -59,12 +59,26 @@ abstract class BasePackBitmapIndex extends PackBitmapIndex {
* @return the full bitmap
*/
EWAHCompressedBitmap getBitmap() {
EWAHCompressedBitmap bitmap = getBitmapWithoutCaching();
// Cache the result.
bitmapContainer = bitmap;
return bitmap;
}
/**
* Compute and return the full bitmap, do NOT cache the expanded bitmap,
* which saves memory and should only be used during bitmap creation in
* garbage collection.
*
* @return the full bitmap
*/
EWAHCompressedBitmap getBitmapWithoutCaching() {
// Fast path to immediately return the expanded result.
Object r = bitmapContainer;
if (r instanceof EWAHCompressedBitmap)
return (EWAHCompressedBitmap) r;
// Expand the bitmap and cache the result.
// Expand the bitmap but not cache the result.
XorCompressedBitmap xb = (XorCompressedBitmap) r;
EWAHCompressedBitmap out = xb.bitmap;
for (;;) {
@ -72,7 +86,6 @@ abstract class BasePackBitmapIndex extends PackBitmapIndex {
if (r instanceof EWAHCompressedBitmap) {
out = out.xor((EWAHCompressedBitmap) r);
out.trim();
bitmapContainer = out;
return out;
}
xb = (XorCompressedBitmap) r;

3
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndexRemapper.java

@ -156,7 +156,8 @@ public class PackBitmapIndexRemapper extends PackBitmapIndex
return null;
inflated.clear();
for (IntIterator i = oldBitmap.getBitmap().intIterator(); i.hasNext();)
for (IntIterator i = oldBitmap.getBitmapWithoutCaching()
.intIterator(); i.hasNext();)
inflated.set(prevToNewMapping[i.next()]);
bitmap = inflated.toEWAHCompressedBitmap();
bitmap.trim();

Loading…
Cancel
Save