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 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

View File

@@ -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};
}
}
});
}