/* * Copyright 2017, 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 {transform, nanos_to_string, get_visible_chip} from './transform.js' function transform_window(entry) { var chips = []; var renderIdentifier = (id) => shortenComponentName(id.title) + "@" + id.hashCode; var visible = entry.windowContainer.visible; function transform_rect(rect, label) { var r = rect || {}; return { left: r.left || 0, right: r.right || 0, top: r.top || 0, bottom: r.bottom || 0, label, } } var name = renderIdentifier(entry.identifier) var rect = transform_rect((entry.windowFrames || entry).frame, name); if (visible) { chips.push(get_visible_chip()); } else { rect = undefined; } return transform({ obj: entry, kind: 'window', name, children: [ [entry.childWindows, transform_window] ], rect, highlight: rect, chips: chips, visible: visible, }); } function transform_app_window_token(entry) { return transform({ obj: entry, kind: 'appWinToken', name: entry.name, children: [ [entry.windowToken.windows, transform_window], ], }); } function transform_task(entry) { return transform({ obj: entry, kind: 'task', name: entry.id || 0, children: [ [entry.appWindowTokens, transform_app_window_token], ], }); } function transform_stack(entry) { return transform({ obj: entry, kind: 'stack', name: entry.id || 0, children: [ [entry.tasks, transform_task], ], }); } function transform_window_token(entry) { return transform({ obj: entry, kind: 'winToken', name: '', children: [ [entry.windows, transform_window], ], }); } function transform_below(entry) { return transform({ obj: entry, kind: 'belowAppWindow', name: '', children: [ [entry.windows, transform_window], ], }); } function transform_above(entry) { return transform({ obj: entry, kind: 'aboveAppWindow', name: '', children: [ [entry.windows, transform_window], ], }); } function transform_ime(entry) { return transform({ obj: entry, kind: 'imeWindow', name: '', children: [ [entry.windows, transform_window], ], }); } function transform_display(entry) { var bounds = { width: entry.displayInfo.logicalWidth || 0, height: entry.displayInfo.logicalHeight || 0, }; return transform({ obj: entry, kind: 'display', name: entry.id || 0, children: [ [entry.aboveAppWindows, transform_above], [entry.imeWindows, transform_ime], [entry.stacks, transform_stack], [entry.belowAppWindows, transform_below], ], bounds, }); } function transform_policy(entry) { return transform({ obj: entry, kind: 'policy', name: 'policy', children: [], }); } function transform_window_service(entry) { return transform({ obj: entry, kind: 'service', name: '', children: [ [entry.rootWindowContainer.displays, transform_display], [[entry.policy], transform_policy], ], timestamp: entry.elapsedRealtimeNanos, }); } function transform_entry(entry) { return transform({ obj: entry, kind: 'entry', name: nanos_to_string(entry.elapsedRealtimeNanos), children: [ [entry.windowManagerService.rootWindowContainer.displays, transform_display], [[entry.windowManagerService.policy], transform_policy], ], timestamp: entry.elapsedRealtimeNanos, stableId: 'entry', }); } function transform_window_trace(entries) { return transform({ obj: entries, kind: 'entries', name: 'entries', children: [ [entries.entry, transform_entry], ], }); } function shortenComponentName(name) { if (!name.includes('/')) { return name } var split = name.split('/'); var pkg = split[0]; var clazz = split.slice(1).join('/'); if (clazz.startsWith(pkg + '.')) { clazz = clazz.slice(pkg.length + 1); return [pkg, clazz].join('/'); } return name; } export {transform_window_service, transform_window_trace};