Pia 内部で実際にどれだけのリソースが消費されたかを取得するために、ウォーターマーク機能が用意されています。
例えば PiaTransport では、内部バッファのサイズをアプリケーションが指定できるようになっています。このウォーターマーク機能を用いて、プログラム実行時に内部バッファがどれだけ使用されたかを知ることで、アプリケーションプログラマは適切な内部バッファのサイズを決定でき、メモリを効率的に配分することができます。
ウォーターマーク機能を利用するためには、アプリケーションが明示的に WatermarkManager シングルトンのインスタンスを作成する必要があります。シングルトン作成は、 common::BeginSetup() ~ common::EndSetup() 間で実行する必要があります。
nn::pia::Result result;
result = nn::pia::common::BeginSetup(); PIA_ASSERT(result.IsSuccess()); // (他のシングルトンを作成するコード) // ......... // ......... // WatermarkManagerのシングルトン作成 result = nn::pia::common::WatermarkManager::CreateInstance(); PIA_ASSERT(result.IsSuccess()); result = nn::pia::common::EndSetup(); PIA_ASSERT(result.IsSuccess()); |
次に、計測の開始を指示します。
nn::pia::common::WatermarkManager::GetInstance()->EnableAllWatermark();
|
最後に、アプリケーションによる一連の処理を行った後で、対象の計測結果を取得します。以下のコードでは、一例として PiaTransport の送信バッファの計測結果を取得しています。
nn::pia::common::WatermarkManager* pMgr = nn::pia::common::WatermarkManager::GetInstance();
nn::pia::common::Watermark* pMark = pMgr->GetWatermark(nn::pia::common::WatermarkManager::KeySendthreadstreamBufferNum); if(pMark->GetUpdateCount() > 0) { PIA_SAMPLE_PRINT("Watermark: <%s> max: %lld, min: %lld, latest: %lld, Updates: %lld\n", pMark->GetName(), pMark->GetMaxValue(), pMark->GetMinValue(), pMark->GetLatestValue(), pMark->GetUpdateCount() ); } |
以下に、上記の手順で得られた結果の一例を示します。max: の右脇にある数字が、送信バッファ使用量のピーク値となります。アプリケーションプログラマはこの結果を参考にして、適切な送信バッファのサイズを決めることができます。
Watermark: <SendThreadStream buffer num> max: 6, min: 0, latest: 0, Updates: 14342
|
ウォーターマーク機能で取得可能な値は、 WatermarkManager クラスで KeyXxxYyyZzz のように列挙されている定数に対応するものに限定されます。