object_callbacks.h revision b76cac637691c29daa9c44e493b5bc26346ed116
1/* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef ART_RUNTIME_OBJECT_CALLBACKS_H_ 18#define ART_RUNTIME_OBJECT_CALLBACKS_H_ 19 20// For ostream. 21#include <ostream> 22// For uint32_t. 23#include <stdint.h> 24// For size_t. 25#include <stdlib.h> 26 27#include "base/macros.h" 28 29namespace art { 30namespace mirror { 31 class Class; 32 class Object; 33 template<class MirrorType> class HeapReference; 34 class Reference; 35} // namespace mirror 36class StackVisitor; 37 38enum RootType { 39 kRootUnknown = 0, 40 kRootJNIGlobal, 41 kRootJNILocal, 42 kRootJavaFrame, 43 kRootNativeStack, 44 kRootStickyClass, 45 kRootThreadBlock, 46 kRootMonitorUsed, 47 kRootThreadObject, 48 kRootInternedString, 49 kRootDebugger, 50 kRootVMInternal, 51 kRootJNIMonitor, 52}; 53std::ostream& operator<<(std::ostream& os, const RootType& root_type); 54 55// Returns the new address of the object, returns root if it has not moved. tid and root_type are 56// only used by hprof. 57typedef void (RootCallback)(mirror::Object** root, void* arg, uint32_t thread_id, 58 RootType root_type); 59// A callback for visiting an object in the heap. 60typedef void (ObjectCallback)(mirror::Object* obj, void* arg); 61// A callback used for marking an object, returns the new address of the object if the object moved. 62typedef mirror::Object* (MarkObjectCallback)(mirror::Object* obj, void* arg) WARN_UNUSED; 63// A callback for verifying roots. 64typedef void (VerifyRootCallback)(const mirror::Object* root, void* arg, size_t vreg, 65 const StackVisitor* visitor, RootType root_type); 66 67typedef void (MarkHeapReferenceCallback)(mirror::HeapReference<mirror::Object>* ref, void* arg); 68typedef void (DelayReferenceReferentCallback)(mirror::Class* klass, mirror::Reference* ref, void* arg); 69 70// A callback for testing if an object is marked, returns nullptr if not marked, otherwise the new 71// address the object (if the object didn't move, returns the object input parameter). 72typedef mirror::Object* (IsMarkedCallback)(mirror::Object* object, void* arg) WARN_UNUSED; 73 74// Returns true if the object in the heap reference is marked, if it is marked and has moved the 75// callback updates the heap reference contain the new value. 76typedef bool (IsHeapReferenceMarkedCallback)(mirror::HeapReference<mirror::Object>* object, 77 void* arg) WARN_UNUSED; 78typedef void (ProcessMarkStackCallback)(void* arg); 79 80} // namespace art 81 82#endif // ART_RUNTIME_OBJECT_CALLBACKS_H_ 83