Merge "Simplify heap bitmap allocation." into dalvik-dev
diff --git a/vm/alloc/MarkSweep.c b/vm/alloc/MarkSweep.c
index 3ba54fc..4ab4514 100644
--- a/vm/alloc/MarkSweep.c
+++ b/vm/alloc/MarkSweep.c
@@ -424,7 +424,8 @@
}
/*
- * Removes the reference at the head of circular queue of references.
+ * Removes the reference at the head of a circular queue of
+ * references.
*/
static Object *dequeuePendingReference(Object **list)
{
@@ -795,28 +796,16 @@
LOG_SCAN("done with marked objects\n");
}
-static void dirtyObjectVisitor(void *ptr, void *arg)
-{
- markObject(*(Object **)ptr, (GcMarkContext *)arg);
-}
-
/*
* Callback applied to each gray object to blacken it.
*/
static bool dirtyObjectCallback(size_t numPtrs, void **ptrs,
const void *finger, void *arg)
{
- GcMarkContext *ctx;
size_t i;
- ctx = (GcMarkContext *)arg;
for (i = 0; i < numPtrs; ++i) {
- Object *obj = ptrs[i];
- if (IS_CLASS_FLAG_SET(obj->clazz, CLASS_ISREFERENCE)) {
- scanDataObject((DataObject *)obj, ctx);
- } else {
- dvmVisitObject(dirtyObjectVisitor, obj, ctx);
- }
+ scanObject(ptrs[i], arg);
}
return true;
}
@@ -895,12 +884,11 @@
GcMarkContext *markContext;
Object *ref, *referent;
Object *clear;
- size_t pendingNextOffset, referentOffset;
+ size_t referentOffset;
size_t counter;
bool marked;
markContext = &gDvm.gcHeap->markContext;
- pendingNextOffset = gDvm.offJavaLangRefReference_pendingNext;
referentOffset = gDvm.offJavaLangRefReference_referent;
clear = NULL;
counter = 0;
@@ -928,19 +916,18 @@
}
/*
- * Walks the reference list and clears references with an unmarked
- * (white) referents. Cleared references registered to a reference
- * queue are scheduled for appending by the heap worker thread.
+ * Unlink the reference list clearing references objects with white
+ * referents. Cleared references registered to a reference queue are
+ * scheduled for appending by the heap worker thread.
*/
void dvmClearWhiteRefs(Object **list)
{
GcMarkContext *markContext;
Object *ref, *referent;
- size_t pendingNextOffset, referentOffset;
+ size_t referentOffset;
bool doSignal;
markContext = &gDvm.gcHeap->markContext;
- pendingNextOffset = gDvm.offJavaLangRefReference_pendingNext;
referentOffset = gDvm.offJavaLangRefReference_referent;
doSignal = false;
while (*list != NULL) {
@@ -948,7 +935,7 @@
referent = dvmGetFieldObject(ref, referentOffset);
assert(referent != NULL);
if (!isMarked(referent, markContext)) {
- /* Referent is "white", clear it. */
+ /* Referent is white, clear it. */
clearReference(ref);
if (isEnqueuable(ref)) {
enqueueReference(ref);