diff options
Diffstat (limited to 'vm/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cpp')
-rw-r--r-- | vm/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cpp | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/vm/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cpp b/vm/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cpp new file mode 100644 index 0000000..eed8ce1 --- /dev/null +++ b/vm/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cpp @@ -0,0 +1,169 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * org.apache.harmony.dalvik.ddmc.DdmVmInternal + */ +#include "Dalvik.h" +#include "native/InternalNativePriv.h" + + +/* + * public static void threadNotify(boolean enable) + * + * Enable DDM thread notifications. + */ +static void Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_threadNotify( + const u4* args, JValue* pResult) +{ + bool enable = (args[0] != 0); + + //LOGI("ddmThreadNotification: %d", enable); + dvmDdmSetThreadNotification(enable); + RETURN_VOID(); +} + +/* + * public static byte[] getThreadStats() + * + * Get a buffer full of thread info. + */ +static void Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_getThreadStats( + const u4* args, JValue* pResult) +{ + UNUSED_PARAMETER(args); + + ArrayObject* result = dvmDdmGenerateThreadStats(); + dvmReleaseTrackedAlloc((Object*) result, NULL); + RETURN_PTR(result); +} + +/* + * public static int heapInfoNotify(int what) + * + * Enable DDM heap notifications. + */ +static void Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_heapInfoNotify( + const u4* args, JValue* pResult) +{ + int when = args[0]; + bool ret; + + ret = dvmDdmHandleHpifChunk(when); + RETURN_BOOLEAN(ret); +} + +/* + * public static boolean heapSegmentNotify(int when, int what, bool native) + * + * Enable DDM heap notifications. + */ +static void + Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_heapSegmentNotify( + const u4* args, JValue* pResult) +{ + int when = args[0]; // 0=never (off), 1=during GC + int what = args[1]; // 0=merged objects, 1=distinct objects + bool native = (args[2] != 0); // false=virtual heap, true=native heap + bool ret; + + ret = dvmDdmHandleHpsgNhsgChunk(when, what, native); + RETURN_BOOLEAN(ret); +} + +/* + * public static StackTraceElement[] getStackTraceById(int threadId) + * + * Get a stack trace as an array of StackTraceElement objects. Returns + * NULL on failure, e.g. if the threadId couldn't be found. + */ +static void + Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_getStackTraceById( + const u4* args, JValue* pResult) +{ + u4 threadId = args[0]; + ArrayObject* trace; + + trace = dvmDdmGetStackTraceById(threadId); + RETURN_PTR(trace); +} + +/* + * public static void enableRecentAllocations(boolean enable) + * + * Enable or disable recent allocation tracking. + */ +static void + Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_enableRecentAllocations( + const u4* args, JValue* pResult) +{ + bool enable = (args[0] != 0); + + if (enable) + (void) dvmEnableAllocTracker(); + else + (void) dvmDisableAllocTracker(); + RETURN_VOID(); +} + +/* + * public static boolean getRecentAllocationStatus() + * + * Returns "true" if allocation tracking is enabled. + */ +static void + Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_getRecentAllocationStatus( + const u4* args, JValue* pResult) +{ + UNUSED_PARAMETER(args); + RETURN_BOOLEAN(gDvm.allocRecords != NULL); +} + +/* + * public static byte[] getRecentAllocations() + * + * Fill a buffer with data on recent heap allocations. + */ +static void + Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_getRecentAllocations( + const u4* args, JValue* pResult) +{ + ArrayObject* data; + + data = dvmDdmGetRecentAllocations(); + dvmReleaseTrackedAlloc((Object*) data, NULL); + RETURN_PTR(data); +} + +const DalvikNativeMethod dvm_org_apache_harmony_dalvik_ddmc_DdmVmInternal[] = { + { "threadNotify", "(Z)V", + Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_threadNotify }, + { "getThreadStats", "()[B", + Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_getThreadStats }, + { "heapInfoNotify", "(I)Z", + Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_heapInfoNotify }, + { "heapSegmentNotify", "(IIZ)Z", + Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_heapSegmentNotify }, + { "getStackTraceById", "(I)[Ljava/lang/StackTraceElement;", + Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_getStackTraceById }, + { "enableRecentAllocations", "(Z)V", + Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_enableRecentAllocations }, + { "getRecentAllocationStatus", "()Z", + Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_getRecentAllocationStatus }, + { "getRecentAllocations", "()[B", + Dalvik_org_apache_harmony_dalvik_ddmc_DdmVmInternal_getRecentAllocations }, + { NULL, NULL, NULL }, +}; |