From 9c93e69a4fdd9f7efab9ad5ee810cb31689604f8 Mon Sep 17 00:00:00 2001 From: Vishnu Nair Date: Thu, 7 May 2020 17:59:03 -0700 Subject: [PATCH] Look up proto type definitions separately Creating nested types will cause type collisions. Instead search for the type separately. Also fixes an issue parsing sf traces from Q. Fixes: 156034870 Test: yarn run dev Test: open sf trace from q Change-Id: I3c2a283e56985bfee56633a5e914b83ac2a0cf3b --- tools/winscope/src/decode.js | 63 ++++++++++++----------------- tools/winscope/src/sf_visibility.js | 10 +++++ 2 files changed, 36 insertions(+), 37 deletions(-) diff --git a/tools/winscope/src/decode.js b/tools/winscope/src/decode.js index b80ab6d56..94a3de07a 100644 --- a/tools/winscope/src/decode.js +++ b/tools/winscope/src/decode.js @@ -15,11 +15,11 @@ */ -import jsonProtoDefs from 'frameworks/base/core/proto/android/server/windowmanagertrace.proto' -import jsonProtoLogDefs from 'frameworks/base/core/proto/android/server/protolog.proto' -import jsonProtoDefsSF from 'frameworks/native/services/surfaceflinger/layerproto/layerstrace.proto' -import jsonProtoDefsTrans from 'frameworks/native/cmds/surfacereplayer/proto/src/trace.proto' -import jsonProtoDefsWL from 'WaylandSafePath/waylandtrace.proto' +import jsonProtoDefsWm from 'frameworks/base/core/proto/android/server/windowmanagertrace.proto' +import jsonProtoDefsProtoLog from 'frameworks/base/core/proto/android/server/protolog.proto' +import jsonProtoDefsSf from 'frameworks/native/services/surfaceflinger/layerproto/layerstrace.proto' +import jsonProtoDefsTransaction from 'frameworks/native/cmds/surfacereplayer/proto/src/trace.proto' +import jsonProtoDefsWl from 'WaylandSafePath/waylandtrace.proto' import jsonProtoDefsSysUi from 'frameworks/base/packages/SystemUI/src/com/android/systemui/tracing/sysui_trace.proto' import jsonProtoDefsLauncher from 'packages/apps/Launcher3/protos/launcher_trace_file.proto' import protobuf from 'protobufjs' @@ -33,31 +33,16 @@ import { transform_launcher_trace } from './transform_launcher.js' import { fill_transform_data } from './matrix_utils.js' import { mp4Decoder } from './decodeVideo.js' -var protoDefs = protobuf.Root.fromJSON(jsonProtoDefs) - .addJSON(jsonProtoLogDefs.nested) - .addJSON(jsonProtoDefsSF.nested) - .addJSON(jsonProtoDefsTrans.nested) - .addJSON(jsonProtoDefsWL.nested) - .addJSON(jsonProtoDefsSysUi.nested) - .addJSON(jsonProtoDefsLauncher.nested); - -var WindowTraceMessage = protoDefs.lookupType( - "com.android.server.wm.WindowManagerTraceFileProto"); -var WindowMessage = protoDefs.lookupType( - "com.android.server.wm.WindowManagerServiceDumpProto"); -var LayersMessage = protoDefs.lookupType("android.surfaceflinger.LayersProto"); -var LayersTraceMessage = protoDefs.lookupType("android.surfaceflinger.LayersTraceFileProto"); -var TransactionMessage = protoDefs.lookupType("Trace"); -var WaylandMessage = protoDefs.lookupType("org.chromium.arc.wayland_composer.OutputStateProto"); -var WaylandTraceMessage = protoDefs.lookupType("org.chromium.arc.wayland_composer.TraceFileProto"); -var WindowLogMessage = protoDefs.lookupType( - "com.android.server.protolog.ProtoLogFileProto"); -var LogMessage = protoDefs.lookupType( - "com.android.server.protolog.ProtoLogMessage"); -var SystemUiTraceMessage = protoDefs.lookupType( - "com.android.systemui.tracing.SystemUiTraceFileProto"); -var LauncherTraceMessage = protoDefs.lookupType( - "com.android.launcher3.tracing.LauncherTraceFileProto"); +var WmTraceMessage = lookup_type(jsonProtoDefsWm, "com.android.server.wm.WindowManagerTraceFileProto"); +var WmDumpMessage = lookup_type(jsonProtoDefsWm, "com.android.server.wm.WindowManagerServiceDumpProto"); +var SfTraceMessage = lookup_type(jsonProtoDefsSf, "android.surfaceflinger.LayersTraceFileProto"); +var SfDumpMessage = lookup_type(jsonProtoDefsSf, "android.surfaceflinger.LayersProto"); +var SfTransactionTraceMessage = lookup_type(jsonProtoDefsTransaction, "Trace"); +var WaylandTraceMessage = lookup_type(jsonProtoDefsWl, "org.chromium.arc.wayland_composer.TraceFileProto"); +var WaylandDumpMessage = lookup_type(jsonProtoDefsWl, "org.chromium.arc.wayland_composer.OutputStateProto"); +var ProtoLogMessage = lookup_type(jsonProtoDefsProtoLog, "com.android.server.protolog.ProtoLogFileProto"); +var SystemUiTraceMessage = lookup_type(jsonProtoDefsSysUi, "com.android.systemui.tracing.SystemUiTraceFileProto"); +var LauncherTraceMessage = lookup_type(jsonProtoDefsLauncher, "com.android.launcher3.tracing.LauncherTraceFileProto"); const LAYER_TRACE_MAGIC_NUMBER = [0x09, 0x4c, 0x59, 0x52, 0x54, 0x52, 0x41, 0x43, 0x45] // .LYRTRACE const WINDOW_TRACE_MAGIC_NUMBER = [0x09, 0x57, 0x49, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x45] // .WINTRACE @@ -116,7 +101,7 @@ const FILE_TYPES = { dataType: DATA_TYPES.WINDOW_MANAGER, decoder: protoDecoder, decoderParams: { - protoType: WindowTraceMessage, + protoType: WmTraceMessage, transform: transform_window_trace, timeline: true, }, @@ -126,7 +111,7 @@ const FILE_TYPES = { dataType: DATA_TYPES.SURFACE_FLINGER, decoder: protoDecoder, decoderParams: { - protoType: LayersTraceMessage, + protoType: SfTraceMessage, transform: transform_layers_trace, timeline: true, }, @@ -146,7 +131,7 @@ const FILE_TYPES = { dataType: DATA_TYPES.SURFACE_FLINGER, decoder: protoDecoder, decoderParams: { - protoType: LayersMessage, + protoType: SfDumpMessage, transform: (decoded) => transform_layers(true /*includesCompositionState*/, decoded), timeline: false, }, @@ -156,7 +141,7 @@ const FILE_TYPES = { dataType: DATA_TYPES.WINDOW_MANAGER, decoder: protoDecoder, decoderParams: { - protoType: WindowMessage, + protoType: WmDumpMessage, transform: transform_window_service, timeline: false, }, @@ -166,7 +151,7 @@ const FILE_TYPES = { dataType: DATA_TYPES.WAYLAND, decoder: protoDecoder, decoderParams: { - protoType: WaylandMessage, + protoType: WaylandDumpMessage, transform: transform_wl_outputstate, timeline: false, }, @@ -184,7 +169,7 @@ const FILE_TYPES = { dataType: DATA_TYPES.TRANSACTION, decoder: protoDecoder, decoderParams: { - protoType: TransactionMessage, + protoType: SfTransactionTraceMessage, transform: transform_transaction_trace, timeline: true, } @@ -194,7 +179,7 @@ const FILE_TYPES = { dataType: DATA_TYPES.PROTO_LOG, decoder: protoDecoder, decoderParams: { - protoType: WindowLogMessage, + protoType: ProtoLogMessage, transform: transform_protolog, timeline: true, } @@ -221,6 +206,10 @@ const FILE_TYPES = { }, }; +function lookup_type(protoPath, type) { + return protobuf.Root.fromJSON(protoPath).lookupType(type); +} + // Replace enum values with string representation and // add default values to the proto objects. This function also handles // a special case with TransformProtos where the matrix may be derived diff --git a/tools/winscope/src/sf_visibility.js b/tools/winscope/src/sf_visibility.js index db88c22c2..3c70e95ee 100644 --- a/tools/winscope/src/sf_visibility.js +++ b/tools/winscope/src/sf_visibility.js @@ -284,6 +284,16 @@ function fill_inherited_state(layerMap, rootLayers) { const parentHidden = parent && parent.hidden; layer.hidden = is_hidden_by_policy(layer) || parentHidden; layer.verboseFlags = flags_to_string(layer.flags); + + if (!layer.bounds) { + if (!layer.sourceBounds) { + layer.bounds = layer.sourceBounds; + } else if (parent) { + layer.bounds = parent.bounds; + } else { + layer.bounds = {left:0, top:0, right:0, bottom:0}; + } + } }); }