Búsqueda de seguimiento

Usa SQL para encontrar estados específicos en los seguimientos de Perfetto de Winscope. Usa el visor global de Búsqueda en la IU de Winscope para ejecutar consultas y visualizar los resultados tabulados:

pestaña del visor de búsqueda

Figura 1: Pestaña Buscar (Search) del usuario.

El visor de búsqueda te permite escribir y ejecutar consultas de SQL personalizadas en los registros de Perfetto y acceder a las consultas recientes y guardadas. Winscope proporciona vistas de SQL especializadas para ayudar a buscar seguimientos de SurfaceFlinger y transacciones.

Usa las siguientes convenciones para todas las vistas:

  • Para columnas property y flat_property:

    • Los nombres de las propiedades están en mayúsculas y minúsculas, por ejemplo, visible_region de LayerProto.
    • Se usa una notación de puntos para representar propiedades anidadas, por ejemplo, visible_region.rect.

    • Los campos repetidos en property se distinguen con corchetes:

      Por ejemplo, dentro de dos instancias del campo repetido visible_region.rect, el campo top está representado por visible_region.rect[0].top y visible_region.rect[1].top.

    • Los campos repetidos en flat_property no se distinguen:

      Por ejemplo, dentro de dos instancias del campo repetido visible_region.rect, el campo top está representado por visible_region.rect.top en ambas instancias.

  • Para columnas value y previous_value:

    • Los valores booleanos se representan con '0' (False) o '1' (True).

Vistas de SQL de SurfaceFlinger

Los datos de proto de SurfaceFlinger usan estos formatos:

Para buscar datos de capas, usa la vista sf_layer_search. Esta vista incluye las siguientes columnas:

Column Descripción
state_id Es el ID único de la entrada a la que pertenece la capa.
ts Marca de tiempo de la entrada a la que pertenece la capa
layer_id ID de la capa
parent_id ID de la capa superior
layer_name Nombre de la capa
property Registro del nombre de la propiedad para campos repetidos
flat_property El nombre de la propiedad no tiene en cuenta los campos repetidos.
value Valor de la propiedad en formato de cadena
previous_value Es el valor de la propiedad de la entrada anterior en formato de cadena.

Para buscar datos de raíz de jerarquía, usa la vista sf_hierarchy_root_search. Esta vista incluye las siguientes columnas:

Column Descripción
state_id ID único de la entrada
ts Marca de tiempo de la entrada
property Registro del nombre de la propiedad para campos repetidos
flat_property El nombre de la propiedad no tiene en cuenta los campos repetidos.
value Valor de la propiedad en formato de cadena
previous_value Es el valor de la propiedad de la entrada anterior en formato de cadena.

Consultas de ejemplo

  • Busca todos los fotogramas en los que la capa IME tenga límites de pantalla válidos:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name like 'IME%'
      AND property='screen_bounds.bottom'
      AND value<='24000'
    
  • Busca todos los fotogramas en los que cambia la capa Taskbar color.a (alfa):

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name like 'Taskbar%'
      AND property='color.a'
      AND value!=previous_value
    
  • Busca todas las tramas en las que el límite inferior de Wallpaper sea menor o igual que 2,400:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name LIKE 'Wallpaper%'
      AND property='bounds.bottom'
      AND cast_int!(value) <= 2400
    
  • Muestra una lista de todas las propiedades de las pantallas con una pila de capas válida:

    SELECT STATE.* FROM sf_hierarchy_root_search STATE_WITH_DISPLAY_ON
    INNER JOIN sf_hierarchy_root_search STATE
      ON STATE.state_id = STATE_WITH_DISPLAY_ON.state_id
      AND STATE_WITH_DISPLAY_ON.flat_property='displays.layer_stack'
      AND STATE_WITH_DISPLAY_ON.value!='4294967295'
      AND STATE.property LIKE CONCAT(
        SUBSTRING(
            STATE_WITH_DISPLAY_ON.property,
            0,
            instr(STATE_WITH_DISPLAY_ON.property, ']')
        ),
        '%'
      )
    

Vista de SQL de Transactions

Los datos de proto de transacciones usan el formato TransactionTraceEntry.

Para buscar datos de transacciones, usa la vista transactions_search. Esta vista incluye las siguientes columnas:

Column Descripción
state_id Es el ID único de la entrada a la que pertenece la propiedad proto.
ts Marca de tiempo de la entrada a la que pertenece la propiedad proto
transaction_id ID de transacción (si está disponible)
property Registro del nombre de la propiedad para campos repetidos
flat_property El nombre de la propiedad no tiene en cuenta los campos repetidos.
value Valor de la propiedad en formato de cadena

Consultas de ejemplo

  • Busca el fotograma en el que se aplicó una transacción para cambiar la posición de la capa X a -54.0:

    SELECT ts, transaction_id, value FROM transactions_search
      WHERE flat_property='transactions.layer_changes.x'
      AND value='-54.0'
    
  • Busca el marco en el que se agregó la capa ImeContainer:

    SELECT ts FROM transactions_search
      WHERE flat_property='added_layers.name'
      AND value='ImeContainer'
    

