00001 /***************************************************************************** 00002 * Copyright (c) 1997, 2008 Intel Corporation. 00003 * All rights reserved. This program and the accompanying materials 00004 * are made available under the terms of the Eclipse Public License v1.0 00005 * which accompanies this distribution, and is available at 00006 * http://www.eclipse.org/legal/epl-v10.html 00007 * 00008 * Contributors: 00009 * Intel Corporation - Initial API and implementation 00010 * 00011 * $Id$ 00012 *****************************************************************************/ 00013 00024 // 00025 // Introductory material for the MPI Reference Manual (Doxygen) is available in MpiBase.h 00026 // 00027 00028 #ifndef _MRTE_MPI_H 00029 #define _MRTE_MPI_H 00030 00031 #include "MRTETypes.h" 00032 #include "MRTEResults.h" 00033 #include "MieAPI.h" 00034 #include "MpiBase.h" 00035 00036 namespace Martini 00037 { 00038 00044 namespace MPI 00045 { 00047 // General Data Definitions 00049 00053 typedef U64 TId; 00054 00058 typedef U64 TTimeStamp; 00059 00067 struct TIdArray 00068 { 00069 TId *entries; 00070 unsigned int uiSize; 00071 00072 00073 unsigned int uiActualSize; 00074 00075 }; 00076 00080 struct SVersionInfo 00081 { 00082 U32 major; 00083 U32 minor; 00084 }; 00085 00091 enum EEventGroup 00092 { 00093 EG_NONE, 00094 00095 EG_CALL_GRAPH, 00096 00097 00098 00099 EG_HEAP, 00100 00101 00102 00103 EG_MONITOR, 00104 00105 00106 00107 00108 00109 EG_THREAD_INTERACTION, 00110 00111 00112 EG_LAST 00113 }; 00114 00120 enum EMessageType 00121 { 00122 MT_ERROR, 00123 00124 00125 00126 MT_INFORMATIVE, 00127 00128 MT_DEBUG 00129 }; 00130 00139 enum EMessageDest 00140 { 00141 MD_LOG_FILE = 0x01, 00142 MD_EXTERNAL_CONTROL = 0x02 00143 00144 }; 00145 00154 struct SConfigData 00155 { 00156 }; 00157 00168 enum EConfigurationFlags 00169 { 00171 CF_NONE = 0x00000000, 00172 00175 CF_DOTNET_USE_VM_IDS = 0x00010000, 00176 00178 CF_DOTNET_NO_INLINING = 0x00020000, 00179 00181 CF_DOTNET_DISABLE_PREJIT_USE = 0x00040000, 00182 00184 CF_LAST = 0x80080000 00185 }; 00186 00192 enum ERuntimeType 00193 { 00194 RT_JAVA = 2, 00195 RT_DOTNET, 00196 RT_JIT_PROFILING = 9, 00197 RT_UNDEFINED 00198 }; 00199 00205 enum EMethodAccessType 00206 { 00208 MAT_NONE = 0, 00209 00211 MAT_CLASS_INTERNAL, 00212 00215 MAT_PACKAGE_INTERNAL, 00216 00218 MAT_MODULE_INTERNAL = MAT_PACKAGE_INTERNAL, 00219 00222 MAT_PACKAGE_API, 00223 00225 MAT_MODULE_API = MAT_PACKAGE_API, 00226 }; 00227 00241 struct SLineNumberTableEntry 00242 { 00243 unsigned int uiOffset; 00244 // either JIT or managed code 00245 unsigned int uiLineNumber; 00246 // either managed code or source line number 00247 }; 00248 00262 struct SLineNumberTable 00263 { 00264 SLineNumberTableEntry *entries; 00265 unsigned int uiSize; 00266 00267 00268 unsigned int uiActualSize; 00269 00270 }; 00271 00277 struct SDotNetModulePrejit 00278 { 00279 void *pPrejitModuleBaseAddr; 00280 const char *szModuleName; 00281 }; 00282 00290 struct SCodeRegion 00291 { 00292 const void *pCodeAddr; 00293 unsigned int uiCodeSize; 00294 }; 00295 00311 struct SCodeInfo 00312 { 00313 SCodeRegion* pCodeRegions; 00314 unsigned int uiSize; 00315 00316 00317 unsigned int uiActualSize; 00318 00319 }; 00320 00326 struct SStackEntry 00327 { 00328 TId methodId; 00329 U64 location; 00330 00331 00332 }; 00333 00342 struct SStackTrace 00343 { 00344 SStackEntry* pStackEntries; 00345 unsigned int uiSize; 00346 00347 00348 unsigned int uiActualSize; 00349 00350 00351 00352 00353 00354 00355 }; 00356 00363 struct SGgMovedRefInfo 00364 { 00365 int* oldObjectIDRangeStart; 00366 int* newObjectIDRangeStart; 00367 int* cObjectIDRangeLength; 00368 int cMovedObjectIDRanges; 00369 }; 00370 00379 struct SJavaDynamicCode 00380 { 00381 const char *szCodeName; 00382 const void *pCodeAddr; 00383 unsigned int uiCodeSize; 00384 }; 00385 00401 struct SMethodLineNumbers 00402 { 00403 unsigned int uiStart; 00404 unsigned int uiEnd; 00405 }; 00406 00412 enum EArrayType 00413 { 00414 AT_NONE, 00415 AT_CLASS, 00416 AT_BOOL, 00417 AT_CHAR, 00418 AT_S1, 00419 AT_U1, 00420 AT_S2, 00421 AT_U2, 00422 AT_S4, 00423 AT_U4, 00424 AT_S8, 00425 AT_U8, 00426 AT_FLOAT, 00427 AT_DOUBLE, 00428 AT_STRING, 00429 AT_VOID, 00430 AT_OTHER, 00431 AT_LAST, 00432 }; 00433 00439 struct SArrayDimensionInfo 00440 { 00441 unsigned int size; 00442 int lowerBound; 00443 }; 00444 00445 00455 struct SArrayDimensionsInfos 00456 { 00457 SArrayDimensionInfo *infos; 00458 unsigned int uiSize; 00459 00460 unsigned int uiActualSize; 00461 00462 00463 00464 }; 00465 00471 struct SArrayInfo 00472 { 00473 void *dataPtr; 00474 00475 00476 00477 00478 TId arrayBaseClassId; 00479 TId arrayBaseModuleId; 00480 TId arrayBaseClassToken; 00481 00482 00483 U32 numDimensions; 00484 SArrayDimensionsInfos dimensionsInfo; 00485 }; 00486 00501 struct SObjectInfo 00502 { 00503 U64 uiSize; 00504 TId classId; 00505 TId moduleId; 00506 00507 TId classToken; 00508 EArrayType arrayType; 00509 SArrayInfo arrayInfo; 00510 }; 00511 00513 // Data Request Items 00515 00519 typedef U32 TDataRequestType; 00520 00528 // Data items are defined as bits. The lower 16 bits are reserved for common items 00529 // that are used in multiple events and data requests. 00530 // The higher 16 bits are used for data items that are specific to a certain event 00531 // or a data request. Several data items can use the same bit, as long as 00532 // these data items can never be specified together in the same data request 00533 // operation. 00534 00536 00538 const TDataRequestType DR_NONE = 0x00000000; 00539 00540 // --- Data items which are common to multiple events and data requests --- 00541 00543 const TDataRequestType DR_THREAD_ID = 0x00000001; 00544 00546 const TDataRequestType DR_MODULE_ID = 0x00000002; 00547 00549 const TDataRequestType DR_CLASS_ID = 0x00000004; 00550 00552 const TDataRequestType DR_METHOD_ID = 0x00000008; 00553 00555 const TDataRequestType DR_OBJECT_ID = 0x00000010; 00556 00557 // --- Data items for method information --- 00558 00563 // expected by developers. 00564 const TDataRequestType DR_METHOD_NAME = 0x00010000; 00565 00570 const TDataRequestType DR_METHOD_SIGNATURE = 0x00020000; 00571 00573 const TDataRequestType DR_SOURCE_FILE_NAME = 0x00040000; 00574 00576 // Used with SMethodLineNumbers 00577 const TDataRequestType DR_METHOD_LINE_NUMBERS = 0x00080000; 00578 00580 const TDataRequestType DR_MODULE_NAME = 0x00100000; 00581 00583 const TDataRequestType DR_CLASS_NAME = 0x00200000; 00584 00586 const TDataRequestType DR_METHOD_CODE = 0x00400000; 00587 00589 const TDataRequestType DR_NATIVE_TO_SRC_LINE_MAP = 0x00800000; 00590 00593 const TDataRequestType DR_NATIVE_TO_MANAGED_LINE_MAP = 0x01000000; 00594 00596 const TDataRequestType DR_MANAGED_TO_SRC_LINE_MAP = 0x02000000; 00597 00599 const TDataRequestType DR_JAVA_NATIVE_CLASS_NAME = 0x04000000; 00600 00601 const TDataRequestType DR_DOTNET_MODULE_PREJIT = 0x10000000; 00602 00604 const TDataRequestType DR_DOTNET_METHOD_TOKEN = 0x20000000; 00605 00607 const TDataRequestType DR_JAVA_NATIVE_METHOD_NAME = 0x40000000; 00608 00610 const TDataRequestType DR_JAVA_NATIVE_METHOD_SIGNATURE = 0x80000000; 00611 00612 // --- Data items for thread information --- 00613 00615 const TDataRequestType DR_THREAD_NAME = 0x00010000; 00616 00618 const TDataRequestType DR_THREAD_GROUP = 0x00020000; 00619 00622 const TDataRequestType DR_THREAD_PARENT_GROUP = 0x00040000; 00623 00625 const TDataRequestType DR_ABSOLUTE_NATIVE_STACK_TRACE = 0x00080000; 00626 00628 const TDataRequestType DR_VM_RELATIVE_STACK_TRACE = 0x00100000; 00629 00631 const TDataRequestType DR_THREAD_ELAPSED_TIME = 0x00200000; 00632 00634 const TDataRequestType DR_THREAD_CPU_TIME = 0x00400000; 00635 00637 const TDataRequestType DR_THREAD_STATE = 0x00800000; 00638 00640 const TDataRequestType DR_CURRENT_MONITOR = 0x01000000; 00641 00643 const TDataRequestType DR_THREAD_INFO = DR_THREAD_NAME | 00644 DR_THREAD_GROUP | 00645 DR_THREAD_PARENT_GROUP; 00646 00647 // --- Data items for object and monitor information --- 00648 00650 const TDataRequestType DR_MONITOR_OWNER_THREAD_ID = 0x00010000; 00651 00653 const TDataRequestType DR_OBJECT_INFO = 0x00020000; 00654 00656 const TDataRequestType DR_MONITOR_TIMEOUT = 0x00040000; 00657 00659 const TDataRequestType DR_MONITOR_TIMED_OUT = 0x00800000; 00660 00662 const TDataRequestType DR_THREAD_INTERACTION_TYPE = 0x01000000; 00663 00665 const TDataRequestType DR_MONITOR_OWN_WAITERS = 0x00080000; 00666 00668 const TDataRequestType DR_MONITOR_NOTIFY_WAITERS = 0x00100000; 00669 00673 const TDataRequestType DR_ALLOC_VM_INSTRUCTION_OFFSET = 0x00200000; 00674 00676 const TDataRequestType DR_OBJECT_AGE = 0x00400000; 00677 // --- Data items for heap information --- 00678 00680 const TDataRequestType DR_JAVA_HEAP_USAGE = 0x00010000; 00681 00682 // --- Data items for configuration information --- 00683 00686 const TDataRequestType DR_ACTIVITY_PATH = 0x00010000; 00687 00688 // --- Data items for Garbage Collection information --- 00689 00691 const TDataRequestType DR_DOTNET_GC_MOVED_REF_INFO = 0x00010000; 00692 00693 // --- Data items for dynamic code information --- 00694 00696 const TDataRequestType DR_JAVA_DYNAMIC_CODE = 0x00010000; 00697 00698 // --- Data items for custom commands --- 00699 00701 const TDataRequestType DR_COMMAND_ID = 0x00010000; 00702 00704 const TDataRequestType DR_COMMAND_DATA = 0x00020000; 00706 00708 // Generic Event Definition 00710 00727 class IEventObserver 00728 { 00729 public: 00730 virtual ~IEventObserver() {} 00731 00741 virtual TEventType Type() = 0; 00742 00756 virtual BitSet EventDataTypes() = 0; 00757 }; 00758 00760 // Event Observer Definitions 00762 00764 // New Method Event 00766 00773 struct SNewMethodEventData 00774 { 00775 TId methodId; 00776 BitSet validData; 00777 }; 00778 00794 class INewMethodEventObserver : public IEventObserver 00795 { 00796 public: 00797 virtual TEventType Type() { return EV_NEW_METHOD; } 00798 00799 virtual BitSet EventDataTypes() { return DR_METHOD_ID; } 00800 00808 virtual void HandleEvent(SNewMethodEventData &data) = 0; 00809 }; 00810 00812 // Method Enter Event 00814 00821 struct SMethodEnterEventData 00822 { 00823 TId methodId; 00824 TId threadId; 00825 00826 TId moduleId; 00827 TTimeStamp uiElapsedNanos; 00828 TTimeStamp uiCpuNanos; 00829 BitSet validData; 00830 }; 00831 00847 class IMethodEnterEventObserver : public IEventObserver 00848 { 00849 public: 00850 virtual TEventType Type() { return EV_METHOD_ENTER; } 00851 00852 virtual BitSet EventDataTypes() { return DR_METHOD_ID; } 00853 00862 virtual void HandleEvent(SMethodEnterEventData &data) = 0; 00863 }; 00864 00866 // Method Leave Event 00868 00875 struct SMethodLeaveEventData 00876 { 00877 TId methodId; 00878 TId threadId; 00879 00880 TTimeStamp uiElapsedNanos; 00881 TTimeStamp uiCpuNanos; 00882 BitSet validData; 00883 }; 00884 00905 class IMethodLeaveEventObserver : public IEventObserver 00906 { 00907 public: 00908 virtual TEventType Type() { return EV_METHOD_LEAVE; } 00909 00910 virtual BitSet EventDataTypes() { return DR_NONE; } 00911 00920 virtual void HandleEvent(SMethodLeaveEventData &data) = 0; 00921 }; 00922 00924 // JITted Method Loaded Event 00926 00933 struct SJittedMethodLoadedEventData 00934 { 00935 TId methodId; 00936 SLineNumberTable nativeToSrcLineMap; 00937 00938 00939 SLineNumberTable nativeToManagedLineMap; 00940 00941 00942 00943 SLineNumberTable managedToSrcLineMap; 00944 00945 00946 SCodeInfo codeInfo; 00947 SDotNetModulePrejit modulePrejitInfo; 00948 BitSet validData; 00949 }; 00950 00967 class IJittedMethodLoadedEventObserver : public IEventObserver 00968 { 00969 public: 00970 virtual TEventType Type() { return EV_JITTED_METHOD_LOADED; } 00971 00972 virtual BitSet EventDataTypes() 00973 { 00974 return DR_METHOD_ID | DR_NATIVE_TO_MANAGED_LINE_MAP | 00975 DR_MANAGED_TO_SRC_LINE_MAP | DR_NATIVE_TO_SRC_LINE_MAP | DR_METHOD_CODE 00976 | DR_DOTNET_MODULE_PREJIT; 00977 } 00978 00987 virtual void HandleEvent(SJittedMethodLoadedEventData &data) = 0; 00988 }; 00989 00991 // JITted Method Unloaded Event 00993 01000 struct SJittedMethodUnloadedEventData 01001 { 01002 TId methodId; 01003 BitSet validData; 01004 }; 01005 01017 class IJittedMethodUnloadedEventObserver : public IEventObserver 01018 { 01019 public: 01020 virtual TEventType Type() { return EV_JITTED_METHOD_UNLOADED; } 01021 01022 virtual BitSet EventDataTypes() { return DR_METHOD_ID; } 01023 01031 virtual void HandleEvent(SJittedMethodUnloadedEventData &data) = 0; 01032 }; 01033 01034 01036 // Thread Events and Data 01038 01046 struct SThreadEventData 01047 { 01048 TId threadId; 01049 TId objectId; 01050 TId classId; 01051 BitSet validData; 01052 }; 01053 01072 class IThreadStartEventObserver : public IEventObserver 01073 { 01074 public: 01075 virtual TEventType Type() { return EV_THREAD_START; } 01076 01077 virtual BitSet EventDataTypes() { return DR_THREAD_ID; } 01078 01086 virtual void HandleEvent(SThreadEventData &data) = 0; 01087 }; 01088 01104 class IThreadEndEventObserver : public IEventObserver 01105 { 01106 public: 01107 virtual TEventType Type() { return EV_THREAD_END; } 01108 01109 virtual BitSet EventDataTypes() { return DR_THREAD_ID; } 01110 01118 virtual void HandleEvent(SThreadEventData &data) = 0; 01119 }; 01120 01122 // Monitor Events and Data 01124 01131 struct SMonitorWaitEventData 01132 { 01133 TId threadId; 01134 TId objectId; 01135 U64 timeoutMillis; 01136 BitSet validData; 01137 }; 01138 01151 class IMonitorWaitEventObserver : public IEventObserver 01152 { 01153 public: 01154 virtual TEventType Type() { return EV_MONITOR_WAIT; } 01155 01156 virtual BitSet EventDataTypes() 01157 { 01158 return DR_THREAD_ID | DR_OBJECT_ID | DR_MONITOR_TIMEOUT; 01159 } 01160 01168 virtual void HandleEvent(SMonitorWaitEventData &data) = 0; 01169 }; 01170 01177 struct SMonitorWaitedEventData 01178 { 01179 TId threadId; 01180 TId objectId; 01181 bool isTimedOut; 01182 BitSet validData; 01183 }; 01184 01196 class IMonitorWaitedEventObserver : public IEventObserver 01197 { 01198 public: 01199 virtual TEventType Type() { return EV_MONITOR_WAITED; } 01200 01201 virtual BitSet EventDataTypes() 01202 { 01203 return DR_THREAD_ID | DR_OBJECT_ID | DR_MONITOR_TIMED_OUT; 01204 } 01205 01213 virtual void HandleEvent(SMonitorWaitedEventData &data) = 0; 01214 }; 01215 01222 struct SContendedMonitorEnterEventData 01223 { 01224 TId threadId; 01225 TId objectId; 01226 TId ownerThreadId; 01227 01228 BitSet validData; 01229 }; 01230 01243 class IContendedMonitorEnterEventObserver : public IEventObserver 01244 { 01245 public: 01246 virtual TEventType Type() { return EV_CONTENDED_MONITOR_ENTER; } 01247 01248 virtual BitSet EventDataTypes() 01249 { 01250 return DR_THREAD_ID | DR_OBJECT_ID | DR_MONITOR_OWNER_THREAD_ID; 01251 } 01252 01260 virtual void HandleEvent(SContendedMonitorEnterEventData &data) = 0; 01261 }; 01262 01269 struct SContendedMonitorEnteredEventData 01270 { 01271 TId threadId; 01272 TId objectId; 01273 BitSet validData; 01274 }; 01275 01288 class IContendedMonitorEnteredEventObserver : public IEventObserver 01289 { 01290 public: 01291 virtual TEventType Type() { return EV_CONTENDED_MONITOR_ENTERED; } 01292 01293 virtual BitSet EventDataTypes() { return DR_THREAD_ID | DR_OBJECT_ID; } 01294 01302 virtual void HandleEvent(SContendedMonitorEnteredEventData &data) = 0; 01303 }; 01304 01310 enum EThreadInteractionType 01311 { 01312 IT_NOTIFY_ALL = 1, 01313 01314 IT_NOTIFY = 2, 01315 01316 IT_INTERRUPT = 3, 01317 IT_START = 4 01318 }; 01319 01326 struct SThreadInteractionEventData 01327 { 01328 TId threadId; 01329 01330 TId objectId; 01331 01332 EThreadInteractionType interactionType; 01333 BitSet validData; 01334 }; 01335 01356 class IThreadInteractionEventObserver : public IEventObserver 01357 { 01358 public: 01359 virtual TEventType Type() { return EV_THREAD_INTERACTION; } 01360 01361 virtual BitSet EventDataTypes() 01362 { 01363 return DR_THREAD_ID | DR_OBJECT_ID | DR_THREAD_INTERACTION_TYPE; 01364 } 01365 01373 virtual void HandleEvent(SThreadInteractionEventData &data) = 0; 01374 }; 01375 01377 // Heap Events and Data 01379 01387 struct SHeapEventData 01388 { 01389 TId threadId; 01390 01391 TId objectId; 01392 TId allocMethodId; 01393 U64 allocLocation; 01394 01395 SObjectInfo *pObjectInfo; 01396 U32 objectAge; 01397 01398 BitSet validData; 01399 }; 01400 01421 class IObjectAllocEventObserver : public IEventObserver 01422 { 01423 public: 01424 virtual TEventType Type() { return EV_OBJECT_ALLOC; } 01425 01426 virtual BitSet EventDataTypes() 01427 { 01428 return DR_THREAD_ID | DR_OBJECT_ID | DR_OBJECT_INFO; 01429 } 01430 01438 virtual void HandleEvent(SHeapEventData &data) = 0; 01439 }; 01440 01459 class IObjectFreeEventObserver : public IEventObserver 01460 { 01461 public: 01462 virtual TEventType Type() { return EV_OBJECT_FREE; } 01463 01464 virtual BitSet EventDataTypes() 01465 { 01466 return DR_THREAD_ID | DR_OBJECT_ID | DR_OBJECT_INFO | DR_OBJECT_AGE; 01467 } 01468 01476 virtual void HandleEvent(SHeapEventData &data) = 0; 01477 }; 01478 01480 // Garbage Collection Events 01482 01493 class IGcStartEventObserver : public IEventObserver 01494 { 01495 public: 01496 virtual TEventType Type() { return EV_GC_START; } 01497 01498 virtual BitSet EventDataTypes() { return DR_NONE; } 01499 01505 virtual void HandleEvent() = 0; 01506 }; 01507 01518 class IGcEndEventObserver : public IEventObserver 01519 { 01520 public: 01521 virtual TEventType Type() { return EV_GC_END; } 01522 01523 virtual BitSet EventDataTypes() { return DR_NONE; } 01524 01530 virtual void HandleEvent() = 0; 01531 }; 01532 01539 struct SGcMovedRefEventData 01540 { 01541 SGgMovedRefInfo gcMovedReferences; 01542 BitSet validData; 01543 }; 01544 01558 class IGcMovedReferencesEventObserver : public IEventObserver 01559 { 01560 public: 01561 virtual TEventType Type() { return EV_GC_MOVED_REFERENCES; } 01562 01563 virtual BitSet EventDataTypes() { return DR_DOTNET_GC_MOVED_REF_INFO; } 01564 01572 virtual void HandleEvent(SGcMovedRefEventData &data) = 0; 01573 }; 01574 01576 // VM Init Event 01578 01585 struct SVmInitEventData 01586 { 01587 TId threadId; 01588 01589 BitSet validData; 01590 }; 01591 01604 class IVmInitEventObserver : public IEventObserver 01605 { 01606 public: 01607 virtual TEventType Type() { return EV_VM_INIT; } 01608 01609 virtual BitSet EventDataTypes() { return DR_THREAD_ID; } 01610 01618 virtual void HandleEvent(SVmInitEventData &data) = 0; 01619 }; 01620 01622 // VM Shutdown Event 01624 01635 class IVmShutdownEventObserver : public IEventObserver 01636 { 01637 public: 01638 virtual TEventType Type() { return EV_VM_SHUTDOWN; } 01639 01640 virtual BitSet EventDataTypes() { return DR_NONE; } 01641 01647 virtual void HandleEvent() = 0; 01648 }; 01649 01651 // .NET Method Instrumentation Event 01653 01660 struct SDotNetMethodInstrEventData 01661 { 01662 TId methodId; 01663 BitSet validData; 01664 }; 01665 01678 class IDotNetMethodInstrumentationPointEventObserver : public IEventObserver 01679 { 01680 public: 01681 virtual TEventType Type() { return EV_DOTNET_METHOD_INSTRUMENTATION_POINT; } 01682 01683 virtual BitSet EventDataTypes() { return DR_METHOD_ID; } 01684 01692 virtual void HandleEvent(SDotNetMethodInstrEventData &data) = 0; 01693 }; 01694 01695 01697 // .NET Module Events 01699 01707 struct SDotNetModuleEventData 01708 { 01709 TId moduleId; 01710 BitSet validData; 01711 }; 01712 01723 class IDotNetModuleUnloadStartEventObserver : public IEventObserver 01724 { 01725 public: 01726 virtual TEventType Type() { return EV_DOTNET_MODULE_UNLOAD_STARTED; } 01727 01728 virtual BitSet EventDataTypes() { return DR_MODULE_ID; } 01729 01737 virtual void HandleEvent(SDotNetModuleEventData &data) = 0; 01738 }; 01739 01750 class IDotNetModuleLoadFinishEventObserver : public IEventObserver 01751 { 01752 public: 01753 virtual TEventType Type() { return EV_DOTNET_MODULE_LOAD_FINISHED; } 01754 01755 virtual BitSet EventDataTypes() { return DR_MODULE_ID; } 01756 01764 virtual void HandleEvent(SDotNetModuleEventData &data) = 0; 01765 }; 01766 01768 // Java Dynamic Code Generated Event 01770 01777 struct SJavaDynamicCodeEventData 01778 { 01779 SJavaDynamicCode jvmDynamicCode; 01780 BitSet validData; 01781 }; 01782 01794 class IJavaDynamicCodeGeneratedEventObserver : public IEventObserver 01795 { 01796 public: 01797 virtual TEventType Type() { return EV_JAVA_DYNAMIC_CODE_GENERATED; } 01798 01799 virtual BitSet EventDataTypes() { return DR_JAVA_DYNAMIC_CODE; } 01800 01808 virtual void HandleEvent(SJavaDynamicCodeEventData &data) = 0; 01809 }; 01810 01812 // Java Class File Load Hook (raw) Event 01814 01822 struct SClassFileLoadHookEventData 01823 { 01824 const char *className; 01825 01826 const unsigned char* classData; 01827 S32 classDataLength; 01828 }; 01829 01830 01842 class IJavaClassFileLoadHookEventObserver : public IEventObserver 01843 { 01844 public: 01845 virtual TEventType Type() { return EV_JAVA_CLASS_FILE_LOAD_HOOK; } 01846 01847 virtual BitSet EventDataTypes() { return DR_NONE; } 01848 01868 virtual void HandleEvent(SClassFileLoadHookEventData &data, 01869 TMemoryAllocatorFunc memAllocFunc, 01870 unsigned char **newClassData, 01871 S32 *newClassDataLength) = 0; 01872 }; 01873 01875 // External Control Events 01877 01884 struct SSetOutputDirEventData 01885 { 01886 const char *szActivityPath; 01887 BitSet validData; 01888 }; 01889 01902 class IEcSetOutputDirEventObserver : public IEventObserver 01903 { 01904 public: 01905 virtual TEventType Type() { return EV_EC_SET_OUTPUT_DIRECTORY; } 01906 01907 virtual BitSet EventDataTypes() { return DR_ACTIVITY_PATH; } 01908 01916 virtual void HandleEvent(SSetOutputDirEventData &data) = 0; 01917 }; 01918 01929 class IEcStartEventObserver : public IEventObserver 01930 { 01931 public: 01932 virtual TEventType Type() { return EV_EC_START; } 01933 01934 virtual BitSet EventDataTypes() { return DR_NONE; } 01935 01941 virtual void HandleEvent() = 0; 01942 }; 01943 01954 class IEcStopEventObserver : public IEventObserver 01955 { 01956 public: 01957 virtual TEventType Type() { return EV_EC_STOP; } 01958 01959 virtual BitSet EventDataTypes() { return DR_NONE; } 01960 01966 virtual void HandleEvent() = 0; 01967 }; 01968 01979 class IEcAttachEventObserver : public IEventObserver 01980 { 01981 public: 01982 virtual TEventType Type() { return EV_EC_ATTACH; } 01983 01984 virtual BitSet EventDataTypes() { return DR_NONE; } 01985 01991 virtual void HandleEvent() = 0; 01992 }; 01993 02004 class IEcDetachEventObserver : public IEventObserver 02005 { 02006 public: 02007 virtual TEventType Type() { return EV_EC_DETACH; } 02008 02009 virtual BitSet EventDataTypes() { return DR_NONE; } 02010 02016 virtual void HandleEvent() = 0; 02017 }; 02018 02025 struct SCustomCommandEventData 02026 { 02027 unsigned int commandId; 02028 void *pData; 02029 BitSet validData; 02030 }; 02031 02041 class IEcCustomCommandEventObserver : public IEventObserver 02042 { 02043 public: 02044 virtual TEventType Type() { return EV_EC_CUSTOM_COMMAND; } 02045 02046 virtual BitSet EventDataTypes() { return DR_COMMAND_ID | DR_COMMAND_DATA; } 02047 02055 virtual void HandleEvent(SCustomCommandEventData &data) = 0; 02056 }; 02057 02059 // Call Graph Event Filter 02061 02067 struct SCallGraphFilterData 02068 { 02069 const char *szModuleName; 02070 const char *szClassName; 02071 const char *szMethodName; 02072 const char *szMethodSignature; 02073 EMethodAccessType methodAccessType; 02074 }; 02075 02091 class ICallGraphFilter : public IEventFilter 02092 { 02093 public: 02094 virtual EFilterType Type() { return FT_CALLGRAPH; } 02095 02112 virtual bool ShouldNotify(SCallGraphFilterData &methodInfo) = 0; 02113 }; 02114 02116 // Heap Events Filter 02118 02124 struct SHeapFilterData 02125 { 02126 const char *szClassName; 02127 }; 02128 02147 class IHeapFilter : public IEventFilter 02148 { 02149 public: 02150 virtual EFilterType Type() { return FT_HEAP; } 02151 02167 virtual bool ShouldNotify(SHeapFilterData &objectInfo) = 0; 02168 }; 02169 02171 // Thread Interaction Events Filter 02173 02179 struct SThreadInteractionFilterData 02180 { 02181 const char *szClassName; 02182 const char *szMethodName; 02183 }; 02184 02200 class IThreadInteractionFilter : public IEventFilter 02201 { 02202 public: 02203 virtual EFilterType Type() { return FT_THREAD_INTERACTION; } 02204 02221 virtual bool ShouldNotify(SThreadInteractionFilterData &methodInfo) = 0; 02222 }; 02223 02225 // Data Request Structure Definitions 02227 02235 struct SMethodInfo 02236 { 02237 const char *szModuleName; 02238 const char *szClassName; 02239 const char *szMethodName; 02240 const char *szMethodSig; 02241 const char *szMethodSourceFileName; 02242 const char *szJavaClassName; 02243 02244 02245 const char *szJavaMethodName; 02246 02247 02248 const char *szJavaMethodSig; 02249 02250 SMethodLineNumbers methodLineNumbers; 02251 TId moduleId; 02252 TId classId; 02253 SLineNumberTable nativeToSrcLineMap; 02254 02255 02256 02257 SLineNumberTable nativeToManagedLineMap; 02258 02259 02260 02261 SLineNumberTable managedToSrcLineMap; 02262 02263 02264 SCodeInfo codeInfo; 02265 SDotNetModulePrejit modulePrejitInfo; 02266 TId methodToken; 02267 BitSet validData; 02268 }; 02269 02277 struct SClassInfo 02278 { 02279 const char *szClassName; 02280 const char *szSourceFileName; 02281 const char *szJavaClassName; 02282 02283 BitSet validData; 02284 }; 02285 02293 struct SObjectDataRequest 02294 { 02295 SObjectInfo objectInfo; 02296 TId monOwnerThreadId; 02297 02298 TIdArray monOwnWaiters; 02299 TIdArray monNotifyWaiters; 02300 02301 BitSet validData; 02302 }; 02303 02314 enum EThreadState 02315 { 02316 TS_UNKNOWN, 02317 TS_UNSTARTED, 02318 TS_RUNNING, 02319 TS_SLEEPING, 02320 TS_BLOCKED, 02321 02322 TS_WAITING, 02323 TS_TERMINATED 02324 }; 02325 02338 struct SThreadInfo 02339 { 02340 const char *szName; 02341 const char *szGroupName; 02342 02343 const char *szParentGroupName; 02344 02345 SStackTrace nativeAbsoluteStack; 02346 02347 SStackTrace vmOffsetStack; 02348 02349 TTimeStamp uiElapsedNanos; 02350 TTimeStamp uiCpuNanos; 02351 EThreadState state; 02352 TId threadObjectId; 02353 TId currentMonitorId; 02354 02355 BitSet validData; 02356 }; 02357 02385 typedef TResult (*TDotNetUnmanagedStackWalkCallBack)(SThreadInfo *pData, 02386 void *context, 02387 unsigned int contextSize, 02388 U64 firstUnmanagedCallSiteIP, 02389 U64 terminatingManagedCallSiteIP); 02394 struct SThreadInfoArrayEntry 02395 { 02396 TId threadId; 02397 SThreadInfo threadInfo; 02398 }; 02399 02411 struct SThreadInfoArray 02412 { 02413 SThreadInfoArrayEntry *pEntries; 02414 unsigned int uiSize; 02415 02416 unsigned int uiActualSize; 02417 }; 02418 02426 struct SModuleInfo 02427 { 02428 const char *szModuleName; 02429 BitSet validData; 02430 }; 02431 02435 enum EObjectReferenceType 02436 { 02437 OR_CLASS = 1, 02438 OR_FIELD = 2, 02439 02440 OR_ARRAY_ELEMENT = 3, 02441 OR_JAVA_CLASS_LOADER = 4, 02442 02443 OR_JAVA_REFERENCE_SIGNERS = 5, 02444 02445 OR_JAVA_PROTECTION_DOMAIN = 6, 02446 02447 OR_INTERFACE = 7, 02448 OR_STATIC_FIELD = 8, 02449 02450 OR_CONSTANT_POOL = 9, 02451 02452 OR_SUPERCLASS = 10, 02453 OR_JAVA_JNI_GLOBAL = 21, 02454 02455 OR_SYSTEM_CLASS= 22, 02456 OR_MONITOR = 23, 02457 OR_STACK_LOCAL = 24, 02458 OR_JAVA_JNI_LOCAL = 25, 02459 02460 OR_THREAD = 26, 02461 OR_OTHER = 27 02462 }; 02463 02467 struct SObjectReference 02468 { 02469 EObjectReferenceType type; 02470 TId srcObjectId; 02471 02472 TId targetObjectId; 02473 }; 02474 02484 struct SObjectReferenceInfo 02485 { 02486 SObjectReference *pReferences; 02487 U64 uiSize; 02488 02489 U64 uiActualSize; 02490 02491 02492 }; 02493 02495 // MPI API 02497 02506 class IMpi 02507 { 02508 public: 02509 02515 02556 virtual TResult RegisterEvent(TId clientId, 02557 IEventObserver &observer) = 0; 02558 02606 virtual TResult SetEventGroupFilter(TId clientId, 02607 EEventGroup group, 02608 IEventFilter &filter) = 0; 02609 02654 virtual TResult EnableEventGroup(TId clientId, EEventGroup group) = 0; 02655 02697 virtual TResult DisableEventGroup(TId clientId, EEventGroup group) = 0; 02698 02700 02707 02724 virtual TResult GetModuleInfo(TId clientId, 02725 TId moduleId, 02726 BitSet requestedDataTypes, 02727 SModuleInfo *pData) = 0; 02728 02746 virtual TResult GetClassInfo(TId clientId, 02747 TId classId, 02748 BitSet requestedDataTypes, 02749 SClassInfo *pData) = 0; 02750 02786 virtual TResult GetMethodInfo(TId clientId, 02787 TId methodId, 02788 BitSet requestedDataTypes, 02789 SMethodInfo *pData) = 0; 02790 02791 02832 virtual TResult GetCompiledMethodInfo(TId clientId, 02833 const char* szModuleName, 02834 UIOP uiIpOffset, 02835 BitSet requestedDataTypes, 02836 TId *pMethodId, 02837 SMethodInfo *pData) = 0; 02838 02857 virtual TResult GetObjectInfo(TId clientId, 02858 TId objectId, 02859 BitSet requestedDataTypes, 02860 SObjectDataRequest *pData) = 0; 02861 02907 virtual TResult GetThreadInfo(TId clientId, 02908 TId threadId, 02909 BitSet requestedDataTypes, 02910 SThreadInfo *pData, 02911 TDotNetUnmanagedStackWalkCallBack pfnStackWalker = NULL) = 0; 02954 virtual TResult GetAllThreadsInfo(TId clientId, 02955 U32 maxFrameCount, 02956 BitSet requestedDataTypes, 02957 SThreadInfoArray *pData) = 0; 02958 02972 virtual TResult GetObjectReferences(TId clientId, 02973 SObjectReferenceInfo *pData) = 0; 02975 02981 02992 virtual ERuntimeType GetRuntimeType() = 0; 02993 03027 virtual TResult InstantiateClient(TId clientId, 03028 const char *szRequestedClientName, 03029 const char *szOptions = 0) = 0; 03030 03046 virtual MIE::IMIE* GetInstrumentor() = 0; 03047 03078 virtual TResult Configure(BitSet configuration, 03079 SConfigData *pConfigData = 0) = 0; 03080 03110 virtual TResult MessageLog(TId clientId, EMessageType msgType, BitSet msgDest, 03111 char* szMessage, unsigned int iLevel = 0) = 0; 03112 03113 03123 virtual void GetVersion(SVersionInfo *pVersionInfo) = 0; 03124 03141 virtual TResult SuspendVM() = 0; 03142 03154 virtual TResult ResumeVM() = 0; 03155 03167 virtual TResult RunGC() = 0; 03168 03170 03171 }; 03172 03174 // MPI client entry point 03176 03197 typedef TResult(*TClientInstantiate)(IMpi *pMpiApi, TId clientId, const char *szOptions); 03198 03199 03200 }}; 03201 03202 #endif
(C) Copyright Intel Corporation 2007-2008. All Rights Reserved.
Generated on Thu Mar 6 15:07:54 2008 for Martini by