00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
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
00597
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,
00644 eInfoType type,
00645 InfoBinaryFormat*& info) = 0;
00646
00652 virtual jint getData( objectID objId,
00653 eDataType type,
00654 sData& data) = 0;
00655
00661 virtual jint getAll( objectID objId,
00662 eSeqType what,
00663 jint includeInfo,
00664 jint optionalArg,
00665 seqID& seq) = 0;
00666
00672 virtual jint getChanged( objectID objId,
00673 eSeqType what,
00674 jint includeInfo,
00675 jint optionalArg,
00676 seqID& seq) = 0;
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_