IAMStats
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
IAMStats インターフェイスは、Filter Graph Manager からパフォーマンスデータを取得します。
解説(Remarks)
各統計は、名前とインデックスによって定義されます。名前からインデックスを取得するには、GetIndex メソッドを使用します。値は常に double 型です。次の統計があらかじめ定義されています。
| 名前 | 説明 |
|---|---|
| RenderFile | IGraphBuilder::RenderFile の各呼び出しに要した時間を測定します。 |
| ConnectDirectInternal | 2 つのフィルターを接続するのに要した時間を測定します。 |
| Build Mapper Cache | 登録済みフィルターに関する情報をキャッシュするのに要した時間を測定します(Filter Mapper オブジェクトが使用します)。 |
| Process Category CategoryName | 特定のカテゴリに属するフィルターに関する情報をキャッシュするのに要した時間を測定します。CategoryName はフィルターカテゴリのフレンドリ名です。(Filter Categories を参照してください。) |
これらの統計はいずれも、値がミリ秒単位の時間を表します。
メソッド 6
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
Reset メソッドは、すべての統計をゼロにリセットします。
戻り値
成功した場合は S_OK を、それ以外の場合は HRESULT エラーコードを返します。
get_Count メソッドは、統計の数を取得します。
| plCount | INT* | out | 統計の数を受け取ります。 |
戻り値
GetValueByIndex メソッドは、インデックスによって統計を取得します。
| lIndex | INT | in | 統計の 0 から始まるインデックスです。 |
| szName | LPWSTR* | out | 統計の名前を受け取る変数へのポインターです。 |
| lCount | INT* | out | 記録された値の数を受け取る変数へのポインターです。 |
| dLast | DOUBLE* | out | 記録された最新の値を受け取る変数へのポインターです。 |
| dAverage | DOUBLE* | out | 平均値を受け取る変数へのポインターです。 |
| dStdDev | DOUBLE* | out | 値の標準偏差を受け取る変数へのポインターです。個数が 2 未満の場合、標準偏差は 0 になります。 |
| dMin | DOUBLE* | out | 記録された最小値を受け取る変数へのポインターです。 |
| dMax | DOUBLE* | out | 記録された最大値を受け取る変数へのポインターです。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| 成功しました。 | |
| インデックスが範囲外です。 | |
| メモリが不足しています。 | |
| 引数が NULL ポインターです。 |
解説(Remarks)
呼び出し元は、szName で返される文字列を SysFreeString 関数を呼び出して解放する必要があります。
統計の数を取得するには、IAMStats::GetIndex を呼び出します。
GetValueByName メソッドは、名前によって統計を取得します。
| szName | LPWSTR | in | 統計の名前を指定します。 |
| lIndex | INT* | out | この統計のインデックスを受け取る変数へのポインターです。 |
| lCount | INT* | out | 記録された値の数を受け取る変数へのポインターです。 |
| dLast | DOUBLE* | out | 記録された最新の値を受け取る変数へのポインターです。 |
| dAverage | DOUBLE* | out | 平均値を受け取る変数へのポインターです。 |
| dStdDev | DOUBLE* | out | 値の標準偏差を受け取る変数へのポインターです。個数が 2 未満の場合、標準偏差は 0 になります。 |
| dMin | DOUBLE* | out | 記録された最小値を受け取る変数へのポインターです。 |
| dMax | DOUBLE* | out | 記録された最大値を受け取る変数へのポインターです。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| 成功しました。 | |
| この名前に一致するものがありません。 | |
| 引数が NULL ポインターです。 |
GetIndex メソッドは、名前付き統計のインデックスを取得するか、新しい統計を作成します。
| szName | LPWSTR | in | 統計の名前を指定します。 |
| lCreate | INT | in | 統計がまだ定義されていない場合に、その統計を作成するかどうかを指定します。値が TRUE の場合、その名前を持つ既存のエントリが見つからないと、メソッドは統計用の新しいインデックスを作成します。値が FALSE の場合、統計がまだ存在しないと、メソッドは失敗します。 |
| plIndex | INT* | out | インデックスを受け取ります。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| 成功しました。 | |
|
この名前に一致するものがありません。 |
| 引数が NULL ポインターです。 |
AddValue メソッドは、新しい値を記録します。
| lIndex | INT | in | 統計のインデックスを指定します。 |
| dValue | DOUBLE | in | 記録する値を指定します。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| 成功しました。 | |
| インデックスが範囲外です。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAMStats "{BC9BCF80-DCD2-11D2-ABF6-00A0C905F375}" #usecom global IAMStats IID_IAMStats "{}" #comfunc global IAMStats_Reset 7 #comfunc global IAMStats_get_Count 8 var #comfunc global IAMStats_GetValueByIndex 9 int,var,var,var,var,var,var,var #comfunc global IAMStats_GetValueByName 10 wstr,var,var,var,var,var,var,var #comfunc global IAMStats_GetIndex 11 wstr,int,var #comfunc global IAMStats_AddValue 12 int,double ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IAMStats "{BC9BCF80-DCD2-11D2-ABF6-00A0C905F375}" #usecom global IAMStats IID_IAMStats "{}" #comfunc global IAMStats_Reset 7 #comfunc global IAMStats_get_Count 8 sptr #comfunc global IAMStats_GetValueByIndex 9 int,sptr,sptr,sptr,sptr,sptr,sptr,sptr #comfunc global IAMStats_GetValueByName 10 wstr,sptr,sptr,sptr,sptr,sptr,sptr,sptr #comfunc global IAMStats_GetIndex 11 wstr,int,sptr #comfunc global IAMStats_AddValue 12 int,double ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。