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 29 namespace art { 30 namespace mirror { 31 class Class; 32 class Object; 33 template<class MirrorType> class HeapReference; 34 class Reference; 35 } // namespace mirror 36 class StackVisitor; 37 38 enum 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 }; 53 std::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. 57 typedef 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. 60 typedef 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. 62 typedef mirror::Object* (MarkObjectCallback)(mirror::Object* obj, void* arg) WARN_UNUSED; 63 // A callback for verifying roots. 64 typedef void (VerifyRootCallback)(const mirror::Object* root, void* arg, size_t vreg, 65 const StackVisitor* visitor, RootType root_type); 66 67 typedef void (MarkHeapReferenceCallback)(mirror::HeapReference<mirror::Object>* ref, void* arg); 68 typedef 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). 72 typedef 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. 76 typedef bool (IsHeapReferenceMarkedCallback)(mirror::HeapReference<mirror::Object>* object, 77 void* arg) WARN_UNUSED; 78 typedef void (ProcessMarkStackCallback)(void* arg); 79 80 } // namespace art 81 82 #endif // ART_RUNTIME_OBJECT_CALLBACKS_H_ 83