Lines Matching refs:ctx

35 static bool isMarked(const Object *obj, const GcMarkContext *ctx)
37 return dvmHeapBitmapIsObjectBitSet(ctx->bitmap, obj);
91 GcMarkContext *ctx = &gDvm.gcHeap->markContext;
93 if (!createMarkStack(&ctx->stack)) {
96 ctx->finger = NULL;
97 ctx->immuneLimit = (char*)dvmHeapSourceGetImmuneLimit(isPartial);
101 static long setAndReturnMarkBit(GcMarkContext *ctx, const void *obj)
103 return dvmHeapBitmapSetAndReturnObjectBit(ctx->bitmap, obj);
106 static void markObjectNonNull(const Object *obj, GcMarkContext *ctx,
109 assert(ctx != NULL);
112 if (obj < (Object *)ctx->immuneLimit) {
113 assert(isMarked(obj, ctx));
116 if (!setAndReturnMarkBit(ctx, obj)) {
119 if (checkFinger && (void *)obj < ctx->finger) {
122 markStackPush(&ctx->stack, obj);
133 static void markObject(const Object *obj, GcMarkContext *ctx)
136 markObjectNonNull(obj, ctx, true);
151 GcMarkContext *ctx = (GcMarkContext *)arg;
153 markObjectNonNull(obj, ctx, false);
198 GcMarkContext *ctx = (GcMarkContext *)arg;
200 markObjectNonNull(obj, ctx, true);
209 GcMarkContext *ctx = &gDvm.gcHeap->markContext;
210 assert(ctx->finger == (void *)ULONG_MAX);
211 dvmVisitRoots(rootReMarkObjectVisitor, ctx);
217 static void scanFields(const Object *obj, GcMarkContext *ctx)
221 assert(ctx != NULL);
228 markObject(ref, ctx);
239 markObject(ref, ctx);
248 static void scanStaticFields(const ClassObject *clazz, GcMarkContext *ctx)
251 assert(ctx != NULL);
256 markObject(obj, ctx);
264 static void scanInterfaces(const ClassObject *clazz, GcMarkContext *ctx)
267 assert(ctx != NULL);
269 markObject((const Object *)clazz->interfaces[i], ctx);
277 static void scanClassObject(const Object *obj, GcMarkContext *ctx)
281 assert(ctx != NULL);
282 markObject((const Object *)obj->clazz, ctx);
285 markObject((const Object *)asClass->elementClass, ctx);
289 markObject((const Object *)asClass->super, ctx);
291 markObject((const Object *)asClass->classLoader, ctx);
292 scanFields(obj, ctx);
293 scanStaticFields(asClass, ctx);
295 scanInterfaces(asClass, ctx);
303 static void scanArrayObject(const Object *obj, GcMarkContext *ctx)
307 assert(ctx != NULL);
308 markObject((const Object *)obj->clazz, ctx);
313 markObject(contents[i], ctx);
408 static void delayReferenceReferent(Object *obj, GcMarkContext *ctx)
413 assert(ctx != NULL);
419 if (pending == NULL && referent != NULL && !isMarked(referent, ctx)) {
438 static void scanDataObject(const Object *obj, GcMarkContext *ctx)
442 assert(ctx != NULL);
443 markObject((const Object *)obj->clazz, ctx);
444 scanFields(obj, ctx);
446 delayReferenceReferent((Object *)obj, ctx);
454 static void scanObject(const Object *obj, GcMarkContext *ctx)
459 scanClassObject(obj, ctx);
461 scanArrayObject(obj, ctx);
463 scanDataObject(obj, ctx);
471 static void processMarkStack(GcMarkContext *ctx)
473 assert(ctx != NULL);
474 assert(ctx->finger == (void *)ULONG_MAX);
475 assert(ctx->stack.top >= ctx->stack.base);
476 GcMarkStack *stack = &ctx->stack;
479 scanObject(obj, ctx);
521 GcMarkContext *ctx)
523 const HeapBitmap *markBits = ctx->bitmap;
536 scanObject(obj, ctx);
555 static void scanGrayObjects(GcMarkContext *ctx)
571 ptr = scanDirtyCards(dirty, limit, ctx);
586 GcMarkContext *ctx = (GcMarkContext *)arg;
587 ctx->finger = (void *)finger;
588 scanObject(obj, ctx);
597 GcMarkContext *ctx = &gDvm.gcHeap->markContext;
599 assert(ctx->finger == NULL);
604 dvmHeapBitmapScanWalk(ctx->bitmap, scanBitmapCallback, ctx);
606 ctx->finger = (void *)ULONG_MAX;
611 processMarkStack(ctx);
616 GcMarkContext *ctx = &gDvm.gcHeap->markContext;
622 assert(ctx->finger == (void *)ULONG_MAX);
623 scanGrayObjects(ctx);
624 processMarkStack(ctx);
670 GcMarkContext *ctx = &gDvm.gcHeap->markContext;
681 bool marked = isMarked(referent, ctx);
684 markObject(referent, ctx);
697 processMarkStack(ctx);
708 GcMarkContext *ctx = &gDvm.gcHeap->markContext;
713 if (referent != NULL && !isMarked(referent, ctx)) {
732 GcMarkContext *ctx = &gDvm.gcHeap->markContext;
739 if (referent != NULL && !isMarked(referent, ctx)) {
740 markObject(referent, ctx);
750 processMarkStack(ctx);
843 GcMarkContext *ctx = &gDvm.gcHeap->markContext;
851 destroyMarkStack(&ctx->stack);
853 ctx->finger = NULL;
865 SweepContext *ctx = (SweepContext *)arg;
866 if (ctx->isConcurrent) {
869 ctx->numBytes += dvmHeapSourceFreeList(numPtrs, ptrs);
870 ctx->numObjects += numPtrs;
871 if (ctx->isConcurrent) {
888 GcMarkContext* ctx = &gDvm.gcHeap->markContext;
892 if (!isMarked(*entry, ctx)) {
918 SweepContext ctx;
930 ctx.numObjects = ctx.numBytes = 0;
931 ctx.isConcurrent = isConcurrent;
936 sweepBitmapCallback, &ctx);
938 *numObjects = ctx.numObjects;
939 *numBytes = ctx.numBytes;
941 gDvm.allocProf.freeCount += ctx.numObjects;
942 gDvm.allocProf.freeSize += ctx.numBytes;