Ejecuta Winscope

El seguimiento de Winscope forma parte del framework de Android. En esta página, se describen los pasos necesarios para descargar, compilar y ejecutar el visor de seguimiento de Winscope de forma local.

Compila Winscope de forma local

Sigue estos pasos para configurar tu PC para ejecutar el rastreador de Winscope:

  1. Descarga la fuente de Android.
  2. Navega a la carpeta de Winscope:

    cd development/tools/winscope
    
  3. Instala las dependencias con el siguiente comando:

    npm install
    

    Para ver una lista de los comandos disponibles, ejecuta npm run.

  4. Compila todos los destinos de producción y prueba con el siguiente comando:

    npm run build:prod
    
  5. Ejecuta Winscope con el siguiente comando:

    npm run start
    

Compila partes separadas

Puedes compilar partes individuales de Winscope por separado con los siguientes comandos:

Comando Descripción
build:trace_processor Extrae y vuelve a compilar la versión más reciente de
de Perfetto trace_processor.
build:protos Vuelve a compilar las definiciones de proto.

Cómo ejecutar pruebas

Winscope contiene pruebas de unidades y de extremo a extremo. Para ejecutarlas, usa npm run <command>:

Comando Descripción
test:unit:ci Ejecuta las pruebas de unidades en un formato menos detallado para CI
o el hook de envío previo.
test:unit:dev Ejecuta las pruebas de unidades en un formato más detallado para
el desarrollo local. Este modo supervisa los cambios y
vuelve a ejecutar automáticamente las pruebas correctas.
test:e2e Ejecuta las pruebas de extremo a extremo, como las del
protocolo de herramientas cruzadas.
test:presubmit:quiet Compila todas las pruebas de unidades de envío previo, los linters y el análisis de gráficos
en un formato menos detallado para CI o el hook de envío
previo.
test:presubmit Compila todas las pruebas de unidades de envío previo, los linters y el análisis de gráficos
en un formato más detallado para el desarrollo
local.
test:all Ejecuta todas las pruebas (de unidades y de extremo a extremo), los linters y el
análisis de gráficos en un formato más detallado para el desarrollo
local.

Pruebas de extremo a extremo

Antes de ejecutar las pruebas de extremo a extremo, debes iniciar la herramienta remota y, luego, instalar la versión correcta del controlador de Chrome. En el siguiente fragmento de código, el comando run test:e2e instala automáticamente el controlador de Chrome.

$ npm run start
$ npm run start:remote_tool_mock
$ npm run test:e2e

En la siguiente tabla, se enumeran los comandos necesarios y sus descripciones. Para ejecutar los, usa npm run command:

Comando Descripción
start:remote_tool_mock Inicia la simulación de la herramienta remota para probar el protocolo de herramientas cruzadas.
install:chromedriver Instala el controlador de Chrome necesario para ejecutar pruebas de extremo a extremo.

Actualiza la asignación de @IntDef

@IntDef es una anotación que se usa en Android para restringir los valores posibles de un número entero. Winscope usa una asignación de estas anotaciones para mostrar el nombre del valor en lugar del número entero.

Si se agregan valores @IntDef nuevos al framework de Android, pero no se actualizan en Winscope, se muestran como valores enteros sin procesar en lugar de cadenas descriptivas. Para solucionar este problema, actualiza el archivo de asignación de IntDef (development/tools/winscope/src/common/intDefMapping.json).

Para actualizar automáticamente la asignación de @IntDef, haz lo siguiente:

  1. Ejecuta la secuencia de comandos update_intdef_mappings.sh desde el directorio development/tools/winscope/scripts/ en tu árbol de Android local. Esta secuencia de comandos activa el proceso de anotación que extrae los valores @IntDef más recientes del código y actualiza intDefMapping.json:

    cd development/tools/winscope
    ./scripts/update_intdef_mappings.sh
    
  2. Confirma los cambios en src/common/intDefMapping.json con el comando git commit y súbelos con el comando repo upload.

Si la secuencia de comandos no está disponible, sigue estos pasos para actualizar la asignación de @IntDef de forma manual desde tu directorio raíz de Android ($ANDROID_BUILD_TOP):

  1. Compila framework-minus-apex-intdefs para que se ejecute el preprocesador de anotaciones:

    m framework-minus-apex-intdefs
    
  2. Copia el archivo intDefMapping.json generado en el repositorio de precompilaciones:

    $ 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. Sube los cambios en Winscope con repo upload.

Otros comandos

Además de la compilación y las pruebas, las secuencias de comandos de Winscope contienen otras capacidades, como se muestra en la tabla. Para ejecutarlas, usa npm run command:

Comando Descripción
format:check Verifica si hay problemas de formato de código con prettier.
format:fix Verifica y corrige automáticamente los problemas de formato de código con prettier.
eslint:check Verifica si hay problemas de formato de código con eslint.
eslint:fix Verifica y corrige automáticamente los problemas de formato de código con eslint.
tslint:check Verifica si hay problemas de formato de código con tslint.
tslint:fix Verifica y corrige automáticamente los problemas de formato de código con tslint.
deps_graph:check_cycles Analiza el código en busca de dependencias cíclicas.

Solución de problemas

Usa las siguientes sugerencias para solucionar problemas:

  • Error ProtocolError: missing required '<FIELD>' o TypeError: Cannot read property '<PROP>' of null

    • Esto ocurre cuando el archivo de seguimiento se creó con una nueva definición de proto que contiene campos obligatorios nuevos.

      1. Asegúrate de abrir el seguimiento en la versión correcta de Winscope (master, S o R).
      2. Si creas el campo nuevo en el proto, vuelve a compilar los protos en Winscope con npm run build:protos.

  • Algunas versiones de dependencias instaladas son incorrectas (falla la compilación)

    • Revierte los cambios en package.json y package-lock.json. Quita node_modules. Vuelve a ejecutar npm install.
  • Agregué un campo nuevo a uno de los archivos proto. ¿Cómo lo muestro?

    • Winscope usa las definiciones de proto de cuando se compiló, por lo que los campos nuevos no aparecerán de forma predeterminada. Para mostrar campos nuevos, vuelve a compilar los protos con npm run build:protos.