1673 |
1673 |
1674 Thread *thread = Thread::current(); |
1674 Thread *thread = Thread::current(); |
1675 HandleMark hm(thread); |
1675 HandleMark hm(thread); |
1676 KlassHandle kh (thread, k_oop); |
1676 KlassHandle kh (thread, k_oop); |
1677 |
1677 |
1678 TraceTime t("FollowReferences", TraceJVMTIObjectTagging); |
1678 TraceTime t("FollowReferences", TRACETIME_LOG(Debug, jvmti, objecttagging)); |
1679 JvmtiTagMap::tag_map_for(this)->follow_references(heap_filter, kh, initial_object, callbacks, user_data); |
1679 JvmtiTagMap::tag_map_for(this)->follow_references(heap_filter, kh, initial_object, callbacks, user_data); |
1680 return JVMTI_ERROR_NONE; |
1680 return JVMTI_ERROR_NONE; |
1681 } /* end FollowReferences */ |
1681 } /* end FollowReferences */ |
1682 |
1682 |
1683 |
1683 |
1704 |
1704 |
1705 Thread *thread = Thread::current(); |
1705 Thread *thread = Thread::current(); |
1706 HandleMark hm(thread); |
1706 HandleMark hm(thread); |
1707 KlassHandle kh (thread, k_oop); |
1707 KlassHandle kh (thread, k_oop); |
1708 |
1708 |
1709 TraceTime t("IterateThroughHeap", TraceJVMTIObjectTagging); |
1709 TraceTime t("IterateThroughHeap", TRACETIME_LOG(Debug, jvmti, objecttagging)); |
1710 JvmtiTagMap::tag_map_for(this)->iterate_through_heap(heap_filter, kh, callbacks, user_data); |
1710 JvmtiTagMap::tag_map_for(this)->iterate_through_heap(heap_filter, kh, callbacks, user_data); |
1711 return JVMTI_ERROR_NONE; |
1711 return JVMTI_ERROR_NONE; |
1712 } /* end IterateThroughHeap */ |
1712 } /* end IterateThroughHeap */ |
1713 |
1713 |
1714 |
1714 |
1736 // count_ptr - pre-checked for NULL |
1736 // count_ptr - pre-checked for NULL |
1737 // object_result_ptr - NULL is a valid value, must be checked |
1737 // object_result_ptr - NULL is a valid value, must be checked |
1738 // tag_result_ptr - NULL is a valid value, must be checked |
1738 // tag_result_ptr - NULL is a valid value, must be checked |
1739 jvmtiError |
1739 jvmtiError |
1740 JvmtiEnv::GetObjectsWithTags(jint tag_count, const jlong* tags, jint* count_ptr, jobject** object_result_ptr, jlong** tag_result_ptr) { |
1740 JvmtiEnv::GetObjectsWithTags(jint tag_count, const jlong* tags, jint* count_ptr, jobject** object_result_ptr, jlong** tag_result_ptr) { |
1741 TraceTime t("GetObjectsWithTags", TraceJVMTIObjectTagging); |
1741 TraceTime t("GetObjectsWithTags", TRACETIME_LOG(Debug, jvmti, objecttagging)); |
1742 return JvmtiTagMap::tag_map_for(this)->get_objects_with_tags((jlong*)tags, tag_count, count_ptr, object_result_ptr, tag_result_ptr); |
1742 return JvmtiTagMap::tag_map_for(this)->get_objects_with_tags((jlong*)tags, tag_count, count_ptr, object_result_ptr, tag_result_ptr); |
1743 } /* end GetObjectsWithTags */ |
1743 } /* end GetObjectsWithTags */ |
1744 |
1744 |
1745 |
1745 |
1746 jvmtiError |
1746 jvmtiError |
1769 // stack_ref_callback - NULL is a valid value, must be checked |
1769 // stack_ref_callback - NULL is a valid value, must be checked |
1770 // object_ref_callback - NULL is a valid value, must be checked |
1770 // object_ref_callback - NULL is a valid value, must be checked |
1771 // user_data - NULL is a valid value, must be checked |
1771 // user_data - NULL is a valid value, must be checked |
1772 jvmtiError |
1772 jvmtiError |
1773 JvmtiEnv::IterateOverReachableObjects(jvmtiHeapRootCallback heap_root_callback, jvmtiStackReferenceCallback stack_ref_callback, jvmtiObjectReferenceCallback object_ref_callback, const void* user_data) { |
1773 JvmtiEnv::IterateOverReachableObjects(jvmtiHeapRootCallback heap_root_callback, jvmtiStackReferenceCallback stack_ref_callback, jvmtiObjectReferenceCallback object_ref_callback, const void* user_data) { |
1774 TraceTime t("IterateOverReachableObjects", TraceJVMTIObjectTagging); |
1774 TraceTime t("IterateOverReachableObjects", TRACETIME_LOG(Debug, jvmti, objecttagging)); |
1775 JvmtiTagMap::tag_map_for(this)->iterate_over_reachable_objects(heap_root_callback, stack_ref_callback, object_ref_callback, user_data); |
1775 JvmtiTagMap::tag_map_for(this)->iterate_over_reachable_objects(heap_root_callback, stack_ref_callback, object_ref_callback, user_data); |
1776 return JVMTI_ERROR_NONE; |
1776 return JVMTI_ERROR_NONE; |
1777 } /* end IterateOverReachableObjects */ |
1777 } /* end IterateOverReachableObjects */ |
1778 |
1778 |
1779 |
1779 |
1780 // heap_object_callback - pre-checked for NULL |
1780 // heap_object_callback - pre-checked for NULL |
1781 // user_data - NULL is a valid value, must be checked |
1781 // user_data - NULL is a valid value, must be checked |
1782 jvmtiError |
1782 jvmtiError |
1783 JvmtiEnv::IterateOverHeap(jvmtiHeapObjectFilter object_filter, jvmtiHeapObjectCallback heap_object_callback, const void* user_data) { |
1783 JvmtiEnv::IterateOverHeap(jvmtiHeapObjectFilter object_filter, jvmtiHeapObjectCallback heap_object_callback, const void* user_data) { |
1784 TraceTime t("IterateOverHeap", TraceJVMTIObjectTagging); |
1784 TraceTime t("IterateOverHeap", TRACETIME_LOG(Debug, jvmti, objecttagging)); |
1785 Thread *thread = Thread::current(); |
1785 Thread *thread = Thread::current(); |
1786 HandleMark hm(thread); |
1786 HandleMark hm(thread); |
1787 JvmtiTagMap::tag_map_for(this)->iterate_over_heap(object_filter, KlassHandle(), heap_object_callback, user_data); |
1787 JvmtiTagMap::tag_map_for(this)->iterate_over_heap(object_filter, KlassHandle(), heap_object_callback, user_data); |
1788 return JVMTI_ERROR_NONE; |
1788 return JVMTI_ERROR_NONE; |
1789 } /* end IterateOverHeap */ |
1789 } /* end IterateOverHeap */ |
1803 return JVMTI_ERROR_INVALID_CLASS; |
1803 return JVMTI_ERROR_INVALID_CLASS; |
1804 } |
1804 } |
1805 Thread *thread = Thread::current(); |
1805 Thread *thread = Thread::current(); |
1806 HandleMark hm(thread); |
1806 HandleMark hm(thread); |
1807 KlassHandle klass (thread, k_oop); |
1807 KlassHandle klass (thread, k_oop); |
1808 TraceTime t("IterateOverInstancesOfClass", TraceJVMTIObjectTagging); |
1808 TraceTime t("IterateOverInstancesOfClass", TRACETIME_LOG(Debug, jvmti, objecttagging)); |
1809 JvmtiTagMap::tag_map_for(this)->iterate_over_heap(object_filter, klass, heap_object_callback, user_data); |
1809 JvmtiTagMap::tag_map_for(this)->iterate_over_heap(object_filter, klass, heap_object_callback, user_data); |
1810 return JVMTI_ERROR_NONE; |
1810 return JVMTI_ERROR_NONE; |
1811 } /* end IterateOverInstancesOfClass */ |
1811 } /* end IterateOverInstancesOfClass */ |
1812 |
1812 |
1813 |
1813 |