diff --git a/tools/winscope/src/flickerlib/WindowManagerState.ts b/tools/winscope/src/flickerlib/WindowManagerState.ts index f7c832c5b..4218da8b3 100644 --- a/tools/winscope/src/flickerlib/WindowManagerState.ts +++ b/tools/winscope/src/flickerlib/WindowManagerState.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { asRawTreeViewObject } from '../utils/diff.js' import { nanosToString, TimeUnits } from "../utils/utils.js" import { getWMPropertiesForDisplay } from './mixin' @@ -26,7 +27,6 @@ import { import WindowContainer from "./windows/WindowContainer" - WindowManagerState.fromProto = function ({proto, timestamp = 0, where = ""}): WindowManagerState { var inputMethodWIndowAppToken = "" if (proto.inputMethodWindow != null) { @@ -44,8 +44,6 @@ WindowManagerState.fromProto = function ({proto, timestamp = 0, where = ""}): Wi inputMethodWIndowAppToken, proto.rootWindowContainer.isHomeRecentsComponent, proto.displayFrozen, - proto.rotation, - proto.lastOrientation, proto.rootWindowContainer.pendingActivities.map(it => it.title), rootWindowContainer, keyguardControllerState, @@ -53,11 +51,16 @@ WindowManagerState.fromProto = function ({proto, timestamp = 0, where = ""}): Wi ) entry.obj = getWMPropertiesForDisplay(proto) + entry.obj["isComplete"] = entry.isComplete() + if (!entry.obj.isComplete) { + entry.obj["isIncompleteReason"] = entry.getIsIncompleteReason() + } entry.name = nanosToString(entry.timestamp, TimeUnits.MILLI_SECONDS) entry.shortName = entry.name entry.children = entry.root.childrenWindows.reverse() entry.chips = [] entry.visible = true + entry.rawTreeViewObject = asRawTreeViewObject(entry) return entry } @@ -101,8 +104,8 @@ function newKeyguardControllerState(proto): KeyguardControllerState { } return new KeyguardControllerState( - proto?.aodShowing ?? false, - proto?.keyguardShowing ?? false, + proto?.isAodShowing ?? false, + proto?.isKeyguardShowing ?? false, keyguardOccludedStates ) } diff --git a/tools/winscope/src/flickerlib/common.js b/tools/winscope/src/flickerlib/common.js index c56a82488..a6684f921 100644 --- a/tools/winscope/src/flickerlib/common.js +++ b/tools/winscope/src/flickerlib/common.js @@ -17,42 +17,42 @@ // Imports all the compiled common Flicker library classes and exports them // as clean es6 modules rather than having them be commonjs modules -const WindowManagerTrace = require('flicker').com.android.server.wm.flicker. - common.traces.windowmanager.WindowManagerTrace; -const WindowManagerState = require('flicker').com.android.server.wm. - flicker.common.traces.windowmanager.WindowManagerState; +const WindowManagerTrace = require('flicker').com.android.server.wm.traces.common. + windowmanager.WindowManagerTrace; +const WindowManagerState = require('flicker').com.android.server.wm.traces.common. + windowmanager.WindowManagerState; -const Activity = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.Activity; -const ActivityTask = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.ActivityTask; -const Configuration = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.Configuration; -const ConfigurationContainer = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.ConfigurationContainer; -const DisplayArea = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.DisplayArea; -const DisplayContent = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.DisplayContent; -const KeyguardControllerState = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.KeyguardControllerState; -const RootWindowContainer = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.RootWindowContainer; -const WindowConfiguration = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.WindowConfiguration; -const WindowContainer = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.WindowContainer; -const WindowContainerChild = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.WindowContainerChild; -const WindowManagerPolicy = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.WindowManagerPolicy; -const WindowState = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.WindowState; -const WindowToken = require('flicker').com.android.server.wm.flicker.common. - traces.windowmanager.windows.WindowToken; +const Activity = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.Activity; +const ActivityTask = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.ActivityTask; +const Configuration = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.Configuration; +const ConfigurationContainer = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.ConfigurationContainer; +const DisplayArea = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.DisplayArea; +const DisplayContent = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.DisplayContent; +const KeyguardControllerState = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.KeyguardControllerState; +const RootWindowContainer = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.RootWindowContainer; +const WindowConfiguration = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.WindowConfiguration; +const WindowContainer = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.WindowContainer; +const WindowContainerChild = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.WindowContainerChild; +const WindowManagerPolicy = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.WindowManagerPolicy; +const WindowState = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.WindowState; +const WindowToken = require('flicker').com.android.server.wm.traces.common. + windowmanager.windows.WindowToken; -const Rect = require('flicker').com.android.server.wm.flicker.common.Rect; -const Bounds = require('flicker').com.android.server.wm.flicker.common.Bounds; +const Rect = require('flicker').com.android.server.wm.traces.common.Rect; +const Bounds = require('flicker').com.android.server.wm.traces.common.Bounds; function toRect(proto) { if (proto == null) { diff --git a/tools/winscope/src/flickerlib/windows/Activity.ts b/tools/winscope/src/flickerlib/windows/Activity.ts index 4278ead94..08374fce0 100644 --- a/tools/winscope/src/flickerlib/windows/Activity.ts +++ b/tools/winscope/src/flickerlib/windows/Activity.ts @@ -15,6 +15,7 @@ */ import { getWMPropertiesForDisplay, shortenName } from '../mixin' +import { asRawTreeViewObject } from '../../utils/diff.js' import { Activity } from "../common" import WindowContainer from "./WindowContainer" @@ -46,6 +47,7 @@ Activity.fromProto = function (proto, parent: WindowContainer): Activity { entry.obj = getWMPropertiesForDisplay(proto) entry.shortName = shortenName(entry.name) entry.children = entry.childrenWindows + entry.rawTreeViewObject = asRawTreeViewObject(entry) return entry } } diff --git a/tools/winscope/src/flickerlib/windows/ActivityTask.ts b/tools/winscope/src/flickerlib/windows/ActivityTask.ts index d34f28d1f..dfbbd4585 100644 --- a/tools/winscope/src/flickerlib/windows/ActivityTask.ts +++ b/tools/winscope/src/flickerlib/windows/ActivityTask.ts @@ -15,6 +15,7 @@ */ import { getWMPropertiesForDisplay, shortenName } from '../mixin' +import { asRawTreeViewObject } from '../../utils/diff.js' import { ActivityTask, toRect } from "../common" import WindowContainer from "./WindowContainer" @@ -55,6 +56,7 @@ ActivityTask.fromProto = function (proto, isActivityInTree: Boolean): ActivityTa entry.obj = getWMPropertiesForDisplay(proto) entry.shortName = shortenName(entry.name) entry.children = entry.childrenWindows + entry.rawTreeViewObject = asRawTreeViewObject(entry) return entry } } diff --git a/tools/winscope/src/flickerlib/windows/DisplayArea.ts b/tools/winscope/src/flickerlib/windows/DisplayArea.ts index 084f13971..af34e763c 100644 --- a/tools/winscope/src/flickerlib/windows/DisplayArea.ts +++ b/tools/winscope/src/flickerlib/windows/DisplayArea.ts @@ -15,6 +15,7 @@ */ import { getWMPropertiesForDisplay, shortenName } from '../mixin' +import { asRawTreeViewObject } from '../../utils/diff.js' import { DisplayArea } from "../common" import WindowContainer from "./WindowContainer" @@ -36,6 +37,7 @@ DisplayArea.fromProto = function (proto, isActivityInTree: Boolean): DisplayArea entry.obj = getWMPropertiesForDisplay(proto) entry.shortName = shortenName(entry.name) entry.children = entry.childrenWindows + entry.rawTreeViewObject = asRawTreeViewObject(entry) return entry } } diff --git a/tools/winscope/src/flickerlib/windows/DisplayContent.ts b/tools/winscope/src/flickerlib/windows/DisplayContent.ts index 37a81fdfe..64c6705b8 100644 --- a/tools/winscope/src/flickerlib/windows/DisplayContent.ts +++ b/tools/winscope/src/flickerlib/windows/DisplayContent.ts @@ -15,6 +15,7 @@ */ import { getWMPropertiesForDisplay, shortenName } from '../mixin' +import { asRawTreeViewObject } from '../../utils/diff.js' import { toRect, DisplayContent, Rect } from "../common" import WindowContainer from "./WindowContainer" @@ -52,6 +53,8 @@ DisplayContent.fromProto = function (proto, isActivityInTree: Boolean): DisplayC proto.focusedApp, proto.appTransition?.lastUsedAppTransition ?? "", proto.appTransition?.appTransitionState ?? "", + proto.displayRotation?.rotation ?? 0, + proto.displayRotation?.lastOrientation ?? 0, windowContainer ) @@ -63,6 +66,7 @@ DisplayContent.fromProto = function (proto, isActivityInTree: Boolean): DisplayC entry.obj = getWMPropertiesForDisplay(proto) entry.shortName = shortenName(entry.name) entry.children = entry.childrenWindows + entry.rawTreeViewObject = asRawTreeViewObject(entry) return entry } } diff --git a/tools/winscope/src/flickerlib/windows/WindowContainer.ts b/tools/winscope/src/flickerlib/windows/WindowContainer.ts index d7f08df32..d733ca634 100644 --- a/tools/winscope/src/flickerlib/windows/WindowContainer.ts +++ b/tools/winscope/src/flickerlib/windows/WindowContainer.ts @@ -15,6 +15,7 @@ */ import { getWMPropertiesForDisplay, shortenName } from '../mixin' +import { asRawTreeViewObject } from '../../utils/diff.js' import { Configuration, @@ -58,6 +59,7 @@ WindowContainer.fromProto = function ({ // properties by changing the target element in the hierarchy tree view. entry.obj = getWMPropertiesForDisplay(proto) entry.shortName = shortenName(entry.name) + entry.rawTreeViewObject = asRawTreeViewObject(entry) return entry } } diff --git a/tools/winscope/src/flickerlib/windows/WindowState.ts b/tools/winscope/src/flickerlib/windows/WindowState.ts index 7b8aefd27..46169416d 100644 --- a/tools/winscope/src/flickerlib/windows/WindowState.ts +++ b/tools/winscope/src/flickerlib/windows/WindowState.ts @@ -15,6 +15,7 @@ */ import { getWMPropertiesForDisplay, shortenName } from '../mixin' +import { asRawTreeViewObject } from '../../utils/diff.js' import { toRect, WindowState } from "../common" import { VISIBLE_CHIP } from '../treeview/Chips' import WindowContainer from "./WindowContainer" @@ -75,12 +76,13 @@ import WindowContainer from "./WindowContainer" entry.obj = getWMPropertiesForDisplay(proto) entry.shortName = shortenName(entry.name) - entry.visible = entry.isVisible ?? false - entry.chips = entry.isVisible ? [VISIBLE_CHIP] : [] + entry.visible = entry.isSurfaceShown ?? false + entry.chips = entry.isSurfaceShown ? [VISIBLE_CHIP] : [] entry.children = entry.childrenWindows - if (entry.isVisible) { + if (entry.isSurfaceShown) { entry.rect = entry.rects[0] } + entry.rawTreeViewObject = asRawTreeViewObject(entry) return entry } } diff --git a/tools/winscope/src/flickerlib/windows/WindowToken.ts b/tools/winscope/src/flickerlib/windows/WindowToken.ts index 77ee8a83f..e019aad59 100644 --- a/tools/winscope/src/flickerlib/windows/WindowToken.ts +++ b/tools/winscope/src/flickerlib/windows/WindowToken.ts @@ -15,6 +15,7 @@ */ import { getWMPropertiesForDisplay, shortenName } from '../mixin' +import { asRawTreeViewObject } from '../../utils/diff.js' import { WindowToken } from "../common" import WindowContainer from "./WindowContainer" @@ -36,6 +37,7 @@ WindowToken.fromProto = function (proto, isActivityInTree: Boolean): WindowToken entry.obj = getWMPropertiesForDisplay(proto) entry.shortName = shortenName(entry.name) entry.children = entry.childrenWindows + entry.rawTreeViewObject = asRawTreeViewObject(entry) return entry } } diff --git a/tools/winscope/src/utils/diff.js b/tools/winscope/src/utils/diff.js index 7b07606bb..0a6e10b05 100644 --- a/tools/winscope/src/utils/diff.js +++ b/tools/winscope/src/utils/diff.js @@ -26,6 +26,21 @@ export const DiffType = Object.freeze({ MODIFIED: 'modified', }); +export function asRawTreeViewObject(obj) { + const children = obj.children?.map(child => child.rawTreeViewObject) ?? [] + + return { + kind: obj.kind, + name: obj.name, + shortName: obj.shortName, + stableId: obj.stableId, + chips: obj.chips, + obj: obj.obj, + children, + ref: obj, + }; +} + export function defaultModifiedCheck(newNode, oldNode) { if (!newNode && !oldNode) { return false; @@ -44,16 +59,16 @@ function isPrimitive(test) { export class DiffGenerator { constructor(tree) { - if (tree.asRawTreeViewObject) { - this.tree = tree.asRawTreeViewObject(); + if (tree.rawTreeViewObject) { + this.tree = tree.rawTreeViewObject; } else { this.tree = tree; } } compareWith(tree) { - if (tree?.asRawTreeViewObject) { - this.diffWithTree = tree.asRawTreeViewObject(); + if (tree?.rawTreeViewObject) { + this.diffWithTree = tree.rawTreeViewObject; } else { this.diffWithTree = tree; } diff --git a/tools/winscope/webpack.config.common.js b/tools/winscope/webpack.config.common.js index f2faddbdf..eab027558 100644 --- a/tools/winscope/webpack.config.common.js +++ b/tools/winscope/webpack.config.common.js @@ -133,7 +133,7 @@ const webpackConfig = { new KotlinWebpackPlugin({ src: [ path.join(__dirname, '../../../platform_testing/libraries/flicker/' + - 'src/com/android/server/wm/flicker/common/'), + 'src/com/android/server/wm/traces/common/'), ], output: 'kotlin_build', moduleName: 'flicker', diff --git a/tools/winscope/webpack.spec.config.js b/tools/winscope/webpack.spec.config.js index edb2ab49f..dcbcbf9e1 100644 --- a/tools/winscope/webpack.spec.config.js +++ b/tools/winscope/webpack.spec.config.js @@ -96,7 +96,7 @@ module.exports = { new KotlinWebpackPlugin({ src: [ path.join(__dirname, '../../../platform_testing/libraries/flicker/' + - 'src/com/android/server/wm/flicker/common/'), + 'src/com/android/server/wm/traces/common/'), ], output: 'kotlin_build', moduleName: 'flicker',