Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

setup.cpp File Reference

#include "xdprof.h"
#include <jni.h>

Include dependency graph for setup.cpp:

Include dependency graph

Go to the source code of this file.

Functions

string GetSelfInfo ()
void Leave (string s)
string GetUsage ()
 Returns the program usage. More...

string getToken (const string &entire, const string &token)
 s = "token1=foo,token4=bar,token6=x". More...

JNIEXPORT jint JNICALL JVM_OnLoad (JavaVM *jvm, char *options, void *reserved)

Variables

JVMPI_Interfacejvmpi_interface
JavaVMGlobalJVM


Function Documentation

string GetSelfInfo ( ) [inline, static]
 

Definition at line 38 of file setup.cpp.

Referenced by JVM_OnLoad().

00039 {
00040     ostringstream oss;  
00041     /*
00042     char compname[MAX_COMPUTERNAME_LENGTH + 1] = {0};
00043     DWORD size = MAX_COMPUTERNAME_LENGTH;
00044     GetComputerName(compname, &size);
00045     */
00046     //oss << "pid = " << 
00047     oss << _getpid();
00048     oss << ends;
00049     string s = oss.str();
00050     // trim null
00051     return s.substr(0, s.length() - 1);
00052 }

string GetUsage ( ) [static]
 

Returns the program usage.

Definition at line 61 of file setup.cpp.

Referenced by JVM_OnLoad().

00062 {
00063     string usage = "\nXDPROF Usage:\n\n-Xrunxdprof:server=HOSTNAME,port=PORT,refresh=REFRESH[,description=OPTIONAL_DESCRIPTION,hotspot=true]";
00064     usage = usage + "\n" + "where ";
00065     usage = usage + "\n" + "\t" + "server=HOSTNAME is the machine running the DPROF server";
00066     usage = usage + "\n" + "\t" + "port=PORT is the port number of the DPROF server";
00067     usage = usage + "\n" + "\t" + "refresh=REFRESH is the time to refresh in milliseconds (1000 = 1 sec)";
00068     usage = usage + "\n" + "" + "Optional arguments: ";
00069     usage = usage + "\n" + "\t" + "description=OPTIONAL_DESCRIPTION is a string (without spaces) describing this VM";
00070     usage = usage + "\n" + "\t" + "hotspot=true is set when the HotSpot (non-classic) VM is used (this is not guaranteed to work)";
00071     usage = usage + "\n" + "\nOther runtime flags that should be passed to the VM:";
00072     usage = usage + "\n" + "\t" + "-classic -Xdebug -Xnoagent ";
00073     usage = usage + "\n";
00074     usage = usage + "\nThe final command line will then look like: \n\n" + 
00075             "java -classic -Xdebug -Xnoagent -Xrunxdprof:server=localhost,port=1337,refresh=199,description=MyDescription c\n\n";
00076     return usage;
00077 }

JNIEXPORT jint JNICALL JVM_OnLoad ( JavaVM * jvm,
char * options,
void * reserved )
 

Definition at line 101 of file setup.cpp.

