iJIT_NotifyEvent

JIT コンパイル済みコードに関する情報をエージェントに報告します。

構文

int iJIT_NotifyEvent( iJIT_JVM_EVENT event_type, void *EventSpecificData );

説明

関数iJIT_NotifyEventは、event_typeが指すデータとともにEventSpecificDataの通知をエージェントに送信します。レポートされた情報は、インテル® VTune™ プロファイラーのコレクターから取得されたサンプルを関連付けるのに使用されます。この API は、JIT コンパイル後に、JIT コンパイル済みコードの最初のエントリー以前に呼び出す必要があります。

入力パラメーター

パラメーター

説明

iJIT_JVM_EVENT event_type

エージェントに送信された通知コード。イベントタイプの完全なリストは以下を参照してください。

void *EventSpecificData

イベント固有のデータへのポインター。

ここで、event_type には次の値が許可されます :

iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED

JIT メソッドがメモリーにロードされ (JIT コンパイルされた後)、コードが実行される前にこの通知を送信します。iJIT_Method_Load 構造体を EventSpecificData に使用します。関数iJIT_NotifyEventの戻り値は不定です。

iJVM_EVENT_TYPE_SHUTDOWN

終了するプロファイルにこの通知を送信します。EventSpecificData には NULL を使用します。iJIT_NotifyEventは成功すると 1 を返します。

JVM_EVENT_TYPE_METHOD_UPDATE

この通知を送信して、以前レポートされた動的コードに新しいコンテンツを追加します。以前のコンテンツは通知後無効になります。次の必須フィールドを使用して、iJIT_Method_Load構造体をEventSpecificDataで使用します。

  • method_id更新するコードを特定します。

  • method_load_address更新の必要があるコード領域の開始アドレスを指定します。

  • method_size更新されるコード範囲の長さを指定します。

JVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED

インライン動的コードが JIT コンパイルされてメモリーにロードされる場合、親コードが実行を開始する前にこの通知を送信します。EventSpecificData には、iJIT_Method_Inline_Load 構造を使用します。

iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2

JIT された動的コードがメモリーにロードされ、コードが実行される前にこの通知を送信します。EventSpecificData には、iJIT_Method_Load_V2 構造を使用します。

次の構造体を EventSpecificData に使用できます:

iJIT_Method_Inline_Load 構造体

また、iJIT_Method_Inline_Load構造体を使用して JIT コンパイル済みメソッドを記述する場合、レポートするイベントタイプとしてiJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHEDを使用します。iJIT_Method_Inline_Load 構造体には次のフィールドが含まれます:

フィールド

説明

unsigned int method_id

一意なメソッド ID。メソッド ID は 999 以下にはできません。API 関数iJIT_GetNewMethodIDAPI 関数を使用して有効なメソッド ID を取得するか、独自の ID で一意性と適切な範囲を管理します。

unsigned int parent_method_id

直近の親メソッドの ID。メソッド ID は 999 以下にはできません。iJIT_GetNewMethodID API 関数を使用して有効なメソッド ID を取得するか、独自の ID で一意性と適切な範囲を管理します。

char *method_name

メソッドの名前を指定します。オプションでクラス名をプレフィックスとして完全なシグネチャーを追加できます。この引数は NULL にできません。

void *method_load_address

メソッドコードのベースアドレスを指定します。JIT メソッドでない場合 NULL になることがあります。

unsigned int method_size

メソッドがインライン展開されている仮想アドレス。NULL の場合、イベントのデータは受け入れられません。

unsigned int line_number_size

行番号テーブルのエントリー数。0 はエントリーなしを示します。

pLineNumberInfo line_number_table

行番号情報配列へのポインター。line_number_size が 0 の場合 NULL にできます。行番号情報配列の単一エントリーの説明については、LineNumberInfo構造体を参照してください。

char *class_file_name

クラス名。NULL にできます。

char *source_file_name

ソースファイル名。NULL にできます。

iJIT_Method_Load 構造体

また、iJIT_Method_Load 構造体を使用して JIT コンパイル済みメソッドを記述する場合、レポートするイベントタイプとしてiJVM_EVENT_TYPE_METHOD_LOAD_FINISHEDを使用します。異なるスレッドから iJIT_Method_Load構造体には次のフィールドが含まれます。

