2013-06-20 6 views
10

私は年月を要するビルドビルドを持っています。それは大きくて複雑なので、どこから掃除を開始するのかは分かりません。それは、依存関係、名前付きタスク、スコープなど、ビルドの構造に関する多くのメタデータを保持しているようです。このすべてのメタデータでは、ジャンプしてスコープ付きの別個のタスクがどれくらいの時間を要しているかを非常に簡単に測定できるように思えます。これをログメッセージに基づくのではなくコード内で行うと、よりクリーンな感じになるだけでなく、並行ビルドやログ時間を誤解させる可能性のある他の複雑な処理をうまく処理できるという利点があります。ビルドのプロファイリング

現在、これを行うための設備はありますか?それは "ユーザー"ビルドでできることのような気がしませんが、おそらくSBTプラグインはタスクスターターを引っ掛け、最後にタイミングの大きなレポートを維持/生成する可能性があります。瞬時に起こることに時間を浪費することなく、遅いものを改善することに私の努力を集中させるのに本当に役立つだろう。

答えて

3

私は以前もまったく同じ問題を抱えていました。 https://github.com/sbt-android-mill/sbt-android-mill

ここに発表します - https://groups.google.com/forum/#!msg/scala-on-android/TsmmJA4uvQ4/LMvAxuovXoMJ SBTログの時間フィールドに注意してください。

スタンドウォッチのようなもの(依存関係にあるもの)が少なく、プロファイリング統計を使用した魅力的なHTMLレポートがあります。

+0

ありがとうございます!私はコードを読んでみましたが、この作業をするために何をやっているのかをすぐに理解することはできません。あなたは計装された標準的なプロジェクト構造を定義していますか、あるいは任意のsbtビルドを時間を計ることができるようにsbtをフックする方法を見つけましたか?私の問題は、既に巨大なビルドがあり、すべてのタスク(sbtの定義済みタスクを含む)にストップウォッチコールを追加することなくプロファイルを作成したいと思うことです。あなたのアプローチはそれを処理しますか? – copumpkin

+0

_sbt/android/mill/Mill.scala_に 'totalStopwatch'、' profilingGroups'を定義し、自分のコードを 'stopwatchGroup(" blabla "){code}'でラップします。 のようなプロファイリング(例えば_sbt/android/mill/compile/compile.scala_)の汎用SBTタスクを 'Configurations.Compileでコンパイルする' = Configurations.Compile dependsOn compileStageCorePre' - start stopwatchと 'compileStageCore < <= compileStageCore dependsOn(compileStagePrepare、Configurations.Compileでコンパイル) ' - Stopwatchを停止します。 _Compile.scala_の一番下の1行のタスクです 'taskPre'メソッドと' taskPost'メソッドに注意してください。 – Ezhik

+0

本当に複雑なプロジェクトがある場合は、プロファイリングを追加して最適化し、毎月の時間を無駄にしないように最適化することをお勧めします。 – Ezhik

関連する問題