diff --git a/tools/winscope/adb_proxy/winscope_proxy.py b/tools/winscope/adb_proxy/winscope_proxy.py index 0fba4735b..21a78546e 100755 --- a/tools/winscope/adb_proxy/winscope_proxy.py +++ b/tools/winscope/adb_proxy/winscope_proxy.py @@ -235,7 +235,7 @@ class WindowManagerTraceSelectedConfig: # defaults set for all configs self.selectedConfigs = { "wmbuffersize": "16000", - "tracinglevel": "all", + "tracinglevel": "debug", "tracingtype": "frame", } diff --git a/tools/winscope/src/DataAdb.vue b/tools/winscope/src/DataAdb.vue index 85c55ec1e..bd484c8b1 100644 --- a/tools/winscope/src/DataAdb.vue +++ b/tools/winscope/src/DataAdb.vue @@ -243,8 +243,8 @@ const WM_SELECTED_CONFIG = { 'transaction', ], 'tracinglevel': [ - 'all', - 'trim', + 'verbose', + 'debug', 'critical', ], }; diff --git a/tools/winscope/src/decode.js b/tools/winscope/src/decode.js index dde10413f..c4ed60623 100644 --- a/tools/winscope/src/decode.js +++ b/tools/winscope/src/decode.js @@ -537,6 +537,7 @@ function decodeAndTransformProto(buffer, params, displayDefaults) { // From S onwards, returns a LayerTrace object, iterating over multiple items allows // winscope to handle both the new and legacy formats // TODO Refactor the decode.js code into a set of decoders to clean up the code + let lastError = null; for (var x = 0; x < objTypesProto.length; x++) { const objType = objTypesProto[x]; const transform = transforms[x]; @@ -546,9 +547,14 @@ function decodeAndTransformProto(buffer, params, displayDefaults) { const transformed = transform(decoded); return transformed; } catch (e) { + lastError = e; // check next parser } } + + if (lastError) { + throw lastError; + } throw new UndetectableFileType('Unable to parse file'); } diff --git a/tools/winscope/src/flickerlib/WindowManagerState.ts b/tools/winscope/src/flickerlib/WindowManagerState.ts index 0f132547c..57f3dd7c4 100644 --- a/tools/winscope/src/flickerlib/WindowManagerState.ts +++ b/tools/winscope/src/flickerlib/WindowManagerState.ts @@ -89,7 +89,8 @@ function createWindowManagerPolicy(proto: any): WindowManagerPolicy { function createRootWindowContainer(proto: any): RootWindowContainer { const windowContainer = WindowContainer.fromProto( /* proto */ proto.windowContainer, - /* childrenProto */ proto.windowContainer.children.reverse() + /* childrenProto */ proto.windowContainer?.children?.reverse() ?? [], + /* isActivityInTree */ false ); if (windowContainer == null) { diff --git a/tools/winscope/src/flickerlib/windows/Activity.ts b/tools/winscope/src/flickerlib/windows/Activity.ts index 60e28cdd8..77574b641 100644 --- a/tools/winscope/src/flickerlib/windows/Activity.ts +++ b/tools/winscope/src/flickerlib/windows/Activity.ts @@ -25,7 +25,7 @@ Activity.fromProto = function (proto: any): Activity { } else { const windowContainer = WindowContainer.fromProto( /* proto */ proto.windowToken.windowContainer, - /* protoChildren */ proto.windowToken.windowContainer.children.reverse(), + /* protoChildren */ proto.windowToken.windowContainer?.children?.reverse() ?? [], /* isActivityInTree */ true, /* nameOverride */ null, /* identifierOverride */ proto.identifier diff --git a/tools/winscope/src/flickerlib/windows/DisplayArea.ts b/tools/winscope/src/flickerlib/windows/DisplayArea.ts index 0abfdeeaa..a46eaefe4 100644 --- a/tools/winscope/src/flickerlib/windows/DisplayArea.ts +++ b/tools/winscope/src/flickerlib/windows/DisplayArea.ts @@ -24,7 +24,7 @@ DisplayArea.fromProto = function (proto: any, isActivityInTree: Boolean): Displa } else { const windowContainer = WindowContainer.fromProto( /* proto */ proto.windowContainer, - /* protoChildren */ proto.windowContainer.children.reverse(), + /* protoChildren */ proto.windowContainer?.children?.reverse() ?? [], /* isActivityInTree */ isActivityInTree, /* nameOverride */ proto.name ); diff --git a/tools/winscope/src/flickerlib/windows/DisplayContent.ts b/tools/winscope/src/flickerlib/windows/DisplayContent.ts index 7a9f6af5a..39703ef04 100644 --- a/tools/winscope/src/flickerlib/windows/DisplayContent.ts +++ b/tools/winscope/src/flickerlib/windows/DisplayContent.ts @@ -24,7 +24,7 @@ DisplayContent.fromProto = function (proto: any, isActivityInTree: Boolean): Dis } else { const windowContainer = WindowContainer.fromProto( /* proto */ proto.rootDisplayArea.windowContainer, - /* protoChildren */ proto.rootDisplayArea.windowContainer.children.reverse(), + /* protoChildren */ proto.rootDisplayArea.windowContainer?.children?.reverse() ?? [], /* isActivityInTree */ isActivityInTree, /* nameOverride */ proto.displayInfo?.name ?? null ); diff --git a/tools/winscope/src/flickerlib/windows/Task.ts b/tools/winscope/src/flickerlib/windows/Task.ts index 685d94173..858360717 100644 --- a/tools/winscope/src/flickerlib/windows/Task.ts +++ b/tools/winscope/src/flickerlib/windows/Task.ts @@ -25,7 +25,7 @@ Task.fromProto = function (proto: any, isActivityInTree: Boolean): Task { const windowContainerProto = proto.taskFragment?.windowContainer ?? proto.windowContainer; const windowContainer = WindowContainer.fromProto( /* proto */ windowContainerProto, - /* protoChildren */ windowContainerProto.children.reverse(), + /* protoChildren */ windowContainerProto?.children?.reverse() ?? [], /* isActivityInTree */ isActivityInTree ); diff --git a/tools/winscope/src/flickerlib/windows/TaskFragment.ts b/tools/winscope/src/flickerlib/windows/TaskFragment.ts index 8f5eeed99..10f5502b3 100644 --- a/tools/winscope/src/flickerlib/windows/TaskFragment.ts +++ b/tools/winscope/src/flickerlib/windows/TaskFragment.ts @@ -24,7 +24,7 @@ TaskFragment.fromProto = function (proto: any, isActivityInTree: Boolean): TaskF } else { const windowContainer = WindowContainer.fromProto( /* proto */ proto.windowContainer, - /* protoChildren */ proto.windowContainer.children.reverse(), + /* protoChildren */ proto.windowContainer?.children?.reverse() ?? [], /* isActivityInTree */ isActivityInTree); const entry = new TaskFragment( proto.activityType, diff --git a/tools/winscope/src/flickerlib/windows/WindowContainer.ts b/tools/winscope/src/flickerlib/windows/WindowContainer.ts index 9a99226d8..7d71f38b2 100644 --- a/tools/winscope/src/flickerlib/windows/WindowContainer.ts +++ b/tools/winscope/src/flickerlib/windows/WindowContainer.ts @@ -47,7 +47,8 @@ WindowContainer.fromProto = function ( const children = protoChildren .filter(it => it != null) - .map(it => WindowContainer.childrenFromProto(it, isActivityInTree)); + .map(it => WindowContainer.childrenFromProto(it, isActivityInTree)) + .filter(it => it != null); const identifier = identifierOverride ?? proto.identifier; var name = nameOverride ?? identifier?.title ?? ""; diff --git a/tools/winscope/src/flickerlib/windows/WindowState.ts b/tools/winscope/src/flickerlib/windows/WindowState.ts index 0b79d7306..a9cdf0829 100644 --- a/tools/winscope/src/flickerlib/windows/WindowState.ts +++ b/tools/winscope/src/flickerlib/windows/WindowState.ts @@ -29,7 +29,7 @@ import WindowContainer from "./WindowContainer" const name = getName(identifierName); const windowContainer = WindowContainer.fromProto( /* proto */ proto.windowContainer, - /* protoChildren */ proto.windowContainer.children.reverse(), + /* protoChildren */ proto.windowContainer?.children.reverse() ?? [], /* isActivityInTree */ isActivityInTree, /* nameOverride */ name, /* identifierOverride */ proto.identifier diff --git a/tools/winscope/src/flickerlib/windows/WindowToken.ts b/tools/winscope/src/flickerlib/windows/WindowToken.ts index 3187dd06e..ca973237d 100644 --- a/tools/winscope/src/flickerlib/windows/WindowToken.ts +++ b/tools/winscope/src/flickerlib/windows/WindowToken.ts @@ -25,7 +25,7 @@ WindowToken.fromProto = function (proto: any, isActivityInTree: Boolean): Window const windowContainer = WindowContainer.fromProto( /* proto */ proto.windowContainer, - /* protoChildren */ proto.windowContainer.children.reverse(), + /* protoChildren */ proto.windowContainer?.children?.reverse() ?? [], /* isActivityInTree */ isActivityInTree, /* nameOverride */ null, /* identifierOverride */ null,