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 * @return the full bitmap
*/ */
EWAHCompressedBitmap getBitmap() { 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. // Fast path to immediately return the expanded result.
Object r = bitmapContainer; Object r = bitmapContainer;
if (r instanceof EWAHCompressedBitmap) if (r instanceof EWAHCompressedBitmap)
return (EWAHCompressedBitmap) r; return (EWAHCompressedBitmap) r;
// Expand the bitmap and cache the result. // Expand the bitmap but not cache the result.
XorCompressedBitmap xb = (XorCompressedBitmap) r; XorCompressedBitmap xb = (XorCompressedBitmap) r;
EWAHCompressedBitmap out = xb.bitmap; EWAHCompressedBitmap out = xb.bitmap;
for (;;) { for (;;) {
@ -72,7 +86,6 @@ abstract class BasePackBitmapIndex extends PackBitmapIndex {
if (r instanceof EWAHCompressedBitmap) { if (r instanceof EWAHCompressedBitmap) {
out = out.xor((EWAHCompressedBitmap) r); out = out.xor((EWAHCompressedBitmap) r);
out.trim(); out.trim();
bitmapContainer = out;
return out; return out;
} }
xb = (XorCompressedBitmap) r; 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; return null;
inflated.clear(); inflated.clear();
for (IntIterator i = oldBitmap.getBitmap().intIterator(); i.hasNext();) for (IntIterator i = oldBitmap.getBitmapWithoutCaching()
.intIterator(); i.hasNext();)
inflated.set(prevToNewMapping[i.next()]); inflated.set(prevToNewMapping[i.next()]);
bitmap = inflated.toEWAHCompressedBitmap(); bitmap = inflated.toEWAHCompressedBitmap();
bitmap.trim(); bitmap.trim();

Loading…
Cancel
Save