Winscope を実行する

Winscope トレースは Android フレームワークの一部です。このページでは、Winscope トレース ビューアをローカルでダウンロード、ビルド、実行するために必要な手順について概説します。

Winscope をローカルでビルドする

Winscope トレーサーを実行するために PC をセットアップする手順は次のとおりです。

  1. Android ソースをダウンロードします
  2. 次の Winscope フォルダに移動します。

    cd development/tools/winscope
    
  3. 以下を使用して依存関係をインストールします。

    npm install
    

    使用可能なコマンドのリストを表示するには、npm run を実行します。

  4. 以下を使用して、すべての本番環境およびテスト ターゲットをビルドします。

    npm run build:prod
    
  5. 次を使用して Winscope を実行します。

    npm run start
    

個々の部分をビルドする

Winscope の個々の部分は、次のコマンドを使用して個別にビルドできます。

コマンド 説明
build:trace_processor Perfetto の trace_processor の最新バージョンをチェックアウトして
再ビルドします。
build:protos proto 定義を再コンパイルします。

テストを実行する

Winscope には、単体テストとエンドツーエンド テストが含まれています。各テストを実行するには、npm run <command> を使用します。

コマンド 説明
test:unit:ci CI または presubmit フック用に、簡潔な形式で単体テストを
実行します。
test:unit:dev ローカル開発用に、詳細な形式で単体テストを
実行します。このモードでは、変更が監視され、
正しいテストが自動的に再実行されます。
test:e2e クロスツール プロトコルなどのエンドツーエンド テストを
実行します。
test:presubmit:quiet CI または presubmit フック用に、
すべての presubmit 単体テスト、linter、グラフ分析を簡潔な形式で
ビルドします。
test:presubmit ローカル開発用に、すべての presubmit 単体テスト、
linter、グラフ分析を詳細な形式で
ビルドします。
test:all ローカル開発用に、すべてのテスト
(単体テストとエンドツーエンド テスト)、linter、グラフ分析を詳細な形式で
実行します。

@IntDef のマッピングを更新する

@IntDef は、整数の有効な値を制限するために Android で使用されるアノテーションです。Winscope は、これらのアノテーションのマッピングを使用して、整数ではなく値の名前を表示します。

@IntDef のマッピングを更新する手順は次のとおりです。

  1. 実行するアノテーション プリプロセッサの :framework-minus-apex-intdefs をビルドします。

    mp :framework-minus-apex-intdefs
    
  2. 生成された intDefMapping.json ファイルをビルド済みのリポジトリにコピーします。

    $ python3 -c 'import sys,json,collections; print(json.dumps(collections.OrderedDict(sorted(collections.ChainMap(*map(lambda x:json.load(open(x)), sys.argv[1:])).items())), indent=2))' $(find out/soong/.intermediates/frameworks/base -iname intDefMapping.json) > ./development/tools/winscope/src/common/intDefMapping.json
    
  3. repo upload を使用して、Winscope で変更をアップロードします。

その他のコマンド

以下の表に示すように、Winscope スクリプトには、ビルドとテスト以外にもさまざまな機能が含まれています。各機能を実行するには、npm run command を使用します。

コマンド 説明
format:check prettier を使用してコードの形式の問題を確認します。
format:fix prettier を使用してコードの形式の問題を確認し、自動的に修正します。
eslint:check eslint を使用してコードの形式の問題を確認します。
eslint:fix eslint を使用してコードの形式の問題を確認し、自動的に修正します。
tslint:check tslint を使用してコードの形式の問題を確認します。
tslint:fix tslint を使用してコードの形式の問題を確認し、自動的に修正します。
deps_graph:check_cycles コードを分析して循環依存関係がないか確認します。

トラブルシューティング

以下のヒントを参考にしてトラブルシューティングを行ってください。

  • ProtocolError: missing required '<FIELD>' または TypeError: Cannot read property '<PROP>' of null というエラー

    • このエラーは、新しい必須フィールドが含まれている proto 定義でトレース ファイルが新規作成された場合に発生します。

      1. 正しい Winscope バージョン(master、S、または R)でトレースを開いていることを確認します。
      2. proto に新しいフィールドを作成する場合は、npm run build:protos を使用して Winscope で proto を再コンパイルします。

  • インストールされている依存関係のバージョンが正しくない(ビルドに失敗する)

    • package.jsonpackage-lock.json の変更を元に戻し、node_modules を削除してから、npm install を再実行します。
  • proto ファイルの一つに新しいフィールドを追加しました。これを表示するにはどうすればよいですか?

    • Winscope はコンパイル時の proto 定義を使用するため、デフォルトでは新しいフィールドは表示されません。新しいフィールドを表示するには、npm run build:protos を使用して protos を再ビルドします。