フィールド

説明

unsigned int method_id

一意なメソッド ID。メソッド ID は 999 以下にはできません。API 関数iJIT_GetNewMethodIDAPI 関数を使用して有効なメソッド ID を取得するか、独自の ID で一意性と適切な範囲を管理します。

char *method_name

メソッドの名前を指定します。オプションでクラス名をプレフィックスとして完全なシグネチャーを追加できます。この引数は NULL にできません。

void *method_load_address

メソッドコードのベースアドレスを指定します。JIT メソッドでない場合 NULL になることがあります。

unsigned int method_size

メソッドがインライン展開されている仮想アドレス。NULL の場合、イベントのデータは受け入れられません。

unsigned int line_number_size

行番号テーブルのエントリー数。0 はエントリーなしを示します。

pLineNumberInfo line_number_table

行番号情報配列へのポインター。line_number_size が 0 の場合 NULL にできます。行番号情報配列の単一エントリーの説明については、LineNumberInfo構造体を参照してください。

unsigned int class_id

このフィールドは現在使用されません。

char *class_file_name

クラス名。NULL にできます。

char *source_file_name

ソースファイル名。NULL にできます。

void *user_data

このフィールドは現在使用されません。

unsigned int user_data_size

このフィールドは現在使用されません。

iJDEnvironmentType env

このフィールドは現在使用されません。

iJIT_Method_Load_V2 構造体

また、iJIT_Method_Load_V2構造体を使用して JIT コンパイル済みメソッドを記述する場合、レポートするイベントタイプとしてiJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2を使用します。異なるスレッドからiJIT_Method_Load_V2構造体には次のフィールドが含まれます。

フィールド

説明

unsigned int method_id

一意なメソッド ID。メソッド ID は 999 以下にはできません。API 関数iJIT_GetNewMethodIDAPI 関数を使用して有効なメソッド ID を取得するか、独自の ID で一意性と適切な範囲を管理します。

char *method_name

メソッドの名前を指定します。オプションでクラス名をプレフィックスとして完全なシグネチャーを追加できます。この引数は NULL にできません。

void *method_load_address

メソッドコードのベースアドレスを指定します。JIT メソッドでない場合 NULL になることがあります。

unsigned int method_size

メソッドがインライン展開されている仮想アドレス。NULL の場合、イベントのデータは受け入れられません。

unsigned int line_number_size

行番号テーブルのエントリー数。0 はエントリーなしを示します。

pLineNumberInfo line_number_table

行番号情報配列へのポインター。line_number_size が 0 の場合 NULL にできます。行番号情報配列の単一エントリーの説明については、LineNumberInfo構造体を参照してください。

char *class_file_name

クラス名。NULL にできます。

char *source_file_name

ソースファイル名。NULL にできます。

char *module_name

モジュール名。NULL にできます。モジュール名は異なる JIT エンジンを区別するのに役立ちます。インテル® VTune™ プロファイラーは、モジュールごとにグループ化されたレポート済みのメソッドを表示します。

LineNumberInfo 構造

レポートを生成するには、コマンドラインで LineNumberInfo 構造体を使用して、コード領域の行番号情報に単一のエントリーを作成します。行番号エントリーの表は、レポートされたコード領域のソースコードへのマップを示す情報を提供します。インテル® VTune™ プロファイラーは、行番号情報を使用してサンプル (仮想アドレス) を行番号に対応付けます。同じソース行に対し異なるコードアドレスがレポートされることがあります。

オフセット

行番号

1

2

12

4

15

2

18

1

21

30

インテル® VTune™ プロファイラーは、クライアント・データを使用して次の表を構成します。

コード範囲

行番号

0-1

2

1-12

4

12-15

2

15-18

1

18-21

30

LineNumberInfo 構造体には次のフィールドが含まれます。

フィールド

説明

unsigned int Offset

メソッドの先頭からの Opcode バイトオフセット。

unsigned int LineNumber

一致するソース行番号のオフセット (ソースファイルの先頭から)

戻り値

戻り値は、特定の iJIT_JVM_EVENT に依存します。

関連情報