提交 08a42356 编写于 作者: J jiangli

Merge

...@@ -25,7 +25,7 @@ ifeq ($(INCLUDE_JVMTI), false) ...@@ -25,7 +25,7 @@ ifeq ($(INCLUDE_JVMTI), false)
CXXFLAGS += -DINCLUDE_JVMTI=0 CXXFLAGS += -DINCLUDE_JVMTI=0
CFLAGS += -DINCLUDE_JVMTI=0 CFLAGS += -DINCLUDE_JVMTI=0
Src_Files_EXCLUDE += jvmtiGetLoadedClasses.cpp forte.cpp jvmtiThreadState.cpp jvmtiExtensions.cpp \ Src_Files_EXCLUDE += jvmtiGetLoadedClasses.cpp jvmtiThreadState.cpp jvmtiExtensions.cpp \
jvmtiImpl.cpp jvmtiManageCapabilities.cpp jvmtiRawMonitor.cpp jvmtiUtil.cpp jvmtiTrace.cpp \ jvmtiImpl.cpp jvmtiManageCapabilities.cpp jvmtiRawMonitor.cpp jvmtiUtil.cpp jvmtiTrace.cpp \
jvmtiCodeBlobEvents.cpp jvmtiEnv.cpp jvmtiRedefineClasses.cpp jvmtiEnvBase.cpp jvmtiEnvThreadState.cpp \ jvmtiCodeBlobEvents.cpp jvmtiEnv.cpp jvmtiRedefineClasses.cpp jvmtiEnvBase.cpp jvmtiEnvThreadState.cpp \
jvmtiTagMap.cpp jvmtiEventController.cpp evmCompat.cpp jvmtiEnter.xsl jvmtiExport.cpp \ jvmtiTagMap.cpp jvmtiEventController.cpp evmCompat.cpp jvmtiEnter.xsl jvmtiExport.cpp \
......
...@@ -35,6 +35,19 @@ ...@@ -35,6 +35,19 @@
#include "runtime/vframe.hpp" #include "runtime/vframe.hpp"
#include "runtime/vframeArray.hpp" #include "runtime/vframeArray.hpp"
// call frame copied from old .h file and renamed
typedef struct {
jint lineno; // line number in the source file
jmethodID method_id; // method executed in this frame
} ASGCT_CallFrame;
// call trace copied from old .h file and renamed
typedef struct {
JNIEnv *env_id; // Env where trace was recorded
jint num_frames; // number of frames in this trace
ASGCT_CallFrame *frames; // frames
} ASGCT_CallTrace;
// These name match the names reported by the forte quality kit // These name match the names reported by the forte quality kit
enum { enum {
ticks_no_Java_frame = 0, ticks_no_Java_frame = 0,
...@@ -50,6 +63,8 @@ enum { ...@@ -50,6 +63,8 @@ enum {
ticks_safepoint = -10 ticks_safepoint = -10
}; };
#if INCLUDE_JVMTI
//------------------------------------------------------- //-------------------------------------------------------
// Native interfaces for use by Forte tools. // Native interfaces for use by Forte tools.
...@@ -360,20 +375,6 @@ static bool find_initial_Java_frame(JavaThread* thread, ...@@ -360,20 +375,6 @@ static bool find_initial_Java_frame(JavaThread* thread,
} }
// call frame copied from old .h file and renamed
typedef struct {
jint lineno; // line number in the source file
jmethodID method_id; // method executed in this frame
} ASGCT_CallFrame;
// call trace copied from old .h file and renamed
typedef struct {
JNIEnv *env_id; // Env where trace was recorded
jint num_frames; // number of frames in this trace
ASGCT_CallFrame *frames; // frames
} ASGCT_CallTrace;
static void forte_fill_call_trace_given_top(JavaThread* thd, static void forte_fill_call_trace_given_top(JavaThread* thd,
ASGCT_CallTrace* trace, ASGCT_CallTrace* trace,
int depth, int depth,
...@@ -634,3 +635,12 @@ void Forte::register_stub(const char* name, address start, address end) { ...@@ -634,3 +635,12 @@ void Forte::register_stub(const char* name, address start, address end) {
pointer_delta(end, start, sizeof(jbyte)), 0, NULL); pointer_delta(end, start, sizeof(jbyte)), 0, NULL);
#endif // !_WINDOWS && !IA64 #endif // !_WINDOWS && !IA64
} }
#else // INCLUDE_JVMTI
extern "C" {
JNIEXPORT
void AsyncGetCallTrace(ASGCT_CallTrace *trace, jint depth, void* ucontext) {
trace->num_frames = ticks_no_class_load; // -1
}
}
#endif // INCLUDE_JVMTI
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "services/memReporter.hpp" #include "services/memReporter.hpp"
#include "services/memTracker.hpp" #include "services/memTracker.hpp"
#include "utilities/decoder.hpp" #include "utilities/decoder.hpp"
#include "utilities/defaultStream.hpp"
#include "utilities/globalDefinitions.hpp" #include "utilities/globalDefinitions.hpp"
bool NMT_track_callsite = false; bool NMT_track_callsite = false;
...@@ -77,7 +78,15 @@ void MemTracker::init_tracking_options(const char* option_line) { ...@@ -77,7 +78,15 @@ void MemTracker::init_tracking_options(const char* option_line) {
if (strcmp(option_line, "=summary") == 0) { if (strcmp(option_line, "=summary") == 0) {
_tracking_level = NMT_summary; _tracking_level = NMT_summary;
} else if (strcmp(option_line, "=detail") == 0) { } else if (strcmp(option_line, "=detail") == 0) {
_tracking_level = NMT_detail; // detail relies on a stack-walking ability that may not
// be available depending on platform and/or compiler flags
if (PLATFORM_NMT_DETAIL_SUPPORTED) {
_tracking_level = NMT_detail;
} else {
jio_fprintf(defaultStream::error_stream(),
"NMT detail is not supported on this platform. Using NMT summary instead.");
_tracking_level = NMT_summary;
}
} else if (strcmp(option_line, "=off") != 0) { } else if (strcmp(option_line, "=off") != 0) {
vm_exit_during_initialization("Syntax error, expecting -XX:NativeMemoryTracking=[off|summary|detail]", NULL); vm_exit_during_initialization("Syntax error, expecting -XX:NativeMemoryTracking=[off|summary|detail]", NULL);
} }
......
...@@ -380,6 +380,14 @@ const uint64_t KlassEncodingMetaspaceMax = (uint64_t(max_juint) + 1) << LogKlass ...@@ -380,6 +380,14 @@ const uint64_t KlassEncodingMetaspaceMax = (uint64_t(max_juint) + 1) << LogKlass
# include "globalDefinitions_ppc.hpp" # include "globalDefinitions_ppc.hpp"
#endif #endif
/*
* If a platform does not support NMT_detail
* the platform specific globalDefinitions (above)
* can set PLATFORM_NMT_DETAIL_SUPPORTED to false
*/
#ifndef PLATFORM_NMT_DETAIL_SUPPORTED
#define PLATFORM_NMT_DETAIL_SUPPORTED true
#endif
// The byte alignment to be used by Arena::Amalloc. See bugid 4169348. // The byte alignment to be used by Arena::Amalloc. See bugid 4169348.
// Note: this value must be a power of 2 // Note: this value must be a power of 2
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册