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
This commit is contained in:
Vishnu Nair
2020-05-07 17:59:03 -07:00
parent 414b7cf9e0
commit 9c93e69a4f
2 changed files with 36 additions and 37 deletions

View File

@@ -15,11 +15,11 @@
*/ */
import jsonProtoDefs from 'frameworks/base/core/proto/android/server/windowmanagertrace.proto' import jsonProtoDefsWm from 'frameworks/base/core/proto/android/server/windowmanagertrace.proto'
import jsonProtoLogDefs from 'frameworks/base/core/proto/android/server/protolog.proto' import jsonProtoDefsProtoLog from 'frameworks/base/core/proto/android/server/protolog.proto'
import jsonProtoDefsSF from 'frameworks/native/services/surfaceflinger/layerproto/layerstrace.proto' import jsonProtoDefsSf from 'frameworks/native/services/surfaceflinger/layerproto/layerstrace.proto'
import jsonProtoDefsTrans from 'frameworks/native/cmds/surfacereplayer/proto/src/trace.proto' import jsonProtoDefsTransaction from 'frameworks/native/cmds/surfacereplayer/proto/src/trace.proto'
import jsonProtoDefsWL from 'WaylandSafePath/waylandtrace.proto' import jsonProtoDefsWl from 'WaylandSafePath/waylandtrace.proto'
import jsonProtoDefsSysUi from 'frameworks/base/packages/SystemUI/src/com/android/systemui/tracing/sysui_trace.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 jsonProtoDefsLauncher from 'packages/apps/Launcher3/protos/launcher_trace_file.proto'
import protobuf from 'protobufjs' 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 { fill_transform_data } from './matrix_utils.js'
import { mp4Decoder } from './decodeVideo.js' import { mp4Decoder } from './decodeVideo.js'
var protoDefs = protobuf.Root.fromJSON(jsonProtoDefs) var WmTraceMessage = lookup_type(jsonProtoDefsWm, "com.android.server.wm.WindowManagerTraceFileProto");
.addJSON(jsonProtoLogDefs.nested) var WmDumpMessage = lookup_type(jsonProtoDefsWm, "com.android.server.wm.WindowManagerServiceDumpProto");
.addJSON(jsonProtoDefsSF.nested) var SfTraceMessage = lookup_type(jsonProtoDefsSf, "android.surfaceflinger.LayersTraceFileProto");
.addJSON(jsonProtoDefsTrans.nested) var SfDumpMessage = lookup_type(jsonProtoDefsSf, "android.surfaceflinger.LayersProto");
.addJSON(jsonProtoDefsWL.nested) var SfTransactionTraceMessage = lookup_type(jsonProtoDefsTransaction, "Trace");
.addJSON(jsonProtoDefsSysUi.nested) var WaylandTraceMessage = lookup_type(jsonProtoDefsWl, "org.chromium.arc.wayland_composer.TraceFileProto");
.addJSON(jsonProtoDefsLauncher.nested); var WaylandDumpMessage = lookup_type(jsonProtoDefsWl, "org.chromium.arc.wayland_composer.OutputStateProto");
var ProtoLogMessage = lookup_type(jsonProtoDefsProtoLog, "com.android.server.protolog.ProtoLogFileProto");
var WindowTraceMessage = protoDefs.lookupType( var SystemUiTraceMessage = lookup_type(jsonProtoDefsSysUi, "com.android.systemui.tracing.SystemUiTraceFileProto");
"com.android.server.wm.WindowManagerTraceFileProto"); var LauncherTraceMessage = lookup_type(jsonProtoDefsLauncher, "com.android.launcher3.tracing.LauncherTraceFileProto");
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");
const LAYER_TRACE_MAGIC_NUMBER = [0x09, 0x4c, 0x59, 0x52, 0x54, 0x52, 0x41, 0x43, 0x45] // .LYRTRACE 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 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, dataType: DATA_TYPES.WINDOW_MANAGER,
decoder: protoDecoder, decoder: protoDecoder,
decoderParams: { decoderParams: {
protoType: WindowTraceMessage, protoType: WmTraceMessage,
transform: transform_window_trace, transform: transform_window_trace,
timeline: true, timeline: true,
}, },
@@ -126,7 +111,7 @@ const FILE_TYPES = {
dataType: DATA_TYPES.SURFACE_FLINGER, dataType: DATA_TYPES.SURFACE_FLINGER,
decoder: protoDecoder, decoder: protoDecoder,
decoderParams: { decoderParams: {
protoType: LayersTraceMessage, protoType: SfTraceMessage,
transform: transform_layers_trace, transform: transform_layers_trace,
timeline: true, timeline: true,
}, },
@@ -146,7 +131,7 @@ const FILE_TYPES = {
dataType: DATA_TYPES.SURFACE_FLINGER, dataType: DATA_TYPES.SURFACE_FLINGER,
decoder: protoDecoder, decoder: protoDecoder,
decoderParams: { decoderParams: {
protoType: LayersMessage, protoType: SfDumpMessage,
transform: (decoded) => transform_layers(true /*includesCompositionState*/, decoded), transform: (decoded) => transform_layers(true /*includesCompositionState*/, decoded),
timeline: false, timeline: false,
}, },
@@ -156,7 +141,7 @@ const FILE_TYPES = {
dataType: DATA_TYPES.WINDOW_MANAGER, dataType: DATA_TYPES.WINDOW_MANAGER,
decoder: protoDecoder, decoder: protoDecoder,
decoderParams: { decoderParams: {
protoType: WindowMessage, protoType: WmDumpMessage,
transform: transform_window_service, transform: transform_window_service,
timeline: false, timeline: false,
}, },
@@ -166,7 +151,7 @@ const FILE_TYPES = {
dataType: DATA_TYPES.WAYLAND, dataType: DATA_TYPES.WAYLAND,
decoder: protoDecoder, decoder: protoDecoder,
decoderParams: { decoderParams: {
protoType: WaylandMessage, protoType: WaylandDumpMessage,
transform: transform_wl_outputstate, transform: transform_wl_outputstate,
timeline: false, timeline: false,
}, },
@@ -184,7 +169,7 @@ const FILE_TYPES = {
dataType: DATA_TYPES.TRANSACTION, dataType: DATA_TYPES.TRANSACTION,
decoder: protoDecoder, decoder: protoDecoder,
decoderParams: { decoderParams: {
protoType: TransactionMessage, protoType: SfTransactionTraceMessage,
transform: transform_transaction_trace, transform: transform_transaction_trace,
timeline: true, timeline: true,
} }
@@ -194,7 +179,7 @@ const FILE_TYPES = {
dataType: DATA_TYPES.PROTO_LOG, dataType: DATA_TYPES.PROTO_LOG,
decoder: protoDecoder, decoder: protoDecoder,
decoderParams: { decoderParams: {
protoType: WindowLogMessage, protoType: ProtoLogMessage,
transform: transform_protolog, transform: transform_protolog,
timeline: true, 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 // Replace enum values with string representation and
// add default values to the proto objects. This function also handles // add default values to the proto objects. This function also handles
// a special case with TransformProtos where the matrix may be derived // a special case with TransformProtos where the matrix may be derived

View File

@@ -284,6 +284,16 @@ function fill_inherited_state(layerMap, rootLayers) {
const parentHidden = parent && parent.hidden; const parentHidden = parent && parent.hidden;
layer.hidden = is_hidden_by_policy(layer) || parentHidden; layer.hidden = is_hidden_by_policy(layer) || parentHidden;
layer.verboseFlags = flags_to_string(layer.flags); 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};
}
}
}); });
} }