3

ここから再投稿)

タスクの実行時間を測定/ログに記録しようとしています。

前に1つのタスクを追加し、後に1つのタスクを追加してタスクを「ラップ」することを検討しましたが、sbtは半順序のみを保証するため、これは毎回機能するとは限りません。

より良いラッピングは、これらの線に沿ったものになります。

wrappedTask := {
  startMeasuringTime()
  somehowInvoke(myTaskKey in SomeContext)
  endMeasuringTime()
}

この「どういうわけかInvoke」はどうあるべきですか?

4

1 に答える 1

3

タスクにかかる時間を測定するには、タスクエグゼキュータのサポートが必要です。あなたが暗示しているように、タスクプリミティブを使用するだけではこれを行うことはできません。しばらく前に書いた、アイデアを示すサンプルコードをプッシュしました。

サンプルコードが処理しない複雑さは、ユーザーが概念的に1つのタスク(コンパイルなど)と考えるものが実際には複数のタスクとして実装される可能性があり、それらのタイミングを組み合わせる必要があることです。また、internalDependencyClasspath他のタスク(flatMap)を「呼び出す」ようなタスクは、その実行時間に「呼び出された」タスクの実行時間を含みます。

編集:これは、602c1759a1885および1cc2f57e158389759の実験的な機能として0.13.0用に実装されました。ExecuteProgressインターフェイスは、前述の問題が問題にならないようにするための十分な情報を提供します。

于 2012-09-12T19:45:03.473 に答える