Remove unused code from dalvik.system.VMDebug.
Test: m
Bug: 165361458
Change-Id: Ic2cc2515a0af79d4541c16c0b3057980ada2a869
diff --git a/runtime/gc/heap.cc b/runtime/gc/heap.cc
index fcf4afc..84d0351 100644
--- a/runtime/gc/heap.cc
+++ b/runtime/gc/heap.cc
@@ -1984,67 +1984,6 @@
VisitObjects(instance_counter);
}
-void Heap::GetInstances(VariableSizedHandleScope& scope,
- Handle<mirror::Class> h_class,
- bool use_is_assignable_from,
- int32_t max_count,
- std::vector<Handle<mirror::Object>>& instances) {
- DCHECK_GE(max_count, 0);
- auto instance_collector = [&](mirror::Object* obj) REQUIRES_SHARED(Locks::mutator_lock_) {
- if (MatchesClass(obj, h_class, use_is_assignable_from)) {
- if (max_count == 0 || instances.size() < static_cast<size_t>(max_count)) {
- instances.push_back(scope.NewHandle(obj));
- }
- }
- };
- VisitObjects(instance_collector);
-}
-
-void Heap::GetReferringObjects(VariableSizedHandleScope& scope,
- Handle<mirror::Object> o,
- int32_t max_count,
- std::vector<Handle<mirror::Object>>& referring_objects) {
- class ReferringObjectsFinder {
- public:
- ReferringObjectsFinder(VariableSizedHandleScope& scope_in,
- Handle<mirror::Object> object_in,
- int32_t max_count_in,
- std::vector<Handle<mirror::Object>>& referring_objects_in)
- REQUIRES_SHARED(Locks::mutator_lock_)
- : scope_(scope_in),
- object_(object_in),
- max_count_(max_count_in),
- referring_objects_(referring_objects_in) {}
-
- // For Object::VisitReferences.
- void operator()(ObjPtr<mirror::Object> obj,
- MemberOffset offset,
- bool is_static ATTRIBUTE_UNUSED) const
- REQUIRES_SHARED(Locks::mutator_lock_) {
- mirror::Object* ref = obj->GetFieldObject<mirror::Object>(offset);
- if (ref == object_.Get() && (max_count_ == 0 || referring_objects_.size() < max_count_)) {
- referring_objects_.push_back(scope_.NewHandle(obj));
- }
- }
-
- void VisitRootIfNonNull(mirror::CompressedReference<mirror::Object>* root ATTRIBUTE_UNUSED)
- const {}
- void VisitRoot(mirror::CompressedReference<mirror::Object>* root ATTRIBUTE_UNUSED) const {}
-
- private:
- VariableSizedHandleScope& scope_;
- Handle<mirror::Object> const object_;
- const uint32_t max_count_;
- std::vector<Handle<mirror::Object>>& referring_objects_;
- DISALLOW_COPY_AND_ASSIGN(ReferringObjectsFinder);
- };
- ReferringObjectsFinder finder(scope, o, max_count, referring_objects);
- auto referring_objects_finder = [&](mirror::Object* obj) REQUIRES_SHARED(Locks::mutator_lock_) {
- obj->VisitReferences(finder, VoidFunctor());
- };
- VisitObjects(referring_objects_finder);
-}
-
void Heap::CollectGarbage(bool clear_soft_references, GcCause cause) {
// Even if we waited for a GC we still need to do another GC since weaks allocated during the
// last GC will not have necessarily been cleared.
diff --git a/runtime/gc/heap.h b/runtime/gc/heap.h
index 9f558f3..65d0837 100644
--- a/runtime/gc/heap.h
+++ b/runtime/gc/heap.h
@@ -395,23 +395,6 @@
REQUIRES(!Locks::heap_bitmap_lock_, !*gc_complete_lock_)
REQUIRES_SHARED(Locks::mutator_lock_);
- // Implements VMDebug.getInstancesOfClasses and JDWP RT_Instances.
- void GetInstances(VariableSizedHandleScope& scope,
- Handle<mirror::Class> c,
- bool use_is_assignable_from,
- int32_t max_count,
- std::vector<Handle<mirror::Object>>& instances)
- REQUIRES(!Locks::heap_bitmap_lock_, !*gc_complete_lock_)
- REQUIRES_SHARED(Locks::mutator_lock_);
-
- // Implements JDWP OR_ReferringObjects.
- void GetReferringObjects(VariableSizedHandleScope& scope,
- Handle<mirror::Object> o,
- int32_t max_count,
- std::vector<Handle<mirror::Object>>& referring_objects)
- REQUIRES(!Locks::heap_bitmap_lock_, !*gc_complete_lock_)
- REQUIRES_SHARED(Locks::mutator_lock_);
-
// Removes the growth limit on the alloc space so it may grow to its maximum capacity. Used to
// implement dalvik.system.VMRuntime.clearGrowthLimit.
void ClearGrowthLimit();
diff --git a/runtime/native/dalvik_system_VMDebug.cc b/runtime/native/dalvik_system_VMDebug.cc
index a090f35..d1683a9 100644
--- a/runtime/native/dalvik_system_VMDebug.cc
+++ b/runtime/native/dalvik_system_VMDebug.cc
@@ -178,27 +178,6 @@
return -1;
}
-static void ThrowUnsupportedOperationException(JNIEnv* env) {
- ScopedObjectAccess soa(env);
- soa.Self()->ThrowNewException("Ljava/lang/UnsupportedOperationException;", nullptr);
-}
-
-static void VMDebug_startInstructionCounting(JNIEnv* env, jclass) {
- ThrowUnsupportedOperationException(env);
-}
-
-static void VMDebug_stopInstructionCounting(JNIEnv* env, jclass) {
- ThrowUnsupportedOperationException(env);
-}
-
-static void VMDebug_getInstructionCount(JNIEnv* env, jclass, jintArray /*javaCounts*/) {
- ThrowUnsupportedOperationException(env);
-}
-
-static void VMDebug_resetInstructionCount(JNIEnv* env, jclass) {
- ThrowUnsupportedOperationException(env);
-}
-
static void VMDebug_printLoadedClasses(JNIEnv* env, jclass, jint flags) {
class DumpClassVisitor : public ClassVisitor {
public:
@@ -275,14 +254,6 @@
LOG(INFO) << "---";
}
-static void VMDebug_crash(JNIEnv*, jclass) {
- LOG(FATAL) << "Crashing runtime on request";
-}
-
-static void VMDebug_infopoint(JNIEnv*, jclass, jint id) {
- LOG(INFO) << "VMDebug infopoint " << id << " hit";
-}
-
static jlong VMDebug_countInstancesOfClass(JNIEnv* env,
jclass,
jclass javaClass,
@@ -332,123 +303,6 @@
return soa.AddLocalReference<jlongArray>(long_counts);
}
-static jobjectArray VMDebug_getInstancesOfClasses(JNIEnv* env,
- jclass,
- jobjectArray javaClasses,
- jboolean includeAssignable) {
- ScopedObjectAccess soa(env);
- StackHandleScope<2> hs(soa.Self());
- Handle<mirror::ObjectArray<mirror::Class>> classes = hs.NewHandle(
- soa.Decode<mirror::ObjectArray<mirror::Class>>(javaClasses));
- if (classes == nullptr) {
- return nullptr;
- }
-
- jclass object_array_class = env->FindClass("[Ljava/lang/Object;");
- if (env->ExceptionCheck() == JNI_TRUE) {
- return nullptr;
- }
- CHECK(object_array_class != nullptr);
-
- size_t num_classes = classes->GetLength();
- jobjectArray result = env->NewObjectArray(num_classes, object_array_class, nullptr);
- if (env->ExceptionCheck() == JNI_TRUE) {
- return nullptr;
- }
-
- gc::Heap* const heap = Runtime::Current()->GetHeap();
- MutableHandle<mirror::Class> h_class(hs.NewHandle<mirror::Class>(nullptr));
- for (size_t i = 0; i < num_classes; ++i) {
- h_class.Assign(classes->Get(i));
-
- VariableSizedHandleScope hs2(soa.Self());
- std::vector<Handle<mirror::Object>> raw_instances;
- heap->GetInstances(hs2, h_class, includeAssignable, /* max_count= */ 0, raw_instances);
- jobjectArray array = env->NewObjectArray(raw_instances.size(),
- WellKnownClasses::java_lang_Object,
- nullptr);
- if (env->ExceptionCheck() == JNI_TRUE) {
- return nullptr;
- }
-
- for (size_t j = 0; j < raw_instances.size(); ++j) {
- env->SetObjectArrayElement(array, j, raw_instances[j].ToJObject());
- }
- env->SetObjectArrayElement(result, i, array);
- }
- return result;
-}
-
-// We export the VM internal per-heap-space size/alloc/free metrics
-// for the zygote space, alloc space (application heap), and the large
-// object space for dumpsys meminfo. The other memory region data such
-// as PSS, private/shared dirty/shared data are available via
-// /proc/<pid>/smaps.
-static void VMDebug_getHeapSpaceStats(JNIEnv* env, jclass, jlongArray data) {
- jlong* arr = reinterpret_cast<jlong*>(env->GetPrimitiveArrayCritical(data, nullptr));
- if (arr == nullptr || env->GetArrayLength(data) < 9) {
- return;
- }
-
- size_t allocSize = 0;
- size_t allocUsed = 0;
- size_t zygoteSize = 0;
- size_t zygoteUsed = 0;
- size_t largeObjectsSize = 0;
- size_t largeObjectsUsed = 0;
- gc::Heap* heap = Runtime::Current()->GetHeap();
- {
- ScopedObjectAccess soa(env);
- for (gc::space::ContinuousSpace* space : heap->GetContinuousSpaces()) {
- if (space->IsImageSpace()) {
- // Currently don't include the image space.
- } else if (space->IsZygoteSpace()) {
- gc::space::ZygoteSpace* zygote_space = space->AsZygoteSpace();
- zygoteSize += zygote_space->Size();
- zygoteUsed += zygote_space->GetBytesAllocated();
- } else if (space->IsMallocSpace()) {
- // This is a malloc space.
- gc::space::MallocSpace* malloc_space = space->AsMallocSpace();
- allocSize += malloc_space->GetFootprint();
- allocUsed += malloc_space->GetBytesAllocated();
- } else if (space->IsBumpPointerSpace()) {
- gc::space::BumpPointerSpace* bump_pointer_space = space->AsBumpPointerSpace();
- allocSize += bump_pointer_space->Size();
- allocUsed += bump_pointer_space->GetBytesAllocated();
- } else if (space->IsRegionSpace()) {
- gc::space::RegionSpace* region_space = space->AsRegionSpace();
- // When using the concurrent copying garbage collector, the corresponding allocation space
- // uses a region space. The memory actually requested for the region space is to allow for
- // a from-space and a to-space, and their sum is twice the actual available space. So here
- // we need to divide by 2 to get the actual space size that can be used.
- allocSize += region_space->Size() / 2;
- allocUsed += region_space->GetBytesAllocated();
- }
- }
- for (gc::space::DiscontinuousSpace* space : heap->GetDiscontinuousSpaces()) {
- if (space->IsLargeObjectSpace()) {
- largeObjectsSize += space->AsLargeObjectSpace()->GetBytesAllocated();
- largeObjectsUsed += largeObjectsSize;
- }
- }
- }
- size_t allocFree = allocSize - allocUsed;
- size_t zygoteFree = zygoteSize - zygoteUsed;
- size_t largeObjectsFree = largeObjectsSize - largeObjectsUsed;
-
- int j = 0;
- arr[j++] = allocSize;
- arr[j++] = allocUsed;
- arr[j++] = allocFree;
- arr[j++] = zygoteSize;
- arr[j++] = zygoteUsed;
- arr[j++] = zygoteFree;
- arr[j++] = largeObjectsSize;
- arr[j++] = largeObjectsUsed;
- arr[j++] = largeObjectsFree;
- env->ReleasePrimitiveArrayCritical(data, arr, 0);
-}
-
// The runtime stat names for VMDebug.getRuntimeStat().
enum class VMDebugRuntimeStatId {
kArtGcGcCount = 0,
@@ -628,31 +482,23 @@
static JNINativeMethod gMethods[] = {
NATIVE_METHOD(VMDebug, countInstancesOfClass, "(Ljava/lang/Class;Z)J"),
NATIVE_METHOD(VMDebug, countInstancesOfClasses, "([Ljava/lang/Class;Z)[J"),
- NATIVE_METHOD(VMDebug, crash, "()V"),
NATIVE_METHOD(VMDebug, dumpHprofData, "(Ljava/lang/String;I)V"),
NATIVE_METHOD(VMDebug, dumpHprofDataDdms, "()V"),
NATIVE_METHOD(VMDebug, dumpReferenceTables, "()V"),
NATIVE_METHOD(VMDebug, getAllocCount, "(I)I"),
- NATIVE_METHOD(VMDebug, getHeapSpaceStats, "([J)V"),
- NATIVE_METHOD(VMDebug, getInstancesOfClasses, "([Ljava/lang/Class;Z)[[Ljava/lang/Object;"),
- NATIVE_METHOD(VMDebug, getInstructionCount, "([I)V"),
FAST_NATIVE_METHOD(VMDebug, getLoadedClassCount, "()I"),
NATIVE_METHOD(VMDebug, getVmFeatureList, "()[Ljava/lang/String;"),
- NATIVE_METHOD(VMDebug, infopoint, "(I)V"),
FAST_NATIVE_METHOD(VMDebug, isDebuggerConnected, "()Z"),
FAST_NATIVE_METHOD(VMDebug, isDebuggingEnabled, "()Z"),
NATIVE_METHOD(VMDebug, getMethodTracingMode, "()I"),
FAST_NATIVE_METHOD(VMDebug, lastDebuggerActivity, "()J"),
FAST_NATIVE_METHOD(VMDebug, printLoadedClasses, "(I)V"),
NATIVE_METHOD(VMDebug, resetAllocCount, "(I)V"),
- NATIVE_METHOD(VMDebug, resetInstructionCount, "()V"),
NATIVE_METHOD(VMDebug, startAllocCounting, "()V"),
- NATIVE_METHOD(VMDebug, startInstructionCounting, "()V"),
NATIVE_METHOD(VMDebug, startMethodTracingDdmsImpl, "(IIZI)V"),
NATIVE_METHOD(VMDebug, startMethodTracingFd, "(Ljava/lang/String;IIIZIZ)V"),
NATIVE_METHOD(VMDebug, startMethodTracingFilename, "(Ljava/lang/String;IIZI)V"),
NATIVE_METHOD(VMDebug, stopAllocCounting, "()V"),
- NATIVE_METHOD(VMDebug, stopInstructionCounting, "()V"),
NATIVE_METHOD(VMDebug, stopMethodTracing, "()V"),
FAST_NATIVE_METHOD(VMDebug, threadCpuTimeNanos, "()J"),
NATIVE_METHOD(VMDebug, getRuntimeStatInternal, "(I)Ljava/lang/String;"),
diff --git a/test/099-vmdebug/expected.txt b/test/099-vmdebug/expected.txt
index f7801de..b8d72f6 100644
--- a/test/099-vmdebug/expected.txt
+++ b/test/099-vmdebug/expected.txt
@@ -23,9 +23,3 @@
Instances of ClassA assignable 3
Array counts [2, 1, 0]
Array counts assignable [3, 1, 0]
-ClassD got 3, combined mask: 13
-ClassE got 2, combined mask: 18
-null got 0
-ClassD assignable got 5, combined mask: 31
-ClassE assignable got 2, combined mask: 18
-null assignable got 0
diff --git a/test/099-vmdebug/src/Main.java b/test/099-vmdebug/src/Main.java
index e0d829a..8fed123 100644
--- a/test/099-vmdebug/src/Main.java
+++ b/test/099-vmdebug/src/Main.java
@@ -33,7 +33,6 @@
}
testMethodTracing();
testCountInstances();
- testGetInstances();
testRuntimeStat();
testRuntimeStats();
}
@@ -264,45 +263,6 @@
}
}
- private static void testGetInstances() throws Exception {
- ArrayList<Object> l = new ArrayList<Object>();
- l.add(new ClassD(0x01));
- l.add(new ClassE(0x02));
- l.add(new ClassD(0x04));
- l.add(new ClassD(0x08));
- l.add(new ClassE(0x10));
- Runtime.getRuntime().gc();
- Class<?>[] classes = new Class<?>[] {ClassD.class, ClassE.class, null};
- Object[][] instances = VMDebug.getInstancesOfClasses(classes, false);
-
- int mask = 0;
- for (Object instance : instances[0]) {
- mask |= ((ClassD)instance).mask;
- }
- System.out.println("ClassD got " + instances[0].length + ", combined mask: " + mask);
-
- mask = 0;
- for (Object instance : instances[1]) {
- mask |= ((ClassD)instance).mask;
- }
- System.out.println("ClassE got " + instances[1].length + ", combined mask: " + mask);
- System.out.println("null got " + instances[2].length);
-
- instances = VMDebug.getInstancesOfClasses(classes, true);
- mask = 0;
- for (Object instance : instances[0]) {
- mask |= ((ClassD)instance).mask;
- }
- System.out.println("ClassD assignable got " + instances[0].length + ", combined mask: " + mask);
-
- mask = 0;
- for (Object instance : instances[1]) {
- mask |= ((ClassD)instance).mask;
- }
- System.out.println("ClassE assignable got " + instances[1].length + ", combined mask: " + mask);
- System.out.println("null assignable got " + instances[2].length);
- }
-
private static class VMDebug {
private static final Method startMethodTracingMethod;
private static final Method stopMethodTracingMethod;
@@ -311,7 +271,6 @@
private static final Method getRuntimeStatsMethod;
private static final Method countInstancesOfClassMethod;
private static final Method countInstancesOfClassesMethod;
- private static final Method getInstancesOfClassesMethod;
static {
try {
Class<?> c = Class.forName("dalvik.system.VMDebug");
@@ -325,8 +284,6 @@
Class.class, Boolean.TYPE);
countInstancesOfClassesMethod = c.getDeclaredMethod("countInstancesOfClasses",
Class[].class, Boolean.TYPE);
- getInstancesOfClassesMethod = c.getDeclaredMethod("getInstancesOfClasses",
- Class[].class, Boolean.TYPE);
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -357,9 +314,5 @@
return (long[]) countInstancesOfClassesMethod.invoke(
null, new Object[]{classes, assignable});
}
- public static Object[][] getInstancesOfClasses(Class<?>[] classes, boolean assignable) throws Exception {
- return (Object[][]) getInstancesOfClassesMethod.invoke(
- null, new Object[]{classes, assignable});
- }
}
}