| /* |
| * 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\n", 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 }, |
| }; |
| |