00101                        :4100)
00102     JNIEXPORT jint JNICALL JVM_OnLoad(JavaVM *jvm, char *options, void *reserved)
00103     {
00104         if ((jvm->GetEnv((void **)&jvmpi_interface, JVMPI_VERSION_1)) < 0)
00105         {
00106             fprintf(stderr, "error in obtaining jvmpi interface pointer");
00107             fflush(stderr);
00108             return JNI_ERR;
00109         } 
00110 
00111         GlobalJVM = jvm;
00112         
00113         // initialize jvmpi interface
00114         jvmpi_interface->NotifyEvent = NotifyEvent;
00115 
00116         // initialize monitors
00117         InitializeMonitors();
00118         // enable notifications
00119         CHECKEDCALL(EnableEvent(JVMPI_EVENT_JVM_INIT_DONE               , NULL));
00120         CHECKEDCALL(EnableEvent(JVMPI_EVENT_JVM_SHUT_DOWN               , NULL));
00121 
00122         CHECKEDCALL(EnableEvent(JVMPI_EVENT_THREAD_START, NULL));
00123         CHECKEDCALL(EnableEvent(JVMPI_EVENT_THREAD_END, NULL));
00124         
00125         CHECKEDCALL(EnableEvent(JVMPI_EVENT_CLASS_LOAD                  , NULL));
00126         CHECKEDCALL(EnableEvent(JVMPI_EVENT_CLASS_UNLOAD                , NULL));
00127 
00128         // This is enabled only temporarily to catch the VM initialization thread
00129         CHECKEDCALL(EnableEvent(JVMPI_EVENT_OBJECT_ALLOC                  , NULL));
00130 
00131         /*
00132         CHECKEDCALL(EnableEvent(JVMPI_EVENT_MONITOR_CONTENDED_ENTER     , NULL));
00133         CHECKEDCALL(EnableEvent(JVMPI_EVENT_MONITOR_CONTENDED_ENTERED   , NULL));
00134         CHECKEDCALL(EnableEvent(JVMPI_EVENT_MONITOR_CONTENDED_EXIT      , NULL));
00135         CHECKEDCALL(EnableEvent(JVMPI_EVENT_MONITOR_WAIT                , NULL));
00136         CHECKEDCALL(EnableEvent(JVMPI_EVENT_MONITOR_WAITED              , NULL));
00137 
00138         CHECKEDCALL(EnableEvent(JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTER , NULL));
00139         CHECKEDCALL(EnableEvent(JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTERED, NULL));
00140         CHECKEDCALL(EnableEvent(JVMPI_EVENT_RAW_MONITOR_CONTENDED_EXIT  , NULL));
00141         CHECKEDCALL(EnableEvent(JVMPI_EVENT_DATA_DUMP_REQUEST           , NULL));
00142         */
00143 
00144 
00145         
00146         string selfinfo = GetSelfInfo();
00147         string hostname = "localhost";
00148         long port = 1337;
00149         long refresh = 2000;
00150         HotSpot = false; // assume we have no HotSpot
00151         
00152         if (options != NULL)
00153         {
00154             string s(options);
00155             if (s == "help")
00156             {
00157                 Leave(GetUsage());
00158             }
00159             hostname = getToken(s, "server");
00160             if (hostname == "")
00161                 Leave("Invalid hostname.");
00162 
00163             port = atoi(getToken(s, "port").c_str());
00164             if (port <= 0 || port > 65535)
00165                 Leave("Bad port number " + getToken(s, "port"));
00166 
00167             refresh = atoi(getToken(s, "refresh").c_str());
00168             if (refresh <= 0)
00169                 Leave("Bad refresh number " + getToken(s, "refresh"));
00170 
00171             // add it on
00172             if (getToken(s, "description") != "")
00173             {
00174                 selfinfo += ' ';
00175                 selfinfo += getToken(s, "description");
00176             }
00177             else
00178                 selfinfo += " none";
00179             
00180             if (getToken(s, "hotspot") == "true")
00181             {
00182                 HotSpot = true;
00183             }
00184 
00185             debug("All options", s);
00186         }
00187         else
00188         {
00189             debug("Using defaults...");
00190         }
00191 
00192         debug("Hostname: ", hostname);
00193         debug("Port: ", port);
00194         debug("Refresh: ", refresh);
00195         debug("SelfInfo: ", selfinfo);
00196         debug("HotSpot: ", HotSpot ? "true" : "false");
00197 
00198         InitializeBackgroundThread(hostname, port, selfinfo, refresh);
00199 
00200         return JNI_OK;

void Leave ( string s ) [inline]
 

Definition at line 54 of file setup.cpp.

Referenced by JVM_OnLoad().

00055 {
00056     cout << flush << s << endl;
00057     CALL(ProfilerExit)((jlong)0);
00058 }

string getToken ( const string & entire,
const string & token ) [static]
 

s = "token1=foo,token4=bar,token6=x".

Definition at line 83 of file setup.cpp.

Referenced by JVM_OnLoad().

00084 {
00085     if (entire.size() == 0 || token.size() == 0)
00086         return "";
00087     const string foo = "," + entire + ",";
00088     string::size_type i = foo.find("," + token + "=");
00089     if (i == string::npos)
00090         return "";
00091     
00092     int j = i + token.size() + 2;
00093     int k = foo.find(",", j);
00094     return foo.substr(j, k - j);
00095 }


Variable Documentation

JavaVM* GlobalJVM
 

Definition at line 36 of file setup.cpp.

JVMPI_Interface* jvmpi_interface
 

Definition at line 35 of file setup.cpp.


Generated at Sun Jun 24 20:58:06 2001 for xdprof by doxygen1.2.8.1 written by Dimitri van Heesch, © 1997-2001