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