From 724f11355ee5b58ef44f4dd830b905755ee08e9a Mon Sep 17 00:00:00 2001 From: Ioana Stefan Date: Thu, 15 Oct 2020 11:37:10 +0200 Subject: [PATCH] Updated Winscope view for IME tracing clients information Updated the IME tracing view in Winscope for the new optimized proto dump format. This change included only the clients view since only this information is currently dumped. Bug: 154348613 Test: build and run the code using "yarn run dev" build and flash the android code to a device start and stop IME trace from the command line and then upload the file into Winscope or start IME trace from the web interface, open an IME on the android device to generate logs, end trace from the web interface to see the logs Change-Id: I3dc01d602147d41af3c5b99b848cb428e402c219 --- tools/winscope/adb_proxy/winscope_proxy.py | 8 ++--- tools/winscope/src/DataAdb.vue | 8 ++--- tools/winscope/src/decode.js | 33 ++++++++++--------- tools/winscope/src/main.js | 2 +- tools/winscope/src/mixins/FileType.js | 2 +- ...tMethodEditor.ts => InputMethodClients.ts} | 6 ++-- tools/winscope/src/transform_ime.js | 24 ++------------ 7 files changed, 32 insertions(+), 51 deletions(-) rename tools/winscope/src/traces/{InputMethodEditor.ts => InputMethodClients.ts} (84%) diff --git a/tools/winscope/adb_proxy/winscope_proxy.py b/tools/winscope/adb_proxy/winscope_proxy.py index f8555f82f..4db7ab404 100755 --- a/tools/winscope/adb_proxy/winscope_proxy.py +++ b/tools/winscope/adb_proxy/winscope_proxy.py @@ -47,7 +47,7 @@ LOG_LEVEL = logging.WARNING PORT = 5544 # Keep in sync with WINSCOPE_PROXY_VERSION in Winscope DataAdb.vue -VERSION = '0.7' +VERSION = '0.8' WINSCOPE_VERSION_HEADER = "Winscope-Proxy-Version" WINSCOPE_TOKEN_HEADER = "Winscope-Token" @@ -139,9 +139,9 @@ TRACE_TARGETS = { 'su root cmd window logging start\necho "WM logging started."', 'su root cmd window logging stop >/dev/null 2>&1' ), - "ime_trace": TraceTarget( - File("/data/misc/wmtrace/ime_trace.pb", "ime_trace"), - 'su root ime tracing start\necho "IME trace started."', + "ime_trace_clients": TraceTarget( + File("/data/misc/wmtrace/ime_trace_clients.pb", "ime_trace_clients"), + 'su root ime tracing start\necho "Clients IME trace started."', 'su root ime tracing stop >/dev/null 2>&1' ), } diff --git a/tools/winscope/src/DataAdb.vue b/tools/winscope/src/DataAdb.vue index 3b08b98bf..92a8020a5 100644 --- a/tools/winscope/src/DataAdb.vue +++ b/tools/winscope/src/DataAdb.vue @@ -142,7 +142,7 @@ const STATES = { LOAD_DATA: 8, }; -const WINSCOPE_PROXY_VERSION = '0.7'; +const WINSCOPE_PROXY_VERSION = '0.8'; const WINSCOPE_PROXY_URL = 'http://localhost:5544'; const PROXY_ENDPOINTS = { DEVICES: '/devices/', @@ -170,8 +170,8 @@ const TRACES = { 'screen_recording': { name: 'Screen Recording', }, - 'ime_trace': { - name: 'Input Method', + 'ime_trace_clients': { + name: 'Input Method Clients', }, }; @@ -204,7 +204,7 @@ const proxyFileTypeAdapter = { 'proto_log': FILE_TYPES.PROTO_LOG, 'system_ui_trace': FILE_TYPES.SYSTEM_UI, 'launcher_trace': FILE_TYPES.LAUNCHER, - 'ime_trace': FILE_TYPES.IME_TRACE, + 'ime_trace_clients': FILE_TYPES.IME_TRACE_CLIENTS, }; const CONFIGS = Object.keys(TRACE_CONFIG).flatMap((file) => TRACE_CONFIG[file]); diff --git a/tools/winscope/src/decode.js b/tools/winscope/src/decode.js index 830455c76..b2122aeb8 100644 --- a/tools/winscope/src/decode.js +++ b/tools/winscope/src/decode.js @@ -44,7 +44,7 @@ import WaylandTrace from '@/traces/Wayland.ts'; import ProtoLogTrace from '@/traces/ProtoLog.ts'; import SystemUITrace from '@/traces/SystemUI.ts'; import LauncherTrace from '@/traces/Launcher.ts'; -import ImeTrace from '@/traces/InputMethodEditor.ts'; +import ImeTraceClients from '@/traces/InputMethodClients.ts'; import SurfaceFlingerDump from '@/dumps/SurfaceFlinger.ts'; import WindowManagerDump from '@/dumps/WindowManager.ts'; @@ -60,7 +60,7 @@ const WaylandDumpMessage = lookup_type(jsonProtoDefsWl, 'org.chromium.arc.waylan const ProtoLogMessage = lookup_type(jsonProtoDefsProtoLog, 'com.android.internal.protolog.ProtoLogFileProto'); const SystemUiTraceMessage = lookup_type(jsonProtoDefsSysUi, 'com.android.systemui.tracing.SystemUiTraceFileProto'); const LauncherTraceMessage = lookup_type(jsonProtoDefsLauncher, 'com.android.launcher3.tracing.LauncherTraceFileProto'); -const InputMethodEditorTraceMessage = lookup_type(jsonProtoDefsIme, "android.view.inputmethod.InputMethodEditorTraceFileProto"); +const InputMethodClientsTraceMessage = lookup_type(jsonProtoDefsIme, "android.view.inputmethod.InputMethodClientsTraceFileProto"); const LAYER_TRACE_MAGIC_NUMBER = [0x09, 0x4c, 0x59, 0x52, 0x54, 0x52, 0x41, 0x43, 0x45]; // .LYRTRACE const WINDOW_TRACE_MAGIC_NUMBER = [0x09, 0x57, 0x49, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x45]; // .WINTRACE @@ -69,7 +69,7 @@ const WAYLAND_TRACE_MAGIC_NUMBER = [0x09, 0x57, 0x59, 0x4c, 0x54, 0x52, 0x41, 0x const PROTO_LOG_MAGIC_NUMBER = [0x09, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x4c, 0x4f, 0x47]; // .PROTOLOG const SYSTEM_UI_MAGIC_NUMBER = [0x09, 0x53, 0x59, 0x53, 0x55, 0x49, 0x54, 0x52, 0x43]; // .SYSUITRC const LAUNCHER_MAGIC_NUMBER = [0x09, 0x4C, 0x4E, 0x43, 0x48, 0x52, 0x54, 0x52, 0x43]; // .LNCHRTRC -const IME_TRACE_MAGIC_NUMBER = [0x09, 0x49, 0x4d, 0x45, 0x54, 0x52, 0x41, 0x43, 0x45] //.IMETRACE +const IMC_TRACE_MAGIC_NUMBER = [0x09, 0x49, 0x4d, 0x43, 0x54, 0x52, 0x41, 0x43, 0x45] //.IMCTRACE const FILE_TYPES = Object.freeze({ WINDOW_MANAGER_TRACE: 'WindowManagerTrace', @@ -83,7 +83,7 @@ const FILE_TYPES = Object.freeze({ PROTO_LOG: 'ProtoLog', SYSTEM_UI: 'SystemUI', LAUNCHER: 'Launcher', - IME_TRACE: 'ImeTrace', + IME_TRACE_CLIENTS: 'ImeTraceClients', }); const WINDOW_MANAGER_ICON = 'view_compact'; @@ -108,7 +108,7 @@ const FILE_ICONS = { [FILE_TYPES.PROTO_LOG]: PROTO_LOG_ICON, [FILE_TYPES.SYSTEM_UI]: SYSTEM_UI_ICON, [FILE_TYPES.LAUNCHER]: LAUNCHER_ICON, - [FILE_TYPES.IME_TRACE]: IME_ICON, + [FILE_TYPES.IME_TRACE_CLIENTS]: IME_ICON, }; function oneOf(dataType) { @@ -128,7 +128,7 @@ const TRACE_TYPES = Object.freeze({ PROTO_LOG: 'ProtoLog', SYSTEM_UI: 'SystemUI', LAUNCHER: 'Launcher', - IME: 'ImeTrace', + IME_CLIENTS: 'ImeTraceClients', }); const TRACE_INFO = { @@ -182,11 +182,11 @@ const TRACE_INFO = { files: [oneOf(FILE_TYPES.LAUNCHER)], constructor: LauncherTrace, }, - [TRACE_TYPES.IME]: { - name: 'InputMethodEditor', + [TRACE_TYPES.IME_CLIENTS]: { + name: 'InputMethodClients', icon: IME_ICON, - files: [oneOf(FILE_TYPES.IME_TRACE)], - constructor: ImeTrace, + files: [oneOf(FILE_TYPES.IME_TRACE_CLIENTS)], + constructor: ImeTraceClients, }, }; @@ -226,6 +226,7 @@ export const TRACE_ICONS = { [TRACE_TYPES.PROTO_LOG]: PROTO_LOG_ICON, [TRACE_TYPES.SYSTEM_UI]: SYSTEM_UI_ICON, [TRACE_TYPES.LAUNCHER]: LAUNCHER_ICON, + [TRACE_TYPES.IME_CLIENTS]: IME_ICON, [DUMP_TYPES.WINDOW_MANAGER]: WINDOW_MANAGER_ICON, [DUMP_TYPES.SURFACE_FLINGER]: SURFACE_FLINGER_ICON, @@ -352,13 +353,13 @@ const FILE_DECODERS = { timeline: true, }, }, - [FILE_TYPES.IME_TRACE]: { - name: 'InputMethodEditor trace', + [FILE_TYPES.IME_TRACE_CLIENTS]: { + name: 'InputMethodClients trace', decoder: protoDecoder, decoderParams: { - type: FILE_TYPES.IME_TRACE, + type: FILE_TYPES.IME_TRACE_CLIENTS, mime: 'application/octet-stream', - protoType: InputMethodEditorTraceMessage, + protoType: InputMethodClientsTraceMessage, transform: transform_ime_trace, timeline: true, }, @@ -493,8 +494,8 @@ function detectAndDecode(buffer, fileName, store) { if (arrayStartsWith(buffer, LAUNCHER_MAGIC_NUMBER)) { return decodedFile(FILE_TYPES.LAUNCHER, buffer, fileName, store); } - if (arrayStartsWith(buffer, IME_TRACE_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.IME_TRACE, buffer, fileName, store); + if (arrayStartsWith(buffer, IMC_TRACE_MAGIC_NUMBER)) { + return decodedFile(FILE_TYPES.IME_TRACE_CLIENTS, buffer, fileName, store); } // TODO(b/169305853): Add magic number at beginning of file for better auto detection diff --git a/tools/winscope/src/main.js b/tools/winscope/src/main.js index cc7c834b9..1c4de9264 100644 --- a/tools/winscope/src/main.js +++ b/tools/winscope/src/main.js @@ -34,7 +34,7 @@ const fileOrder = { [TRACE_TYPES.SURFACE_FLINGER]: 2, [TRACE_TYPES.TRANSACTION]: 3, [TRACE_TYPES.PROTO_LOG]: 4, - [TRACE_TYPES.IME]: 5, + [TRACE_TYPES.IME_CLIENTS]: 5, }; function sortFiles(files) { diff --git a/tools/winscope/src/mixins/FileType.js b/tools/winscope/src/mixins/FileType.js index aee04b12c..7031fe9cf 100644 --- a/tools/winscope/src/mixins/FileType.js +++ b/tools/winscope/src/mixins/FileType.js @@ -23,7 +23,7 @@ const mixin = { file.type == TRACE_TYPES.WAYLAND || file.type == TRACE_TYPES.SYSTEM_UI || file.type == TRACE_TYPES.LAUNCHER || - file.type == TRACE_TYPES.IME || + file.type == TRACE_TYPES.IME_CLIENTS || file.type == DUMP_TYPES.WINDOW_MANAGER || file.type == DUMP_TYPES.SURFACE_FLINGER || file.type == DUMP_TYPES.WAYLAND; diff --git a/tools/winscope/src/traces/InputMethodEditor.ts b/tools/winscope/src/traces/InputMethodClients.ts similarity index 84% rename from tools/winscope/src/traces/InputMethodEditor.ts rename to tools/winscope/src/traces/InputMethodClients.ts index 8339d708f..a43b15a73 100644 --- a/tools/winscope/src/traces/InputMethodEditor.ts +++ b/tools/winscope/src/traces/InputMethodClients.ts @@ -17,17 +17,17 @@ import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; import TraceBase from './TraceBase'; -export default class InputMethodEditor extends TraceBase { +export default class InputMethodClients extends TraceBase { imeTraceFile: any; constructor(files) { - const imeTraceFile = files[FILE_TYPES.IME_TRACE]; + const imeTraceFile = files[FILE_TYPES.IME_TRACE_CLIENTS]; super(imeTraceFile.data, imeTraceFile.timeline, files); this.imeTraceFile = imeTraceFile; } get type() { - return TRACE_TYPES.IME; + return TRACE_TYPES.IME_CLIENTS; } } diff --git a/tools/winscope/src/transform_ime.js b/tools/winscope/src/transform_ime.js index aca895f03..13bb9c5eb 100644 --- a/tools/winscope/src/transform_ime.js +++ b/tools/winscope/src/transform_ime.js @@ -15,10 +15,8 @@ function transform_entry(entry) { return transform({ obj: entry, kind: 'entry', - name: nanos_to_string(entry.elapsedRealtimeNanos), + name: nanos_to_string(entry.elapsedRealtimeNanos) + " - " + entry.where, children: [ - [[entry.inputMethodManagerService], transform_imms_dump], - [[entry.inputMethodService], transform_ims_dump], [[entry.clients], transform_client_dump] ], timestamp: entry.elapsedRealtimeNanos, @@ -26,15 +24,6 @@ function transform_entry(entry) { }); } -function transform_imms_dump(entry) { - return transform({ - obj: entry, - kind: 'InputMethodManagerService', - name: '', - children: [] - }); -} - function transform_client_dump(entry) { return transform({ obj: entry, @@ -44,13 +33,4 @@ function transform_client_dump(entry) { }); } -function transform_ims_dump(entry) { - return transform({ - obj: entry, - kind: 'InputMethodService', - name: '', - children: [] - }); -} - -export {transform_ime_trace}; \ No newline at end of file +export {transform_ime_trace};