blob: 24df716344ec87bc29986d8f87af90d36304900b [file] [log] [blame]
/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {GeometryFactory} from 'trace/geometry_factory';
import {PropertyTreeNode} from 'trace/tree_node/property_tree_node';
export class RawDataUtils {
static isEmptyObj(obj: PropertyTreeNode): boolean {
if (RawDataUtils.isColor(obj)) {
return RawDataUtils.isEmptyColor(obj);
}
if (RawDataUtils.isRect(obj)) {
return GeometryFactory.makeRect(obj).isEmpty();
}
return false;
}
static isColor(obj: PropertyTreeNode): boolean {
return (
(obj.getChildByName('r') !== undefined &&
obj.getChildByName('g') !== undefined &&
obj.getChildByName('b') !== undefined) ||
obj.getChildByName('a') !== undefined
);
}
static isRect(obj: PropertyTreeNode): boolean {
return (
(obj.getChildByName('right') !== undefined &&
obj.getChildByName('bottom') !== undefined) ||
(obj.getChildByName('left') !== undefined &&
obj.getChildByName('top') !== undefined)
);
}
static isBuffer(obj: PropertyTreeNode): boolean {
return (
obj.getChildByName('stride') !== undefined &&
obj.getChildByName('format') !== undefined
);
}
static isSize(obj: PropertyTreeNode): boolean {
return (
obj.getAllChildren().length <= 2 &&
(obj.getChildByName('w') !== undefined ||
obj.getChildByName('h') !== undefined)
);
}
static isPosition(obj: PropertyTreeNode): boolean {
return (
obj.getAllChildren().length <= 2 &&
(obj.getChildByName('x') !== undefined ||
obj.getChildByName('y') !== undefined)
);
}
static isRegion(obj: PropertyTreeNode): boolean {
const rect = obj.getChildByName('rect');
return (
rect !== undefined &&
rect
.getAllChildren()
.every((innerRect: PropertyTreeNode) => RawDataUtils.isRect(innerRect))
);
}
static isMatrix(obj: PropertyTreeNode): boolean {
return (
!obj.getChildByName('type') &&
(obj.getChildByName('dsdx') !== undefined ||
obj.getChildByName('dtdx') !== undefined ||
obj.getChildByName('dsdy') !== undefined ||
obj.getChildByName('dtdy') !== undefined)
);
}
private static isEmptyColor(color: PropertyTreeNode): boolean {
const [r, g, b, a] = [
color.getChildByName('r')?.getValue() ?? 0,
color.getChildByName('g')?.getValue() ?? 0,
color.getChildByName('b')?.getValue() ?? 0,
color.getChildByName('a')?.getValue() ?? 0,
];
if (a === 0) return true;
return r < 0 || g < 0 || b < 0;
}
}