Move BitmapCommit from inside the PackWriterBitmapPreparer to a new top-level class in preparation for improving the memory footprint of GC's bitmap generation phase. Change-Id: I4d404a5b3a34998b441d23105197f33d32d39670 Signed-off-by: Yunjie Li <yunjieli@google.com>tags/v5.8.0.202006091008-r
import org.eclipse.jgit.internal.storage.file.GcTestCase; | import org.eclipse.jgit.internal.storage.file.GcTestCase; | ||||
import org.eclipse.jgit.internal.storage.file.PackBitmapIndexBuilder; | import org.eclipse.jgit.internal.storage.file.PackBitmapIndexBuilder; | ||||
import org.eclipse.jgit.internal.storage.pack.PackWriterBitmapPreparer.BitmapCommit; | |||||
import org.eclipse.jgit.junit.TestRepository.BranchBuilder; | import org.eclipse.jgit.junit.TestRepository.BranchBuilder; | ||||
import org.eclipse.jgit.junit.TestRepository.CommitBuilder; | import org.eclipse.jgit.junit.TestRepository.CommitBuilder; | ||||
import org.eclipse.jgit.lib.Constants; | import org.eclipse.jgit.lib.Constants; |
/* | |||||
* Copyright (c) 2020, Google LLC and others | |||||
* | |||||
* This program and the accompanying materials are made available under the | |||||
* terms of the Eclipse Distribution License v. 1.0 which is available at | |||||
* http://www.eclipse.org/org/documents/edl-v10.php. | |||||
* | |||||
* SPDX-License-Identifier: BSD-3-Clause | |||||
*/ | |||||
package org.eclipse.jgit.internal.storage.pack; | |||||
import org.eclipse.jgit.lib.AnyObjectId; | |||||
import org.eclipse.jgit.lib.ObjectId; | |||||
/** | |||||
* A commit object for which a bitmap index should be built. | |||||
*/ | |||||
public final class BitmapCommit extends ObjectId { | |||||
private final boolean reuseWalker; | |||||
private final int flags; | |||||
BitmapCommit(AnyObjectId objectId, boolean reuseWalker, int flags) { | |||||
super(objectId); | |||||
this.reuseWalker = reuseWalker; | |||||
this.flags = flags; | |||||
} | |||||
boolean isReuseWalker() { | |||||
return reuseWalker; | |||||
} | |||||
int getFlags() { | |||||
return flags; | |||||
} | |||||
} |
PackWriterBitmapPreparer bitmapPreparer = new PackWriterBitmapPreparer( | PackWriterBitmapPreparer bitmapPreparer = new PackWriterBitmapPreparer( | ||||
reader, writeBitmaps, pm, stats.interestingObjects, config); | reader, writeBitmaps, pm, stats.interestingObjects, config); | ||||
Collection<PackWriterBitmapPreparer.BitmapCommit> selectedCommits = bitmapPreparer | |||||
Collection<BitmapCommit> selectedCommits = bitmapPreparer | |||||
.selectCommits(numCommits, excludeFromBitmapSelection); | .selectCommits(numCommits, excludeFromBitmapSelection); | ||||
beginPhase(PackingPhase.BUILDING_BITMAPS, pm, selectedCommits.size()); | beginPhase(PackingPhase.BUILDING_BITMAPS, pm, selectedCommits.size()); | ||||
BitmapWalker walker = bitmapPreparer.newBitmapWalker(); | BitmapWalker walker = bitmapPreparer.newBitmapWalker(); | ||||
AnyObjectId last = null; | AnyObjectId last = null; | ||||
for (PackWriterBitmapPreparer.BitmapCommit cmit : selectedCommits) { | |||||
for (BitmapCommit cmit : selectedCommits) { | |||||
if (!cmit.isReuseWalker()) { | if (!cmit.isReuseWalker()) { | ||||
walker = bitmapPreparer.newBitmapWalker(); | walker = bitmapPreparer.newBitmapWalker(); | ||||
} | } |
new ObjectWalk(reader), bitmapIndex, null); | new ObjectWalk(reader), bitmapIndex, null); | ||||
} | } | ||||
/** | |||||
* A commit object for which a bitmap index should be built. | |||||
*/ | |||||
static final class BitmapCommit extends ObjectId { | |||||
private final boolean reuseWalker; | |||||
private final int flags; | |||||
BitmapCommit(AnyObjectId objectId, boolean reuseWalker, int flags) { | |||||
super(objectId); | |||||
this.reuseWalker = reuseWalker; | |||||
this.flags = flags; | |||||
} | |||||
boolean isReuseWalker() { | |||||
return reuseWalker; | |||||
} | |||||
int getFlags() { | |||||
return flags; | |||||
} | |||||
} | |||||
/** | /** | ||||
* Container for state used in the first phase of selecting commits, which | * Container for state used in the first phase of selecting commits, which | ||||
* walks all of the reachable commits via the branch tips that are not | * walks all of the reachable commits via the branch tips that are not |