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

iprof.h

00001 /*
00002  *                         Sun Public License Notice
00003  *
00004  * The contents of this file are subject to the Sun Public License
00005  * Version 1.0 (the "License"); you may not use this file except
00006  * in compliance with the License. A copy of the License is available
00007  * at http://www.sun.com/
00008  *
00009  * The Original Code is the Java Profiler module.  The Initial Developers
00010  * of the Original Code are Jan Stola, Pavel Vacha, Michal Pise, Petr Luner,
00011  * Lukas Petru and Marek Przeczek.
00012  *
00013  * Portions created by Jan Stola are Copyright (C) 2000-2001.
00014  * All Rights Reserved.
00015  *
00016  * Portions created by Pavel Vacha are Copyright (C) 2000-2001.
00017  * All Rights Reserved.
00018  *
00019  * Portions created by Michal Pise are Copyright (C) 2000-2001.
00020  * All Rights Reserved.
00021  *
00022  * Portions created by Petr Luner are Copyright (C) 2000-2001.
00023  * All Rights Reserved.
00024  *
00025  * Portions created by Lukas Petru are Copyright (C) 2000-2001.
00026  * All Rights Reserved.
00027  *
00028  * Portions created by Marek Przeczek are Copyright (C) 2000-2001.
00029  * All Rights Reserved.
00030  *
00031  * Contributors: Jan Stola, Pavel Vacha, Michal Pise, Petr Luner,
00032  *               Lukas Petru and Marek Przeczek.
00033  */
00034 
00035 #ifndef _IPROF_H_
00036 #define _IPROF_H_
00037 
00038 #include "../main/includes.h"
00039 #include "../commun/buffer.h"
00040 #include "../prof/lock.h"
00041 #include "../alloc/allocStatData.h"
00042 #include "../cpu/cpuStatData.h"
00043 #include "../mon/monStatData.h"
00044 #include "../allocator/allocator.h"
00045 #include "../list/list.h"
00046 #include "../setup/setup.h"
00047 #include "../list/listItem.h"
00048 
00060 class IProf {
00061 
00063         typedef void (IProf::*Func)( Buffer&);
00064 
00066         enum e {
00067 
00069                 FUNC_COUNT  = 12
00070         };
00071 
00072 private:
00073 
00075         Func _func[FUNC_COUNT];
00076 
00078         Commun* _commun;
00079 
00080 protected:
00081 
00083         Lock communLock;
00084 
00085 public:
00086 
00088         typedef jint objectID;
00089 
00090 protected:
00091 
00093         enum eErrorCode {
00094                 
00096                 RC_OK            = 0,
00097                 
00099                 RC_BAD_INFO_ID   = -1,
00100 
00102                 RC_BAD_INFO_TYPE = -2,
00103 
00105                 RC_BAD_OBJ_ID    = -3,
00106 
00108                 RC_BAD_DATA_TYPE = -4,
00109 
00111                 RC_BAD_COMMAND   = -5
00112         };
00113 
00114 public:
00115 
00117         enum eFunction {
00118 
00120                 F_SHUTDOWN      = 0,
00121 
00123                 F_IS_SHUTDOWNED = 1,
00124 
00126                 F_SUSPEND_VM    = 2,
00127 
00129                 F_RESUME_VM     = 3,
00130 
00132                 F_EXIT_VM       = 4,
00133 
00135                 F_GET_INFO      = 5,
00136 
00138                 F_GET_DATA      = 6,
00139 
00141                 F_GET_ALL       = 7,
00142 
00144                 F_GET_CHANGED   = 8,
00145 
00147                 F_ENABLE_GC     = 9,
00148 
00150                 F_DISABLE_GC    = 10,
00151 
00153                 F_RUN_GC        = 11
00154         };
00155 
00156 protected:
00157 
00159         enum eInfoType {
00160 
00162                 CLASS_INFO        = 0,
00163 
00165                 CLASS_FIELD_INFO  = 1,
00166 
00168                 METHOD_INFO       = 2,
00169 
00171                 TRACE_INFO        = 3,
00172 
00174                 OBJECT_INFO       = 4,
00175 
00177                 ARENA_INFO        = 5,
00178 
00180                 THREAD_INFO       = 6,
00181 
00183                 THREAD_GROUP_INFO = 7,
00184 
00186                 GC_INFO           = 8
00187         };
00188 
00190         enum eDataType {
00191 
00193                 ALLOC_DATA = 0,
00194 
00196                 CPU_DATA   = 1,
00197 
00199                 MON_DATA   = 2
00200         };
00201 
00203         struct sData {
00204 
00206                 jint active;
00207 
00209                 AllocStatData alloc;
00210 
00212                 CpuStatData cpu;
00213 
00215                 MonStatData mon;
00216         };
00217 
00229         class sID: public LI1 {
00230         public:
00231 
00233                 objectID infoId;
00234 
00236                 objectID objId;
00237 
00239                 objectID parentLeftObjId;
00240 
00242                 objectID parentUpObjId;
00243 
00245                 objectID parentRightObjId;
00246 
00248                 jint active;
00249 
00251                 jint hasAllocData;
00252 
00254                 AllocStatData alloc;
00255 
00257                 jint hasCpuData;
00258 
00260                 CpuStatData cpu;
00261 
00263                 jint hasMonData;
00264 
00266                 MonStatData mon;
00267 
00269                 jint hasInfo;
00270 
00272                 InfoBinaryFormat* info;
00273 
00275                 jint infoType;
00276 
00277 #ifdef USE_ALLOCATOR
00278         private:
00279 
00281                 static Allocator _allocator;
00282 
00283         public:
00284 
00287                 void* operator new( size_t sz) { return _allocator.get( sz);}
00288 
00291                 void operator delete( void* unit) { _allocator.put( unit);}
00292 #endif
00293         };
00294 
00296         typedef List<sID,LI1> seqID;
00297 
00301         enum eSeqType {
00302 
00304                 CLASSES           = 0,
00305                 
00307                 METHODS           = 1,
00308                 
00310                 ALLOC_TRACES      = 2,
00311 
00313                 CPU_TRACES        = 3,
00314 
00316                 OBJECT_TYPES      = 4,
00317 
00319                 THREADS           = 5,
00320 
00322                 GROUPS_OF_THREADS = 6,
00323 
00325                 ARENAS            = 7,
00326 
00328                 GCS               = 8,
00329 
00331                         GROUP_THREADS          = 9,
00332 
00334                         CLASS_FIELDS_STATICS   = 10,
00335 
00337                         CLASS_FIELDS_INSTANCES = 11,
00338 
00340                         CLASS_METHODS          = 12,
00341 
00343                 ALLOC_METHOD_TRACES               = 13,
00344 
00346                 ALLOC_METHOD_OBJECTS              = 14,
00347 
00349                 ALLOC_TRACE_OBJECTS               = 15,
00350 
00352                 ALLOC_OBJECT_METHODS              = 16,
00353 
00355                 ALLOC_OBJECT_METHOD_TRACES        = 17,
00356 
00358                 ALLOC_OBJECT_THREADS              = 18,
00359 
00361                 ALLOC_OBJECT_METHOD_THREADS       = 19,
00362 
00364                 ALLOC_OBJECT_METHOD_TRACE_THREADS = 20,
00365 
00367                 ALLOC_THREAD_OBJECTS              = 21,
00368 
00370                 ALLOC_THREAD_OBJECT_METHODS       = 22,
00371 
00373                 ALLOC_THREAD_OBJECT_METHOD_TRACES = 23,
00374 
00376                 ALLOC_THREAD_METHODS              = 24,
00377 
00379                 ALLOC_THREAD_METHOD_TRACES        = 25,
00380 
00382                 ALLOC_THREAD_METHOD_OBJECTS       = 26,
00383 
00385                 ALLOC_THREAD_METHOD_TRACE_OBJECTS = 27,
00386 
00388                         CPU_METHOD_TRACES        = 28,
00389 
00391                         CPU_METHOD_THREADS       = 29,
00392 
00394                         CPU_METHOD_TRACE_THREADS = 30,
00395 
00397                         CPU_THREAD_METHODS       = 31,
00398 
00400                         CPU_THREAD_METHOD_TRACES = 32,
00401 
00403                 MON_METHOD_TRACES        = 33,
00404 
00406                 MON_METHOD_THREADS       = 34,
00407 
00409                 MON_METHOD_TRACE_THREADS = 35,
00410 
00412                 MON_THREAD_METHODS       = 36,
00413 
00415                 MON_THREAD_METHOD_TRACES = 37,
00416 
00418                 MON_TRACES               = 38,
00419 
00421                         ALLOC_METHOD_THREADS       = 40,
00422 
00425                         ALLOC_METHOD_TRACE_THREADS = 41
00426         };
00427 
00428 private:
00429 
00431         int conEstabl;
00432 
00433 public:
00434 
00442         IProf( const Setup& setup, JVMPI_Interface* jvmpi);
00443         
00447         virtual ~IProf();
00448 
00458         int run();
00459 
00460 private:
00461 
00471         void _shutdown( Buffer& b);
00472 
00482         void _isShutdowned( Buffer& b);
00483 
00493         void _suspendVM( Buffer& b);
00494 
00504         void _resumeVM( Buffer& b);
00505 
00515         void _exitVM( Buffer& b);
00516 
00526         void _getInfo( Buffer& b);
00527 
00537         void _getData( Buffer& b);
00538 
00548         void _getAll( Buffer& b) { _getAllOrChanged( 1, b);}
00549 
00559         void _getChanged( Buffer& b) { _getAllOrChanged( 0, b);}
00560 
00570         void _enableGC( Buffer& b);
00571 
00581         void _disableGC( Buffer& b);
00582 
00592         void _runGC( Buffer& b);
00593 
00594 private:
00595 
00596         // internally used by IProf::_getAll() and IProf::_getChanged()
00597         // not documented
00598 
00599         void _getAllOrChanged( int all, Buffer& b);
00600 
00601 public:
00602 
00608         virtual void shutdown() = 0;
00609 
00615         virtual jint isShutdowned() = 0;
00616 
00622         virtual void suspendVM() = 0;
00623         
00629         virtual void resumeVM() = 0;
00630         
00636         virtual void exitVM() = 0;
00637         
00643         virtual jint getInfo( objectID           infoId,        // in (jint)
00644                               eInfoType          type,          // in (jint)
00645                               InfoBinaryFormat*& info) = 0;     // out
00646 
00652         virtual jint getData( objectID  objId,      // in (jint)
00653                               eDataType type,       // in (jint)
00654                               sData&    data) = 0;  // out
00655 
00661         virtual jint getAll( objectID objId,       // in (jint)
00662                              eSeqType what,        // in (jint)
00663                              jint     includeInfo, // in (jint)
00664                              jint     optionalArg, // in (jint)
00665                              seqID&   seq) = 0;    // out
00666 
00672         virtual jint getChanged( objectID objId,       // in (jint)
00673                                  eSeqType what,        // in (jint)
00674                                  jint     includeInfo, // in (jint)
00675                                  jint     optionalArg, // in (jint)
00676                                  seqID&   seq) = 0;    // out
00677 
00683         virtual void enableGC() = 0;
00684 
00690         virtual void disableGC() = 0;
00691 
00697         virtual void runGC() = 0;
00698 
00699 private:
00700 
00711         static int sToBin( sID* s, void** inout);
00712 
00713 protected:
00714 
00720         int isConnectionEstablished() { return conEstabl;}
00721 };
00722 
00723 #endif // _IPROF_H_

Generated on Mon Jan 28 14:53:26 2002 for Java Profiler Dynamic Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001