Vista de SQL de Transitions

Los datos de proto de transición usan el formato ShellTransition.

Para buscar datos de transiciones, usa la vista transitions_search. Esta vista incluye las siguientes columnas:

Column Descripción
ts Tiempo de despacho: Si está disponible, se usa la hora de envío; de lo contrario, se usa 0.
transition_id ID de transición
property Registro del nombre de la propiedad para campos repetidos
flat_property El nombre de la propiedad no tiene en cuenta los campos repetidos.
value Valor de la propiedad en formato de cadena

Consultas de ejemplo

Encuentra las propiedades de las transiciones que controla DefaultMixedHandler:

  SELECT
    PROPS.ts,
    PROPS.transition_id,
    PROPS.property,
    PROPS.value
  FROM transitions_search HANDLER_MATCH
  INNER JOIN transitions_search PROPS
    ON HANDLER_MATCH.transition_id = PROPS.transition_id
  WHERE HANDLER_MATCH.property = 'handler'
    AND HANDLER_MATCH.value LIKE "%DefaultMixedHandler"
  ORDER BY PROPS.transition_id, PROPS.property

Vista de SQL de ViewCapture

Los datos de proto de ViewCapture usan el formato View.

Para buscar datos de ViewCapture, usa la vista viewcapture_search. Esta vista incluye las siguientes columnas:

Column Descripción
state_id Es el ID único del estado al que pertenece la vista.
ts Marca de tiempo del estado al que pertenece la vista
package_name Nombre de paquete
window_name Nombre de la ventana
class_name Cómo ver el nombre de la clase
property Registro del nombre de la propiedad para campos repetidos
flat_property El nombre de la propiedad no tiene en cuenta los campos repetidos.
value Valor de la propiedad en formato de cadena
previous_value Es el valor de la propiedad del estado anterior en formato de cadena.

Consultas de ejemplo

Busca todos los estados cuando SearchContainerView se movió en la dirección y:

  SELECT * FROM viewcapture_search
  WHERE class_name LIKE '%SearchContainerView'
    AND flat_property='translation_y'
    AND value!=previous_value

Tabla de SQL de ProtoLog

Los datos de proto de ProtoLog usan el formato ProtoLogMessage. Esta vista incluye las siguientes columnas:

Column Descripción
ts Marca de tiempo del registro
level Nivel de registro
tag Etiqueta de grupo de registro
message Mensaje de registro
stacktrace Seguimiento de pila (si está disponible)
location Ubicación del código desde la que se origina el mensaje

Consultas de ejemplo

  • Busca todos los registros con un mensaje que contenga transition:

    SELECT ts, message, location FROM protolog
      WHERE message LIKE '%transition%'
    
  • Busca todos los registros que contengan IDs de transacción válidos:

    CREATE PERFETTO VIEW valid_tx_ids AS
      SELECT DISTINCT transaction_id FROM transactions_search
      WHERE transaction_id IS NOT NULL AND transaction_id != '0';
    
    SELECT TRANS.transaction_id, message FROM valid_tx_ids TRANS
    INNER JOIN protolog LOGS
      ON LOGS.message LIKE CONCAT('%', TRANS.transaction_id, '%');
    

Ejecuta consultas

Cuando usas el panel izquierdo, se inicia la búsqueda de seguimiento. Este proceso tardará unos segundos. Mientras se inicia, la línea de tiempo no está disponible.

Después de inicializar la búsqueda de seguimiento, escribe una consulta en el cuadro de búsqueda y haz clic en Run Search Query o presiona Intro en el teclado para ejecutarla.

Cuando termines, la tabla de resultados aparecerá en el panel del medio. Tu consulta aparecerá debajo del cuadro de búsqueda, con un campo para guardarla entre sesiones.

Para acceder a las consultas guardadas, haz clic en la pestaña Guardados en el panel izquierdo, y para acceder a las consultas ejecutadas recientemente, haz clic en la pestaña Recientes:

panel izquierdo del visor de búsqueda

Figura 2: Panel izquierdo del visor de búsqueda.

Resultados

Todas las consultas muestran resultados tabulados, que se muestran en una vista desplazable con un comportamiento interactivo similar al de los visores de seguimiento basados en registros, como Transactions y ProtoLog:

resultados del visor de búsqueda

Figura 3: Resultados del visor de búsqueda.

Si la tabla resultante contiene una columna ts, los valores de esa columna se interpretan como marcas de tiempo y se agregan a la superposición de cronograma como una fila nueva de entradas. Haz clic en esta fila y usa las teclas de flecha hacia la izquierda y la derecha para navegar entre las entradas:

línea de tiempo de búsqueda

Figura 4: Línea de tiempo de búsqueda.