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 または送信前フック用に、すべての送信前単体テスト、リンタ、グラフ分析を簡潔な形式でビルドします。

test:presubmit ローカル開発用に、すべての presubmit 単体テスト、リンタ、グラフ分析をより詳細な形式でビルドします。

test:all ローカル開発用に、すべてのテスト(単体テストとエンドツーエンド テスト)、リンター、グラフ分析をより詳細な形式で実行します。

@IntDef のマッピングを更新

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

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

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

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

    $ 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 ファイルの 1 つに新しいフィールドを追加しました。表示するにはどうすればよいですか?

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