1adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro/*
2adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro * Copyright (C) 2010 The Android Open Source Project
3adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro *
4adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro * Licensed under the Apache License, Version 2.0 (the "License");
5adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro * you may not use this file except in compliance with the License.
6adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro * You may obtain a copy of the License at
7adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro *
8adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro *      http://www.apache.org/licenses/LICENSE-2.0
9adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro *
10adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro * Unless required by applicable law or agreed to in writing, software
11adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro * distributed under the License is distributed on an "AS IS" BASIS,
12adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro * See the License for the specific language governing permissions and
14adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro * limitations under the License.
15adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro */
16adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro
17375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#ifndef DALVIK_ALLOC_VISIT_H_
18375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#define DALVIK_ALLOC_VISIT_H_
19adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro
20adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro#include "Dalvik.h"
21adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro
2250e5fd5984c9b0a6f0927ed5ddf13bde40e338c7Carl Shapiroenum RootType {
2307018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro  ROOT_UNKNOWN = 0,
2407018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro  ROOT_JNI_GLOBAL,
2507018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro  ROOT_JNI_LOCAL,
2607018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro  ROOT_JAVA_FRAME,
2707018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro  ROOT_NATIVE_STACK,
2807018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro  ROOT_STICKY_CLASS,
2907018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro  ROOT_THREAD_BLOCK,
3007018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro  ROOT_MONITOR_USED,
3107018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro  ROOT_THREAD_OBJECT,
3207018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro  ROOT_INTERNED_STRING,
3307018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro  ROOT_DEBUGGER,
3407018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro  ROOT_VM_INTERNAL,
3507018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro  ROOT_JNI_MONITOR,
3650e5fd5984c9b0a6f0927ed5ddf13bde40e338c7Carl Shapiro};
3707018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro
38ddb0c1cfe13128de385123c52ca8c33efb1cb587Carl Shapiro/*
39ddb0c1cfe13128de385123c52ca8c33efb1cb587Carl Shapiro * Callback invoked with the address of a reference and a user
40ddb0c1cfe13128de385123c52ca8c33efb1cb587Carl Shapiro * supplied context argument.
41ddb0c1cfe13128de385123c52ca8c33efb1cb587Carl Shapiro */
42ddb0c1cfe13128de385123c52ca8c33efb1cb587Carl Shapirotypedef void Visitor(void *addr, void *arg);
43adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro
44ddb0c1cfe13128de385123c52ca8c33efb1cb587Carl Shapiro/*
4507018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro * Like a Visitor, but passes root specific information such as the
4607018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro * containing thread id and the root type.  In cases where a root is
4707018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro * not specific to a thread, 0, an invalid thread id is provided.
4807018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro */
4907018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapirotypedef void RootVisitor(void *addr, u4 threadId, RootType type, void *arg);
5007018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro
5107018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapiro/*
521fbfcab90fb4f03fa9053ce2cd567f84904fefefCarl Shapiro * Visits references in an object.
53ddb0c1cfe13128de385123c52ca8c33efb1cb587Carl Shapiro */
54056b9663171dc6f249a36faa49389142790965baCarl Shapirovoid dvmVisitObject(Visitor *visitor, Object *obj, void *arg);
55adc346f4145e409959ec1c657bbd8fecef6d2042Carl Shapiro
561fbfcab90fb4f03fa9053ce2cd567f84904fefefCarl Shapiro/*
571fbfcab90fb4f03fa9053ce2cd567f84904fefefCarl Shapiro * Visits references in the root set.
581fbfcab90fb4f03fa9053ce2cd567f84904fefefCarl Shapiro */
5907018e2d14b012ae433a0d82025a885ed8debc3bCarl Shapirovoid dvmVisitRoots(RootVisitor *visitor, void *arg);
601fbfcab90fb4f03fa9053ce2cd567f84904fefefCarl Shapiro
61375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#endif  // DALVIK_ALLOC_VISIT_H_
62