Merge "Use display cutout from proto dump"
This commit is contained in:
committed by
Android (Google) Code Review
commit
d763256765
@@ -14,12 +14,13 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {toSize, toActiveBuffer, toColor, toColor3, toPoint, toPointF, toRect,
|
||||
toRectF, toRegion, toMatrix22, toTransform} from './common';
|
||||
import {
|
||||
toSize, toActiveBuffer, toColor, toColor3, toPoint, toPointF, toRect,
|
||||
toRectF, toRegion, toMatrix22, toTransform, toInsets
|
||||
} from './common';
|
||||
import { PropertiesDump } from "viewers/common/ui_tree_utils";
|
||||
|
||||
import intDefMapping from
|
||||
'../../../../../../../prebuilts/misc/common/winscope/intDefMapping.json';
|
||||
'../../../../../../../prebuilts/misc/common/winscope/intDefMapping.json';
|
||||
import config from './Configuration.json'
|
||||
|
||||
function readIntdefMap(): Map<string, string> {
|
||||
@@ -60,7 +61,7 @@ export default class ObjectFormatter {
|
||||
do {
|
||||
const properties = Object.getOwnPropertyNames(obj).filter(it => {
|
||||
// filter out functions
|
||||
if (typeof(entry[it]) === 'function') return false;
|
||||
if (typeof (entry[it]) === 'function') return false;
|
||||
// internal propertires from kotlinJs
|
||||
if (it.includes(`$`)) return false;
|
||||
// private kotlin variables from kotlin
|
||||
@@ -75,7 +76,7 @@ export default class ObjectFormatter {
|
||||
return !(value?.stableId);
|
||||
});
|
||||
properties.forEach(function (prop) {
|
||||
if (typeof(entry[prop]) !== 'function' && props.indexOf(prop) === -1) {
|
||||
if (typeof (entry[prop]) !== 'function' && props.indexOf(prop) === -1) {
|
||||
props.push(prop);
|
||||
}
|
||||
});
|
||||
@@ -110,7 +111,7 @@ export default class ObjectFormatter {
|
||||
// raw values (e.g., false or 0)
|
||||
if (!value) {
|
||||
result[key] = value
|
||||
// flicker obj
|
||||
// flicker obj
|
||||
} else if (value.prettyPrint) {
|
||||
const isEmpty = value.isEmpty === true;
|
||||
if (!isEmpty || this.displayDefaults) {
|
||||
@@ -118,23 +119,23 @@ export default class ObjectFormatter {
|
||||
}
|
||||
} else {
|
||||
// converted proto to flicker
|
||||
const translatedObject = this.translateObject(value);
|
||||
const translatedObject = this.translateObject(key, value);
|
||||
if (translatedObject) {
|
||||
if (translatedObject.prettyPrint) {
|
||||
result[key] = translatedObject.prettyPrint();
|
||||
result[key] = translatedObject.prettyPrint();
|
||||
}
|
||||
else {
|
||||
result[key] = translatedObject;
|
||||
result[key] = translatedObject;
|
||||
}
|
||||
// objects - recursive call
|
||||
} else if (value && typeof(value) == `object`) {
|
||||
// objects - recursive call
|
||||
} else if (value && typeof (value) == `object`) {
|
||||
const childObj = this.format(value) as any;
|
||||
const isEmpty = Object.entries(childObj).length == 0 || childObj.isEmpty;
|
||||
if (!isEmpty || this.displayDefaults) {
|
||||
result[key] = childObj;
|
||||
}
|
||||
} else {
|
||||
// values
|
||||
// values
|
||||
result[key] = this.translateIntDef(obj, key, value);
|
||||
}
|
||||
}
|
||||
@@ -152,9 +153,9 @@ export default class ObjectFormatter {
|
||||
*
|
||||
* @param obj Object to translate
|
||||
*/
|
||||
private static translateObject(obj: any) {
|
||||
private static translateObject(key: string, obj: any) {
|
||||
const type = obj?.$type?.name ?? obj?.constructor?.name;
|
||||
switch(type) {
|
||||
switch (type) {
|
||||
case `SizeProto`: return toSize(obj);
|
||||
case `ActiveBufferProto`: return toActiveBuffer(obj);
|
||||
case `Color3`: return toColor3(obj);
|
||||
@@ -162,7 +163,9 @@ export default class ObjectFormatter {
|
||||
case `Long`: return obj?.toString();
|
||||
case `PointProto`: return toPoint(obj);
|
||||
case `PositionProto`: return toPointF(obj);
|
||||
case `RectProto`: return toRect(obj);
|
||||
// It is necessary to check for a keyword insets because the proto
|
||||
// definition of insets and rects uses the same object type
|
||||
case `RectProto`: return key.toLowerCase().includes("insets") ? toInsets(obj) : toRect(obj);
|
||||
case `Matrix22`: return toMatrix22(obj);
|
||||
case `FloatRectProto`: return toRectF(obj);
|
||||
case `RegionProto`: return toRegion(obj);
|
||||
@@ -193,7 +196,7 @@ export default class ObjectFormatter {
|
||||
* @param obj Proto object
|
||||
* @param propertyName Property to search
|
||||
*/
|
||||
private static getTypeDefSpec(obj: any, propertyName: string): string|null {
|
||||
private static getTypeDefSpec(obj: any, propertyName: string): string | null {
|
||||
const fields = obj?.$type?.fields;
|
||||
if (!fields) {
|
||||
return null;
|
||||
@@ -224,7 +227,7 @@ export default class ObjectFormatter {
|
||||
// Parse Flicker objects (no intdef annotation supported)
|
||||
if (this.FLICKER_INTDEF_MAP.has(propertyPath)) {
|
||||
translatedValue = this.getIntFlagsAsStrings(value,
|
||||
<string>this.FLICKER_INTDEF_MAP.get(propertyPath));
|
||||
<string>this.FLICKER_INTDEF_MAP.get(propertyPath));
|
||||
} else {
|
||||
// If it's a proto, search on the proto definition for the intdef type
|
||||
const typeDefSpec = this.getTypeDefSpec(parentObj, propertyName);
|
||||
@@ -258,25 +261,25 @@ export default class ObjectFormatter {
|
||||
let leftOver = parsedIntFlags;
|
||||
|
||||
for (const flagValue of knownFlagValues) {
|
||||
if (((leftOver & flagValue) && ((intFlags & flagValue) === flagValue))
|
||||
if (((leftOver & flagValue) && ((intFlags & flagValue) === flagValue))
|
||||
|| (parsedIntFlags === 0 && flagValue === 0)) {
|
||||
flags.push(mapping[<keyof typeof mapping>flagValue]);
|
||||
flags.push(mapping[<keyof typeof mapping>flagValue]);
|
||||
|
||||
leftOver = leftOver & ~flagValue;
|
||||
}
|
||||
leftOver = leftOver & ~flagValue;
|
||||
}
|
||||
}
|
||||
|
||||
if (flags.length === 0) {
|
||||
console.error('No valid flag mappings found for ',
|
||||
intFlags, 'of type', annotationType);
|
||||
console.error('No valid flag mappings found for ',
|
||||
intFlags, 'of type', annotationType);
|
||||
}
|
||||
|
||||
if (leftOver) {
|
||||
// If 0 is a valid flag value that isn't in the intDefMapping
|
||||
// it will be ignored
|
||||
flags.push(leftOver);
|
||||
// If 0 is a valid flag value that isn't in the intDefMapping
|
||||
// it will be ignored
|
||||
flags.push(leftOver);
|
||||
}
|
||||
|
||||
return flags.join(' | ');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,8 @@ 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 DisplayCutout = require('flicker').com.android.server.wm.traces.common.
|
||||
windowmanager.windows.DisplayCutout;
|
||||
const KeyguardControllerState = require('flicker').com.android.server.wm.
|
||||
traces.common.windowmanager.windows.KeyguardControllerState;
|
||||
const RootWindowContainer = require('flicker').com.android.server.wm.traces.
|
||||
@@ -85,6 +87,9 @@ const ActiveBuffer = require('flicker').com.android.server.wm.traces.common
|
||||
.ActiveBuffer;
|
||||
const Color3 = require('flicker').com.android.server.wm.traces.common.Color3;
|
||||
const Color = require('flicker').com.android.server.wm.traces.common.Color;
|
||||
const Insets = require('flicker').com.android.server.wm.traces.common.Insets;
|
||||
const PlatformConsts = require('flicker').com.android.server.wm.traces.common
|
||||
.service.PlatformConsts;
|
||||
const Point = require('flicker').com.android.server.wm.traces.common.Point;
|
||||
const PointF = require('flicker').com.android.server.wm.traces.common.PointF;
|
||||
const Rect = require('flicker').com.android.server.wm.traces.common.Rect;
|
||||
@@ -97,6 +102,7 @@ const TaggingEngine = require('flicker').com.android.server.wm.traces.common.ser
|
||||
const EMPTY_BUFFER = ActiveBuffer.Companion.EMPTY;
|
||||
const EMPTY_COLOR3 = Color3.Companion.EMPTY;
|
||||
const EMPTY_COLOR = Color.Companion.EMPTY;
|
||||
const EMPTY_INSETS = Insets.Companion.EMPTY;
|
||||
const EMPTY_RECT = Rect.Companion.EMPTY;
|
||||
const EMPTY_RECTF = RectF.Companion.EMPTY;
|
||||
const EMPTY_POINT = Point.Companion.EMPTY;
|
||||
@@ -180,6 +186,22 @@ function toPointF(proto) {
|
||||
return EMPTY_POINTF;
|
||||
}
|
||||
|
||||
function toInsets(proto) {
|
||||
if (proto == null) {
|
||||
return EMPTY_INSETS;
|
||||
}
|
||||
|
||||
const left = proto?.left ?? 0;
|
||||
const top = proto?.top ?? 0;
|
||||
const right = proto?.right ?? 0;
|
||||
const bottom = proto?.bottom ?? 0;
|
||||
if (left || top || right || bottom) {
|
||||
return new Insets(left, top, right, bottom);
|
||||
}
|
||||
return EMPTY_INSETS;
|
||||
}
|
||||
|
||||
|
||||
function toRect(proto) {
|
||||
if (proto == null) {
|
||||
return EMPTY_RECT;
|
||||
@@ -270,6 +292,7 @@ export {
|
||||
DisplayArea,
|
||||
DisplayContent,
|
||||
KeyguardControllerState,
|
||||
DisplayCutout,
|
||||
RootWindowContainer,
|
||||
Task,
|
||||
TaskFragment,
|
||||
@@ -298,6 +321,8 @@ export {
|
||||
ActiveBuffer,
|
||||
Color,
|
||||
Color3,
|
||||
Insets,
|
||||
PlatformConsts,
|
||||
Point,
|
||||
Rect,
|
||||
RectF,
|
||||
@@ -308,6 +333,7 @@ export {
|
||||
toActiveBuffer,
|
||||
toColor,
|
||||
toColor3,
|
||||
toInsets,
|
||||
toPoint,
|
||||
toPointF,
|
||||
toRect,
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
import { shortenName } from '../mixin'
|
||||
import { toRect, DisplayContent, Rect } from "../common"
|
||||
import { toInsets, toRect, DisplayContent, DisplayCutout, PlatformConsts, Rect } from "../common"
|
||||
import WindowContainer from "./WindowContainer"
|
||||
|
||||
DisplayContent.fromProto = function (proto: any, isActivityInTree: Boolean, nextSeq: () => number): DisplayContent {
|
||||
@@ -52,8 +52,9 @@ DisplayContent.fromProto = function (proto: any, isActivityInTree: Boolean, next
|
||||
proto.focusedApp,
|
||||
proto.appTransition?.lastUsedAppTransition ?? "",
|
||||
proto.appTransition?.appTransitionState ?? "",
|
||||
proto.displayRotation?.rotation ?? 0,
|
||||
PlatformConsts.Rotation.Companion.getByValue(proto.displayRotation?.rotation ?? 0),
|
||||
proto.displayRotation?.lastOrientation ?? 0,
|
||||
createDisplayCutout(proto.displayInfo?.cutout),
|
||||
windowContainer
|
||||
);
|
||||
|
||||
@@ -62,6 +63,21 @@ DisplayContent.fromProto = function (proto: any, isActivityInTree: Boolean, next
|
||||
}
|
||||
}
|
||||
|
||||
function createDisplayCutout(proto: any | null): DisplayCutout | null {
|
||||
if(proto == null) {
|
||||
return null;
|
||||
} else {
|
||||
return new DisplayCutout(
|
||||
toInsets(proto?.insets),
|
||||
toRect(proto?.boundLeft),
|
||||
toRect(proto?.boundTop),
|
||||
toRect(proto?.boundRight),
|
||||
toRect(proto?.boundBottom),
|
||||
toInsets(proto?.waterfallInsets)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function addAttributes(entry: DisplayContent, proto: any) {
|
||||
entry.proto = proto;
|
||||
entry.kind = entry.constructor.name;
|
||||
|
||||
@@ -18,6 +18,7 @@ import { ElapsedTimestamp, RealTimestamp } from "common/trace/timestamp";
|
||||
import { TimeUtils } from "common/utils/time_utils";
|
||||
import {
|
||||
KeyguardControllerState,
|
||||
PlatformConsts,
|
||||
RootWindowContainer,
|
||||
WindowManagerPolicy,
|
||||
WindowManagerState,
|
||||
@@ -92,7 +93,7 @@ function createWindowManagerPolicy(proto: any): WindowManagerPolicy {
|
||||
proto.keyguardOccludedPending,
|
||||
proto.lastSystemUiFlags,
|
||||
proto.orientation,
|
||||
proto.rotation,
|
||||
PlatformConsts.Rotation.Companion.getByValue(proto.rotation),
|
||||
proto.rotationMode,
|
||||
proto.screenOnFully,
|
||||
proto.windowManagerDrawComplete
|
||||
|
||||
Reference in New Issue
Block a user