From 20694df8e6c4959df05e9a6d23c9fbcc99cd33b4 Mon Sep 17 00:00:00 2001 From: piggyguy Date: Fri, 12 Jul 2024 23:22:38 +0800 Subject: [PATCH] update event tool Signed-off-by: jiadexiang --- .gitignore | 2 + test/tools/event_tree_to_graph/README.md | 2 +- test/tools/event_tree_to_graph/changelog.md | 9 + test/tools/event_tree_to_graph/main.py | 62 +++- .../resources/dumpfile/input.txt | 321 ++++++++++++++++++ .../src/bats/dump_event.bat | 50 +++ .../src/beans/dump_result.py | 2 +- .../src/beans/event_node.py | 34 +- .../src/beans/event_scope.py | 7 +- .../src/beans/event_tree.py | 2 +- .../src/beans/frame_node.py | 35 +- .../src/beans/procedure_step.py | 10 +- .../src/beans/state_history.py | 4 - .../src/beans/touch_point.py | 24 +- .../event_tree_to_graph/src/content_parser.py | 7 +- .../src/graph/graph_converter.py | 133 ++++++-- .../tools/event_tree_to_graph/src/keywords.py | 32 +- .../event_tree_to_graph/src/pre_process.py | 18 +- .../src/test/keyword_test.py | 19 -- .../src/utils/log_wrapper.py | 16 +- 20 files changed, 638 insertions(+), 151 deletions(-) create mode 100644 test/tools/event_tree_to_graph/changelog.md create mode 100644 test/tools/event_tree_to_graph/resources/dumpfile/input.txt create mode 100644 test/tools/event_tree_to_graph/src/bats/dump_event.bat diff --git a/.gitignore b/.gitignore index b65b2866f1e..e17e90479fc 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,5 @@ lite/maplejs/ lite/tools/ lite/ui/ .clangd +__pycache__/ +output/ diff --git a/test/tools/event_tree_to_graph/README.md b/test/tools/event_tree_to_graph/README.md index 997a69e1f32..355d2dee0f3 100644 --- a/test/tools/event_tree_to_graph/README.md +++ b/test/tools/event_tree_to_graph/README.md @@ -4,7 +4,7 @@ > 3. cmd中执行`python3 main.py -i ./resources/dumpfile/input.txt`; > 4. 生成的手势树 SVG 图像文件输出在制定`./output`目录中; > 5. 使用浏览器查看即可; -> 6. 默认只展示简易内容,如果需要展示完整内容,请将`python main.py -m`; +> 6. 默认只展示简易内容,如果需要展示完整内容,请将`python3 main.py -m`; 【Note】:如果遇到提示 dot 可执行文件无法找到,则需要本地安装 [Graphviz](https://graphviz.org/download/), 并将其bin目录路径添加到环境变量中。 diff --git a/test/tools/event_tree_to_graph/changelog.md b/test/tools/event_tree_to_graph/changelog.md new file mode 100644 index 00000000000..8861f88f64c --- /dev/null +++ b/test/tools/event_tree_to_graph/changelog.md @@ -0,0 +1,9 @@ +#### 2024-07-13 +1. [Added] add bat script + +#### 2024-06-30 +1. [Added] 添加 hit test result 生成 svg 图 + + +#### 2024-06-22 +1. [Added] 初始版本,支持 event dump 转为 svg 树状图 \ No newline at end of file diff --git a/test/tools/event_tree_to_graph/main.py b/test/tools/event_tree_to_graph/main.py index 1107045541d..6ea073f303e 100644 --- a/test/tools/event_tree_to_graph/main.py +++ b/test/tools/event_tree_to_graph/main.py @@ -18,45 +18,71 @@ import argparse +import os +import subprocess +import sys from src.content_parser import ContentParser -from src.graph.graph_converter import generate_event_trees_graph +from src.graph.graph_converter import generate_all_graphs from src.pre_process import handle_file_preprocess -from src.utils.log_wrapper import log_info, log_error +from src.utils.log_wrapper import log_info, log_error, enable_debug def usage(): - print("python main.py -i input.txt") - print('\n Usage: main.py ') + print('python main.py -i input.txt') + print('\n Usage: main.py ') print(' : TODO') print(' : input dump file') - print(' : ouput image file\n') return def parse_args(): - parser = argparse.ArgumentParser(description="") - parser.add_argument("-i", type=str, default="input.txt", help="input the dump source file") - parser.add_argument("-o", type=str, default="dump_temp.txt", help="output the generated image") - parser.add_argument("-m", action='store_true', default=False, help="是否生成详细信息") + parser = argparse.ArgumentParser(description='') + parser.add_argument('-d', action='store_true', default=False, help='enable debug info') + parser.add_argument('-r', action='store_true', default=False, help='dump event tree with device') + parser.add_argument('-i', + type=str, default='./resources/dumpfile/input.txt', help='input the dump source file') + parser.add_argument('-m', action='store_true', default=False, help='add details info') argument = parser.parse_args() argument.input_file = argument.i - argument.output_file = argument.o argument.detailed = argument.m + argument.dump_from_device = argument.r + argument.debug = argument.d return argument +def dump_from_device(): + bat_file_path = r'src\bats\dump_event.bat' + try: + subprocess.call([bat_file_path]) + print('capture event tree done.') + except FileNotFoundError: + print(f'file not found: {bat_file_path}') + except Exception as e: + print(f'exception: {e}') + + # python main.py -i input.txt if __name__ == '__main__': - # 解析参数 + # parse the args args = parse_args() - # 预处理 - handle_file_preprocess(args.input_file, args.output_file) - # 读取文件,并解析 - dump_result = ContentParser(args.output_file).do_parse() + # config log model + if args.debug: + enable_debug(True) + # dump trace from device if needed + if args.dump_from_device: + if os.name == 'nt': + dump_from_device() + else: + log_error('only support dump from device on windows') + sys.exit(1) + # pre process + handle_file_preprocess(args.input_file, 'dump_temp.txt') + # read the dump file and parse + dump_result = ContentParser('dump_temp.txt').do_parse() if dump_result.is_succeed(): - log_info("解析成功") + log_info('parse done') dump_result.dump() else: - log_error("解析失败") - generate_event_trees_graph(dump_result, args.detailed) + log_error('parse failed') + generate_all_graphs(dump_result, args.detailed) diff --git a/test/tools/event_tree_to_graph/resources/dumpfile/input.txt b/test/tools/event_tree_to_graph/resources/dumpfile/input.txt new file mode 100644 index 00000000000..d8becc7b7f6 --- /dev/null +++ b/test/tools/event_tree_to_graph/resources/dumpfile/input.txt @@ -0,0 +1,321 @@ +xxx)-(10000:10000:scope)] EventTreeDumpInfo: WindowName: EntryView +xxx)-(10000:10000:scope)] EventTreeDumpInfo: DisplayId: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: WinId: 8 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: Pid: 1550 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: Type: 2001 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: Mode: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: Flag: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: Orientation: 8 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: IsStartingWindow: false +xxx)-(10000:10000:scope)] EventTreeDumpInfo: FirstFrameCallbackCalled: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: VisibilityState: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: Focusable: true +xxx)-(10000:10000:scope)] EventTreeDumpInfo: DecoStatus: true +xxx)-(10000:10000:scope)] EventTreeDumpInfo: IsPrivacyMode: false +xxx)-(10000:10000:scope)] EventTreeDumpInfo: isSnapshotSkip: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: WindowRect: [ 0, 0, 720, 1280 ] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: TouchHotAreas: [ 0, 0, 720, 1280 ] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: bundleName:com.ohos.launcher +xxx)-(10000:10000:scope)] EventTreeDumpInfo: moduleName:phone_launcher +xxx)-(10000:10000:scope)] EventTreeDumpInfo: 0: event tree => +xxx)-(10000:10000:scope)] EventTreeDumpInfo: touch points: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: id: 0, point: Offset (392.00, 312.00), screenPoint: Offset (392.00, 312.00), type: TouchDown, timestamp: 2017-08-25 15:00:20.165, isInjected: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: id: 0, point: Offset (392.00, 312.00), screenPoint: Offset (392.00, 312.00), type: TouchUp, timestamp: 2017-08-25 15:00:20.233, isInjected: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: id: 1, point: Offset (200.00, 112.00), screenPoint: Offset (200.00, 112.00), type: TouchDown, timestamp: 2017-08-25 15:00:27.165, isInjected: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: id: 1, point: Offset (100.00, 456.00), screenPoint: Offset (100.00, 456.00), type: TouchUp, timestamp: 2017-08-25 15:00:27.233, isInjected: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: hittest: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 0, parentId: -1, tag: root, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 1, parentId: 0, tag: stage, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 4, parentId: 1, tag: page, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 7, parentId: 4, tag: Stack, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 8, parentId: 7, tag: Flex, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 11, parentId: 8, tag: Column, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (45.50, 1077.50) - [629.00 x 130.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 9, parentId: 8, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 14, parentId: 9, tag: __Common__, comId: PageDesktopLayout, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 16, parentId: 14, tag: Column, comId: GridSwiper, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 84, parentId: 16, tag: Swiper, comId: GridSwiper_Swiper, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 91, parentId: 84, tag: SwiperIndicator, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (330.00, 1029.50) - [60.00 x 48.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 88, parentId: 84, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 135.50) - [720.00 x 942.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 89, parentId: 88, tag: __Common__, comId: SwiperPage_00, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 825.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 92, parentId: 89, tag: Grid, comId: SwiperPage_Grid_0, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (18.00, 0.00) - [684.00 x 825.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 228, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_7, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (282.00, 141.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 231, parentId: 228, tag: __Common__, comId: SwiperPage_AppItem_7, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 233, parentId: 231, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 235, parentId: 233, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 236, parentId: 235, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 240, parentId: 236, tag: Column, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (40.00, 91.50) - [40.00 x 24.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 237, parentId: 236, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (19.50, 4.50) - [81.00 x 81.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 242, parentId: 237, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [81.00 x 81.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 243, parentId: 242, tag: Badge, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [81.00 x 81.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 245, parentId: 243, tag: Text, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (84.00, -3.00) - [0.00 x 0.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 244, parentId: 243, tag: Image, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [81.00 x 81.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: event procedures: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: finger:0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 242, type: TouchEventActuator, depth: 0, id: 0xef6c5fa0, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, timestamp: 2017-08-25 15:00:20.170 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, timestamp: 2017-08-25 15:00:20.235 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 233, type: TouchEventActuator, depth: 0, id: 0xf072b8a0, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, timestamp: 2017-08-25 15:00:20.170 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, timestamp: 2017-08-25 15:00:20.236 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: TouchEventActuator, depth: 0, id: 0xf072b240, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, timestamp: 2017-08-25 15:00:20.174 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, timestamp: 2017-08-25 15:00:20.236 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: ExclusiveRecognizer, depth: 0, id: 0xf063eed0, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: READY, disposal: NONE, timestamp: 2017-08-25 15:00:20.177 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: SUCCEED, disposal: ACCEPT, timestamp: 2017-08-25 15:00:20.245 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 88, type: ExclusiveRecognizer, depth: 1, id: 0xef57cf40, parentId: 0xf063eed0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: READY, disposal: NONE, timestamp: 2017-08-25 15:00:20.177 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: SUCCEED, disposal: REJECT, timestamp: 2017-08-25 15:00:20.245 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 233, type: ExclusiveRecognizer, depth: 2, id: 0xef57c6f0, parentId: 0xef57cf40 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: READY, disposal: NONE, timestamp: 2017-08-25 15:00:20.177 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: SUCCEED, disposal: ACCEPT, timestamp: 2017-08-25 15:00:20.245 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 235, type: ParallelRecognizer, depth: 3, id: 0xef57c350, parentId: 0xef57c6f0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:20.176 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:20.237 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 235, type: ParallelRecognizer, depth: 4, id: 0xef57bf70, parentId: 0xef57c350 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:20.176 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:20.237 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 237, type: LongPressRecognizer, depth: 5, id: 0xeedba4f0, parentId: 0xef57bf70, customInfo: duration: 800, isForDrag: 0, repeat: 0, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:20.175 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:20.236 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 237, type: SequencedRecognizer, depth: 5, id: 0xef57bb90, parentId: 0xef57bf70 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: READY, disposal: NONE, timestamp: 2017-08-25 15:00:20.175 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:20.236 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 237, type: LongPressRecognizer, depth: 6, id: 0xf06b6f70, parentId: 0xef57bb90, customInfo: duration: 500, isForDrag: 1, repeat: 0, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:20.175 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:20.236 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 237, type: PanRecognizer, depth: 6, id: 0xf0710020, parentId: 0xef57bb90, customInfo: direction: 15, isForDrag: 1, distance: 7.5, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 237, type: LongPressRecognizer, depth: 5, id: 0xeedb9fb0, parentId: 0xef57bf70, customInfo: duration: 800, isForDrag: 1, repeat: 0, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:20.176 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:20.237 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 235, type: LongPressRecognizer, depth: 4, id: 0xeedbaa30, parentId: 0xef57c350, customInfo: duration: 500, isForDrag: 0, repeat: 0, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:20.176 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:20.237 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 233, type: ClickRecognizer, depth: 3, id: 0xf0c19f90, parentId: 0xef57c6f0, customInfo: count: 1, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: READY, disposal: NONE, timestamp: 2017-08-25 15:00:20.177 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: SUCCEED, disposal: ACCEPT, timestamp: 2017-08-25 15:00:20.245 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 88, type: LongPressRecognizer, depth: 2, id: 0xef748aa0, parentId: 0xef57cf40, customInfo: duration: 500, isForDrag: 0, repeat: 0, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:20.177 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:20.245 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: PanRecognizer, depth: 1, id: 0xf3d6bfc0, parentId: 0xf063eed0, customInfo: direction: 3, isForDrag: 0, distance: 7.5, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:20.177 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: NONE, timestamp: 2017-08-25 15:00:20.245 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: finger:1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: TouchEventActuator, depth: 0, id: 0xf072b240, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, timestamp: 2017-08-25 15:00:22.046 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, timestamp: 2017-08-25 15:00:22.130 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: ExclusiveRecognizer, depth: 0, id: 0xf063eed0, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: READY, disposal: NONE, timestamp: 2017-08-25 15:00:22.046 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:22.131 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 88, type: LongPressRecognizer, depth: 1, id: 0xef748aa0, parentId: 0xf063eed0, customInfo: duration: 500, isForDrag: 0, repeat: 0, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:22.046 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:22.131 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: PanRecognizer, depth: 1, id: 0xf3d6bfc0, parentId: 0xf063eed0, customInfo: direction: 3, isForDrag: 0, distance: 7.5, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:22.046 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:22.131 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: 1: event tree => +xxx)-(10000:10000:scope)] EventTreeDumpInfo: touch points: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: id: 0, point: Offset (288.00, 530.00), screenPoint: Offset (288.00, 530.00), type: TouchDown, timestamp: 2017-08-25 15:00:22.043, isInjected: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: id: 0, point: Offset (288.00, 536.00), screenPoint: Offset (288.00, 536.00), type: TouchUp, timestamp: 2017-08-25 15:00:22.130, isInjected: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: hittest: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 0, parentId: -1, tag: root, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 1, parentId: 0, tag: stage, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 4, parentId: 1, tag: page, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 7, parentId: 4, tag: Stack, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 8, parentId: 7, tag: Flex, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 11, parentId: 8, tag: Column, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (45.50, 1077.50) - [629.00 x 130.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 9, parentId: 8, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 14, parentId: 9, tag: __Common__, comId: PageDesktopLayout, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 16, parentId: 14, tag: Column, comId: GridSwiper, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 84, parentId: 16, tag: Swiper, comId: GridSwiper_Swiper, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 91, parentId: 84, tag: SwiperIndicator, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (330.00, 1029.50) - [60.00 x 48.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 88, parentId: 84, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 135.50) - [720.00 x 942.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 89, parentId: 88, tag: __Common__, comId: SwiperPage_00, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 825.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 92, parentId: 89, tag: Grid, comId: SwiperPage_Grid_0, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (18.00, 0.00) - [684.00 x 825.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 228, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_7, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (282.00, 141.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 131, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_6, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (141.00, 141.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 125, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_5, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (0.00, 141.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 119, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_4, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (564.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 113, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_3, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (423.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 107, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_2, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (282.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 101, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_1, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (141.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 95, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_0, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: event procedures: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: finger:0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: TouchEventActuator, depth: 0, id: 0xf072b240, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, timestamp: 2017-08-25 15:00:22.046 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, timestamp: 2017-08-25 15:00:22.130 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: ExclusiveRecognizer, depth: 0, id: 0xf063eed0, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: READY, disposal: NONE, timestamp: 2017-08-25 15:00:22.046 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:22.131 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 88, type: LongPressRecognizer, depth: 1, id: 0xef748aa0, parentId: 0xf063eed0, customInfo: duration: 500, isForDrag: 0, repeat: 0, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:22.046 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:22.131 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: PanRecognizer, depth: 1, id: 0xf3d6bfc0, parentId: 0xf063eed0, customInfo: direction: 3, isForDrag: 0, distance: 7.5, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:22.046 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:22.131 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: 2: event tree => +xxx)-(10000:10000:scope)] EventTreeDumpInfo: touch points: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: id: 0, point: Offset (278.00, 551.00), screenPoint: Offset (278.00, 551.00), type: TouchDown, timestamp: 2017-08-25 15:00:22.244, isInjected: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: id: 0, point: Offset (278.00, 551.00), screenPoint: Offset (278.00, 551.00), type: TouchUp, timestamp: 2017-08-25 15:00:22.295, isInjected: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: hittest: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 0, parentId: -1, tag: root, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 1, parentId: 0, tag: stage, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 4, parentId: 1, tag: page, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 7, parentId: 4, tag: Stack, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 8, parentId: 7, tag: Flex, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 11, parentId: 8, tag: Column, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (45.50, 1077.50) - [629.00 x 130.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 9, parentId: 8, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 14, parentId: 9, tag: __Common__, comId: PageDesktopLayout, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 16, parentId: 14, tag: Column, comId: GridSwiper, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 84, parentId: 16, tag: Swiper, comId: GridSwiper_Swiper, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 91, parentId: 84, tag: SwiperIndicator, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (330.00, 1029.50) - [60.00 x 48.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 88, parentId: 84, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 135.50) - [720.00 x 942.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 89, parentId: 88, tag: __Common__, comId: SwiperPage_00, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 825.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 92, parentId: 89, tag: Grid, comId: SwiperPage_Grid_0, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (18.00, 0.00) - [684.00 x 825.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 228, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_7, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (282.00, 141.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 131, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_6, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (141.00, 141.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 125, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_5, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (0.00, 141.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 119, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_4, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (564.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 113, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_3, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (423.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 107, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_2, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (282.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 101, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_1, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (141.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 95, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_0, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: event procedures: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: finger:0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: TouchEventActuator, depth: 0, id: 0xf072b240, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, timestamp: 2017-08-25 15:00:22.247 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, timestamp: 2017-08-25 15:00:22.295 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: ExclusiveRecognizer, depth: 0, id: 0xf063eed0, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: READY, disposal: NONE, timestamp: 2017-08-25 15:00:22.247 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:22.295 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 88, type: LongPressRecognizer, depth: 1, id: 0xef748aa0, parentId: 0xf063eed0, customInfo: duration: 500, isForDrag: 0, repeat: 0, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:22.247 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:22.295 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: PanRecognizer, depth: 1, id: 0xf3d6bfc0, parentId: 0xf063eed0, customInfo: direction: 3, isForDrag: 0, distance: 7.5, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:22.247 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:22.295 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: 3: event tree => +xxx)-(10000:10000:scope)] EventTreeDumpInfo: touch points: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: id: 0, point: Offset (511.00, 636.00), screenPoint: Offset (511.00, 636.00), type: TouchDown, timestamp: 2017-08-25 15:00:25.152, isInjected: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: id: 0, point: Offset (122.00, 673.00), screenPoint: Offset (122.00, 673.00), type: TouchUp, timestamp: 2017-08-25 15:00:25.402, isInjected: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: hittest: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 0, parentId: -1, tag: root, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 1, parentId: 0, tag: stage, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 4, parentId: 1, tag: page, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 7, parentId: 4, tag: Stack, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 8, parentId: 7, tag: Flex, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 11, parentId: 8, tag: Column, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (45.50, 1077.50) - [629.00 x 130.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 9, parentId: 8, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 14, parentId: 9, tag: __Common__, comId: PageDesktopLayout, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 16, parentId: 14, tag: Column, comId: GridSwiper, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 84, parentId: 16, tag: Swiper, comId: GridSwiper_Swiper, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 91, parentId: 84, tag: SwiperIndicator, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (330.00, 1029.50) - [60.00 x 48.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 88, parentId: 84, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 135.50) - [720.00 x 942.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 89, parentId: 88, tag: __Common__, comId: SwiperPage_00, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 825.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 92, parentId: 89, tag: Grid, comId: SwiperPage_Grid_0, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (18.00, 0.00) - [684.00 x 825.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 228, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_7, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (282.00, 141.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 131, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_6, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (141.00, 141.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 125, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_5, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (0.00, 141.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 119, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_4, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (564.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 113, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_3, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (423.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 107, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_2, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (282.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 101, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_1, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (141.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 95, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_0, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: event procedures: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: finger:0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: TouchEventActuator, depth: 0, id: 0xf072b240, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, timestamp: 2017-08-25 15:00:25.155 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, timestamp: 2017-08-25 15:00:25.404 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: ExclusiveRecognizer, depth: 0, id: 0xf063eed0, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: READY, disposal: NONE, timestamp: 2017-08-25 15:00:25.156 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchMove, state: SUCCEED, disposal: ACCEPT, timestamp: 2017-08-25 15:00:25.341 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: SUCCEED, disposal: REJECT, timestamp: 2017-08-25 15:00:25.416 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 88, type: LongPressRecognizer, depth: 1, id: 0xef748aa0, parentId: 0xf063eed0, customInfo: duration: 500, isForDrag: 0, repeat: 0, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:25.155 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:25.404 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: PanRecognizer, depth: 1, id: 0xf3d6bfc0, parentId: 0xf063eed0, customInfo: direction: 3, isForDrag: 0, distance: 7.5, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:25.156 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchMove, state: SUCCEED, disposal: ACCEPT, timestamp: 2017-08-25 15:00:25.341 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: READY, disposal: ACCEPT, timestamp: 2017-08-25 15:00:25.416 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: 4: event tree => +xxx)-(10000:10000:scope)] EventTreeDumpInfo: touch points: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: id: 0, point: Offset (198.00, 581.00), screenPoint: Offset (198.00, 581.00), type: TouchDown, timestamp: 2017-08-25 15:00:26.348, isInjected: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: id: 0, point: Offset (559.00, 562.00), screenPoint: Offset (559.00, 562.00), type: TouchUp, timestamp: 2017-08-25 15:00:26.611, isInjected: 0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: hittest: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 0, parentId: -1, tag: root, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 1, parentId: 0, tag: stage, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 4, parentId: 1, tag: page, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 7, parentId: 4, tag: Stack, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 8, parentId: 7, tag: Flex, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 11, parentId: 8, tag: Column, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (45.50, 1077.50) - [629.00 x 130.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 9, parentId: 8, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 14, parentId: 9, tag: __Common__, comId: PageDesktopLayout, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 16, parentId: 14, tag: Column, comId: GridSwiper, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 84, parentId: 16, tag: Swiper, comId: GridSwiper_Swiper, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1077.50] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 91, parentId: 84, tag: SwiperIndicator, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (330.00, 1029.50) - [60.00 x 48.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 88, parentId: 84, tag: Column, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 135.50) - [720.00 x 942.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 89, parentId: 88, tag: __Common__, comId: SwiperPage_00, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 825.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 92, parentId: 89, tag: Grid, comId: SwiperPage_Grid_0, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (18.00, 0.00) - [684.00 x 825.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 228, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_7, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (282.00, 141.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 131, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_6, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (141.00, 141.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 125, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_5, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (0.00, 141.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 119, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_4, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (564.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 113, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_3, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (423.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 107, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_2, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (282.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 101, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_1, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (141.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: nodeId: 95, parentId: 92, tag: GridItem, comId: SwiperPage_GridItem_0, monopolizeEvents: 0, isHit: 0, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [120.00 x 120.00] +xxx)-(10000:10000:scope)] EventTreeDumpInfo: event procedures: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: finger:0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: TouchEventActuator, depth: 0, id: 0xf072b240, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, timestamp: 2017-08-25 15:00:26.351 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, timestamp: 2017-08-25 15:00:26.613 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: ExclusiveRecognizer, depth: 0, id: 0xf063eed0, parentId: 0x0 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: READY, disposal: NONE, timestamp: 2017-08-25 15:00:26.352 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchMove, state: SUCCEED, disposal: ACCEPT, timestamp: 2017-08-25 15:00:26.414 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: SUCCEED, disposal: REJECT, timestamp: 2017-08-25 15:00:26.617 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 88, type: LongPressRecognizer, depth: 1, id: 0xef748aa0, parentId: 0xf063eed0, customInfo: duration: 500, isForDrag: 0, repeat: 0, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:26.351 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchMove, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:26.411 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:26.613 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: frameNodeId: 84, type: PanRecognizer, depth: 1, id: 0xf3d6bfc0, parentId: 0xf063eed0, customInfo: direction: 3, isForDrag: 0, distance: 7.5, fingers: 1 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: stateHistory: +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:26.352 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchMove, state: SUCCEED, disposal: ACCEPT, timestamp: 2017-08-25 15:00:26.414 +xxx)-(10000:10000:scope)] EventTreeDumpInfo: procedure: HandleTouchUp, state: READY, disposal: ACCEPT, timestamp: 2017-08-25 15:00:26.617 \ No newline at end of file diff --git a/test/tools/event_tree_to_graph/src/bats/dump_event.bat b/test/tools/event_tree_to_graph/src/bats/dump_event.bat new file mode 100644 index 00000000000..a8a842ba7e3 --- /dev/null +++ b/test/tools/event_tree_to_graph/src/bats/dump_event.bat @@ -0,0 +1,50 @@ +:: Copyright (c) 2024 Huawei Device Co., Ltd. +:: 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. + +@echo off + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +goto start + +:start +adb devices | findstr /i "device" > nul +if %errorlevel%==0 ( + goto execute +) else ( + echo. + echo Error: No device found. + echo. + goto fail +) + +:execute +@echo off +@rem Replace here with hdc command +adb devices + +echo. +echo Please enter the window ID which is to be dumped. +echo. +set /p userInput="please enter the window ID:" + +adb shell "dumpsys window windows | grep -E %userInput%" > window_id.txt + +:fail +exit /b 1 \ No newline at end of file diff --git a/test/tools/event_tree_to_graph/src/beans/dump_result.py b/test/tools/event_tree_to_graph/src/beans/dump_result.py index b477433b382..4905d798ae6 100644 --- a/test/tools/event_tree_to_graph/src/beans/dump_result.py +++ b/test/tools/event_tree_to_graph/src/beans/dump_result.py @@ -33,7 +33,7 @@ class DumpResult(BaseBean): self.check_parse_result() if self.is_succeed(): self.update_tree_info() - print('parse result: ' + self.to_string()) + log_info('parse result: ' + self.to_string()) def parse_event_trees(self, input_str): if input_str is None or len(input_str) == 0: diff --git a/test/tools/event_tree_to_graph/src/beans/event_node.py b/test/tools/event_tree_to_graph/src/beans/event_node.py index fe22a32b2d4..2cf09d2e135 100644 --- a/test/tools/event_tree_to_graph/src/beans/event_node.py +++ b/test/tools/event_tree_to_graph/src/beans/event_node.py @@ -21,15 +21,9 @@ from typing import List from src.beans.base_bean import BaseBean from src.beans.frame_node import FrameNode from src.beans.state_history import StateHistory -# frameNodeId: 84, type: TouchEventActuator, depth: 0, id: 0xf072b240, parentId: 0x0 -# stateHistory: -# procedure: HandleTouchDown, timestamp: 2017-08-25 15:00:22.247 -# procedure: HandleTouchUp, timestamp: 2017-08-25 15:00:22.295 - -from src.keywords import event_procedure_keyword, get_sample_key, get_sample_value +from src.keywords import event_procedure_keyword, get_sample_key, get_sample_separator_count from src.utils.log_wrapper import log_info, log_error from src.utils.value_parser import get_value_as_int, get_value_as_str, get_value_as_float -from typing import List # frameNodeId: 84, type: PanRecognizer, depth: 1, id: 0xf3d6bfc0, parentId: 0xf063eed0, customInfo: direction: 3, @@ -68,29 +62,29 @@ class EventNode(BaseBean): # frameNodeId: 84, type: TouchEventActuator, depth: 0, id: 0xf072b240, parentId: 0x0 frame_node_str = texts[0] self.frameNodeId = get_value_as_int(frame_node_str, get_sample_key(event_procedure_keyword, 'frameNodeId'), - get_sample_value(event_procedure_keyword, 'frameNodeId')) + get_sample_separator_count(event_procedure_keyword, 'frameNodeId')) self.type = get_value_as_str(frame_node_str, get_sample_key(event_procedure_keyword, 'type'), - get_sample_value(event_procedure_keyword, 'type')) + get_sample_separator_count(event_procedure_keyword, 'type')) self.depth = get_value_as_int(frame_node_str, get_sample_key(event_procedure_keyword, 'depth'), - get_sample_key(event_procedure_keyword, 'depth')) + get_sample_separator_count(event_procedure_keyword, 'depth')) self.address = get_value_as_str(frame_node_str, get_sample_key(event_procedure_keyword, 'id'), - get_sample_key(event_procedure_keyword, 'id')) + get_sample_separator_count(event_procedure_keyword, 'id')) self.parentId = get_value_as_str(frame_node_str, get_sample_key(event_procedure_keyword, 'parentId'), - get_sample_key(event_procedure_keyword, 'parentId')) + get_sample_separator_count(event_procedure_keyword, 'parentId')) self.duration = get_value_as_int(frame_node_str, get_sample_key(event_procedure_keyword, 'duration'), - get_sample_key(event_procedure_keyword, 'duration')) + get_sample_separator_count(event_procedure_keyword, 'duration')) self.custom_info = get_value_as_str(frame_node_str, get_sample_key(event_procedure_keyword, 'customInfo'), - get_sample_key(event_procedure_keyword, 'customInfo')) + get_sample_separator_count(event_procedure_keyword, 'customInfo')) self.direction = get_value_as_int(frame_node_str, get_sample_key(event_procedure_keyword, 'direction'), - get_sample_key(event_procedure_keyword, 'direction')) + get_sample_separator_count(event_procedure_keyword, 'direction')) self.distance = get_value_as_float(frame_node_str, get_sample_key(event_procedure_keyword, 'distance'), - get_sample_key(event_procedure_keyword, 'distance')) + get_sample_separator_count(event_procedure_keyword, 'distance')) self.isForDrag = get_value_as_int(frame_node_str, get_sample_key(event_procedure_keyword, 'isForDrag'), - get_sample_key(event_procedure_keyword, 'isForDrag')) + get_sample_separator_count(event_procedure_keyword, 'isForDrag')) self.repeat = get_value_as_int(frame_node_str, get_sample_key(event_procedure_keyword, 'repeat'), - get_sample_key(event_procedure_keyword, 'repeat')) + get_sample_separator_count(event_procedure_keyword, 'repeat')) self.fingers = get_value_as_int(frame_node_str, get_sample_key(event_procedure_keyword, 'fingers'), - get_sample_key(event_procedure_keyword, 'fingers')) + get_sample_separator_count(event_procedure_keyword, 'fingers')) # parse state history self.parse_state_history(texts, 1) self.check_parse_result() @@ -128,7 +122,7 @@ class EventNode(BaseBean): def get_detailed_summary_string(self): return (self.tag + '(' + str( - self.frameNodeId) + ') ' + self.type + ' ' + self.address + '\n' + self.frameNodeId) + ') ' + self.type + ' ' + self.address + '\n' + self.state_history.get_detailed_summary_string()) def to_string(self): diff --git a/test/tools/event_tree_to_graph/src/beans/event_scope.py b/test/tools/event_tree_to_graph/src/beans/event_scope.py index 6a5547442f3..b79e3c2ea70 100644 --- a/test/tools/event_tree_to_graph/src/beans/event_scope.py +++ b/test/tools/event_tree_to_graph/src/beans/event_scope.py @@ -21,7 +21,8 @@ from typing import List from src.beans.base_bean import BaseBean from src.beans.event_node import EventNode from src.beans.frame_node import FrameNode -from src.keywords import event_procedure_keyword, keywords_dict, get_sample_key, get_sample_value, get_dict_value +from src.keywords import event_procedure_keyword, keywords_dict, get_sample_key, get_dict_value, \ + get_sample_separator_count from src.utils.log_wrapper import log_info from src.utils.value_parser import get_value_as_int, pack_string_until_next_keyword @@ -39,7 +40,7 @@ class EventScope(BaseBean): return finger_str = texts[0] self.finger = get_value_as_int(finger_str, get_sample_key(event_procedure_keyword, 'finger'), - get_sample_value(event_procedure_keyword, 'finger'), True) + get_sample_separator_count(event_procedure_keyword, 'finger'), True) self.parse_event_nodes(texts, 1) self.check_parse_result() @@ -63,7 +64,7 @@ class EventScope(BaseBean): # procedure: HandleTouchDown, state: DETECTING, disposal: NONE, timestamp: 2017-08-25 15:00:22.247 # procedure: HandleTouchUp, state: FAIL, disposal: REJECT, timestamp: 2017-08-25 15:00:22.295 def parse_event_nodes(self, spliced_lines, start_index): - start_keyword = get_sample_key(event_procedure_keyword, 'frameNodeId').key + start_keyword = get_sample_key(event_procedure_keyword, 'frameNodeId') end_keywords = [start_keyword, get_dict_value(keywords_dict, 'event tree')] current_index = 0 while current_index < len(spliced_lines): diff --git a/test/tools/event_tree_to_graph/src/beans/event_tree.py b/test/tools/event_tree_to_graph/src/beans/event_tree.py index ef2c99297c6..3524f43520c 100644 --- a/test/tools/event_tree_to_graph/src/beans/event_tree.py +++ b/test/tools/event_tree_to_graph/src/beans/event_tree.py @@ -21,7 +21,7 @@ from src.beans.event_procedures import EventProcedures from src.beans.frame_node import FrameNode from src.beans.touch_point import TouchPoint from src.utils.log_wrapper import log_info, log_error -from src.utils.value_parser import pack_string_until_next_keyword, get_value_as_int +from src.utils.value_parser import pack_string_until_next_keyword # includes touch points and frame nodes(hittest) and event procedures diff --git a/test/tools/event_tree_to_graph/src/beans/frame_node.py b/test/tools/event_tree_to_graph/src/beans/frame_node.py index 9597d59f306..53e3847227a 100644 --- a/test/tools/event_tree_to_graph/src/beans/frame_node.py +++ b/test/tools/event_tree_to_graph/src/beans/frame_node.py @@ -17,7 +17,7 @@ # from src.beans.base_bean import BaseBean -from src.keywords import hittest_node_keyword, get_sample_key, get_sample_value +from src.keywords import hittest_node_keyword, get_sample_key, get_sample_separator_count from src.utils.log_wrapper import log_info from src.utils.value_parser import get_value_as_int, get_value_as_str @@ -40,22 +40,22 @@ class FrameNode(BaseBean): super().__init__() self.original_str = node_dump_str self.nodeId = get_value_as_int(node_dump_str, get_sample_key(hittest_node_keyword, 'nodeId'), - get_sample_value(hittest_node_keyword, 'nodeId')) + get_sample_separator_count(hittest_node_keyword, 'nodeId')) self.parentId = get_value_as_int(node_dump_str, get_sample_key(hittest_node_keyword, 'parentId'), - get_sample_value(hittest_node_keyword, 'parentId')) + get_sample_separator_count(hittest_node_keyword, 'parentId')) self.tag = get_value_as_str(node_dump_str, get_sample_key(hittest_node_keyword, 'tag'), - get_sample_value(hittest_node_keyword, 'tag')) + get_sample_separator_count(hittest_node_keyword, 'tag')) self.com_id = get_value_as_str(node_dump_str, get_sample_key(hittest_node_keyword, 'comId'), - get_sample_value(hittest_node_keyword, 'comId')) + get_sample_separator_count(hittest_node_keyword, 'comId')) self.monopolizeEvents = get_value_as_int(node_dump_str, get_sample_key(hittest_node_keyword, 'monopolizeEvents'), - get_sample_value(hittest_node_keyword, 'monopolizeEvents')) + get_sample_separator_count(hittest_node_keyword, 'monopolizeEvents')) self.isHit = get_value_as_int(node_dump_str, get_sample_key(hittest_node_keyword, 'isHit'), - get_sample_value(hittest_node_keyword, 'isHit')) + get_sample_separator_count(hittest_node_keyword, 'isHit')) self.hitTestMode = get_value_as_int(node_dump_str, get_sample_key(hittest_node_keyword, 'hitTestMode'), - get_sample_value(hittest_node_keyword, 'hitTestMode')) + get_sample_separator_count(hittest_node_keyword, 'hitTestMode')) self.responseRegion = get_value_as_str(node_dump_str, get_sample_key(hittest_node_keyword, 'responseRegion'), - get_sample_value(hittest_node_keyword, 'responseRegion'), True) + get_sample_separator_count(hittest_node_keyword, 'responseRegion'), True) self.check_parse_result() def check_parse_result(self): @@ -66,11 +66,20 @@ class FrameNode(BaseBean): self.parse_succeed() def to_string(self): - result_str = ' nodeId: ' + str(self.nodeId) + ', parentId: ' + str(self.parentId) + ', tag: ' + self.tag + result_str = 'nodeId: {}, parentId: {}, tag: {}'.format(self.nodeId, self.parentId, self.tag) if self.com_id is not None: - result_str += ', comId: ' + self.com_id - result_str += ', monopolizeEvents: ' + str(self.monopolizeEvents) + ', isHit: ' + str( - self.isHit) + ', hitTestMode: ' + str(self.hitTestMode) + ', responseRegion: ' + self.responseRegion + result_str += ', comId: {}'.format(self.com_id) + result_str += ', monopolizeEvents: {}, isHit: {}, hitTestMode: {}, responseRegion: {}'.format( + self.monopolizeEvents, self.isHit, self.hitTestMode, self.responseRegion) + return result_str + + def get_summary_string(self): + result_str = '{}({}) , isHit: {}'.format(self.tag, self.nodeId, self.isHit) + return result_str + + def get_showup_string(self): + result_str = ("{}({})\n\nisHit: {}\nhitTestMode: {}" + .format(self.tag, self.nodeId, self.isHit, self.hitTestMode)) return result_str def dump(self): diff --git a/test/tools/event_tree_to_graph/src/beans/procedure_step.py b/test/tools/event_tree_to_graph/src/beans/procedure_step.py index 5fcdacda949..62722635fb4 100644 --- a/test/tools/event_tree_to_graph/src/beans/procedure_step.py +++ b/test/tools/event_tree_to_graph/src/beans/procedure_step.py @@ -17,7 +17,7 @@ # from src.beans.base_bean import BaseBean -from src.keywords import event_procedure_keyword, get_sample_key, get_sample_value +from src.keywords import event_procedure_keyword, get_sample_key, get_sample_separator_count from src.utils.log_wrapper import log_info from src.utils.value_parser import get_value_as_str @@ -35,13 +35,13 @@ class ProcedureStep(BaseBean): super().__init__() self.original_str = input_str self.procedure = get_value_as_str(input_str, get_sample_key(event_procedure_keyword, 'procedure'), - get_sample_value(event_procedure_keyword, 'procedure')) + get_sample_separator_count(event_procedure_keyword, 'procedure')) self.state = get_value_as_str(input_str, get_sample_key(event_procedure_keyword, 'state'), - get_sample_value(event_procedure_keyword, 'state')) + get_sample_separator_count(event_procedure_keyword, 'state')) self.disposal = get_value_as_str(input_str, get_sample_key(event_procedure_keyword, 'disposal'), - get_sample_value(event_procedure_keyword, 'disposal')) + get_sample_separator_count(event_procedure_keyword, 'disposal')) self.timestamp = get_value_as_str(input_str, get_sample_key(event_procedure_keyword, 'timestamp'), - get_sample_value(event_procedure_keyword, 'timestamp'), True) + get_sample_separator_count(event_procedure_keyword, 'timestamp'), True) self.check_parse_result() def check_parse_result(self): diff --git a/test/tools/event_tree_to_graph/src/beans/state_history.py b/test/tools/event_tree_to_graph/src/beans/state_history.py index e55a9d9a554..de47c2f949f 100644 --- a/test/tools/event_tree_to_graph/src/beans/state_history.py +++ b/test/tools/event_tree_to_graph/src/beans/state_history.py @@ -17,10 +17,6 @@ # from src.beans.base_bean import BaseBean -# stateHistory: -# procedure: HandleTouchDown, timestamp: 2017-08-25 15:00:22.247 -# procedure: HandleTouchUp, timestamp: 2017-08-25 15:00:22.295 - from src.beans.procedure_step import ProcedureStep from src.utils.log_wrapper import log_info diff --git a/test/tools/event_tree_to_graph/src/beans/touch_point.py b/test/tools/event_tree_to_graph/src/beans/touch_point.py index 0746efc8b27..5767a0e468f 100644 --- a/test/tools/event_tree_to_graph/src/beans/touch_point.py +++ b/test/tools/event_tree_to_graph/src/beans/touch_point.py @@ -17,7 +17,7 @@ # from src.beans.base_bean import BaseBean -from src.keywords import touch_point_keyword, get_sample_key, get_sample_value +from src.keywords import touch_point_keyword, get_sample_key, get_sample_separator_count from src.utils.log_wrapper import log_info from src.utils.value_parser import get_value_as_int, get_value_as_str @@ -37,17 +37,17 @@ class TouchPoint(BaseBean): super().__init__() self.original_str = input_str self.id = get_value_as_int(input_str, get_sample_key(touch_point_keyword, 'id'), - get_sample_value(touch_point_keyword, 'id')) + get_sample_separator_count(touch_point_keyword, 'id')) self.point = get_value_as_str(input_str, get_sample_key(touch_point_keyword, 'point'), - get_sample_value(touch_point_keyword, 'point')) + get_sample_separator_count(touch_point_keyword, 'point')) self.screenPoint = get_value_as_str(input_str, get_sample_key(touch_point_keyword, 'screenPoint'), - get_sample_value(touch_point_keyword, 'screenPoint')) + get_sample_separator_count(touch_point_keyword, 'screenPoint')) self.type = get_value_as_str(input_str, get_sample_key(touch_point_keyword, 'type'), - get_sample_value(touch_point_keyword, 'type')) + get_sample_separator_count(touch_point_keyword, 'type')) self.timestamp = get_value_as_str(input_str, get_sample_key(touch_point_keyword, 'timestamp'), - get_sample_value(touch_point_keyword, 'timestamp')) + get_sample_separator_count(touch_point_keyword, 'timestamp')) self.isInjected = get_value_as_int(input_str, get_sample_key(touch_point_keyword, 'isInjected'), - get_sample_value(touch_point_keyword, 'isInjected'), True) + get_sample_separator_count(touch_point_keyword, 'isInjected'), True) self.check_parse_result() def check_parse_result(self): @@ -58,14 +58,12 @@ class TouchPoint(BaseBean): self.parse_succeed() def to_string(self): - return ' id: ' + str( - self.id) + ', point: ' + self.point + ', screenPoint: ' + self.screenPoint + ', type: ' + self.type + ( - ', timestamp: ') + self.timestamp + ', isInjected: ' + str( - self.isInjected) + return ('id: {}, point: {}, screenPoint: {}, type: {}, timestamp: {}, isInjected: {}' + .format(self.id, self.point, self.screenPoint, self.type, self.timestamp, self.isInjected)) def to_summary_string(self): - return 'id: ' + str(self.id) + ', ' + self.point + ', ' + self.screenPoint + ', ' + self.type + ( - ', ') + self.timestamp + return ('id: {}, {}, {}, {}, {}' + .format(str(self.id), self.point, self.screenPoint, self.type, self.timestamp)) def dump(self): log_info(self.to_string()) diff --git a/test/tools/event_tree_to_graph/src/content_parser.py b/test/tools/event_tree_to_graph/src/content_parser.py index 525d81fb735..bfe33b4367e 100644 --- a/test/tools/event_tree_to_graph/src/content_parser.py +++ b/test/tools/event_tree_to_graph/src/content_parser.py @@ -16,13 +16,12 @@ # limitations under the License. # -# 读取预处理后的文件,将内容解析为对象待用 import os from src.beans.dump_result import DumpResult from src.keywords import keywords_dict, get_dict_value -from src.utils.log_wrapper import log_error +from src.utils.log_wrapper import log_error class ContentParser: @@ -38,11 +37,11 @@ class ContentParser: def do_parse(self): file_content = self.load_file() if file_content is None or file_content == '': - log_error('文件不存在') + log_error('file is not exist') return None event_tree_count = self.pre_check_event_tree_count(file_content) if event_tree_count == 0: - log_error('没有找到任何 event tree') + log_error('NO event tree found') return None self.parse_result = DumpResult(file_content) return self.parse_result diff --git a/test/tools/event_tree_to_graph/src/graph/graph_converter.py b/test/tools/event_tree_to_graph/src/graph/graph_converter.py index dd461ada041..8e685f11645 100644 --- a/test/tools/event_tree_to_graph/src/graph/graph_converter.py +++ b/test/tools/event_tree_to_graph/src/graph/graph_converter.py @@ -1,6 +1,5 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- - # # Copyright (c) 2024 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,18 +16,19 @@ # import os.path - from typing import List - from graphviz import Digraph - from src.beans.event_node import EventNode from src.beans.event_procedures import EventProcedures from src.beans.event_scope import EventScope from src.beans.event_tree import EventTree +from src.beans.frame_node import FrameNode from src.keywords import get_dict_value +from src.utils.log_wrapper import log_message output_folder = 'output' +# finger scope edge colors +edge_colors = ['black', 'blue', 'brown', 'purple', 'yellow', 'pink', 'gray'] def reset_output_dir(): @@ -53,9 +53,9 @@ def draw_title_and_touch_points(tree: EventTree, tree_name, dot): dot.subgraph(sub_graph) -class ParentChildrenPair: +class EventParentChildrenPair: item_self: EventNode = None # parent - children: List['ParentChildrenPair'] = [] + children: List['EventParentChildrenPair'] = [] def __init__(self, item): self.item_self = item @@ -74,8 +74,8 @@ def build_event_node_tree(scope: EventScope): flatten_frame_nodes: List[EventNode] = scope.event_nodes # make a mapping table for item in flatten_frame_nodes: - node_map[item.address] = ParentChildrenPair(item) - # # append child nodes to their parent's `children` attribute based on `parentId` + node_map[item.address] = EventParentChildrenPair(item) + # append child nodes to their parent's `children` attribute based on `parentId` for item in flatten_frame_nodes: if item.parentId is not None and item.parentId != 0 and len(item.parentId) > 6: parent = get_dict_value(node_map, item.parentId) @@ -89,18 +89,21 @@ def build_event_node_tree(scope: EventScope): # draw node relationships recursively -def draw_event_scope_tree_recursively(node_tree: List[ParentChildrenPair], parent_node_name: str, graph: Digraph, - is_show_detail): +def draw_event_scop_tree_recursively(node_tree: List[EventParentChildrenPair], + parent_node_name: str, + finger, + graph: Digraph, + is_show_detail): for item in node_tree: node_name = item.get_address() node_label = item.item_self.get_summary_string() if is_show_detail: node_label = item.item_self.get_detailed_summary_string() - graph.node(node_name, node_label) + graph.node(node_name, node_label, tooltip=item.item_self.to_string()) if parent_node_name is not None: - graph.edge(parent_node_name, node_name) + graph.edge(parent_node_name, node_name, color=edge_colors[finger]) if len(item.children) > 0: - draw_event_scope_tree_recursively(item.children, node_name, graph, is_show_detail) + draw_event_scop_tree_recursively(item.children, node_name, finger, graph, is_show_detail) def draw_event_procedures(tree: EventTree, tree_name, dot, is_show_detail): @@ -109,6 +112,7 @@ def draw_event_procedures(tree: EventTree, tree_name, dot, is_show_detail): return tag = f'{str(tree.tree_id)} event procedures' sub_graph = Digraph(comment=tag) + current_index = 0 for scope in event_procedures.event_scopes: comment = f'event scope {str(scope.finger)}' sub_scope_graph = Digraph(comment=comment) @@ -116,15 +120,15 @@ def draw_event_procedures(tree: EventTree, tree_name, dot, is_show_detail): # treat finger as root node of subgraph scope_root_node_name = f'finger {str(scope.finger)}' sub_scope_graph.node(scope_root_node_name, scope_root_node_name) - dot.edge(tree_name, scope_root_node_name) - draw_event_scope_tree_recursively(node_tree, scope_root_node_name, sub_scope_graph, is_show_detail) + dot.edge(tree_name, scope_root_node_name, color=edge_colors[current_index]) + draw_event_scop_tree_recursively(node_tree, scope_root_node_name, current_index, sub_scope_graph, + is_show_detail) sub_graph.subgraph(sub_scope_graph) + current_index += 1 dot.subgraph(sub_graph) def generate_event_trees_graph(dump_result, is_show_detail): - # delete all history files before generate new ones - reset_output_dir() current_index = 0 # draw every event tree into file for tree in dump_result.event_trees: @@ -136,10 +140,95 @@ def generate_event_trees_graph(dump_result, is_show_detail): draw_title_and_touch_points(tree, tree_name, dot) # draw event procedures draw_event_procedures(tree, tree_name, dot, is_show_detail) - # save or show directly - # dot.view() - # or save to file - out_graph_file_name = f'/view_tree_{str(tree.tree_id)}' - out_graph_file_name = os.path.join(output_folder, out_graph_file_name) + # save to file + file_name = f'event_tree_{str(tree.tree_id)}' + out_graph_file_name = os.path.join(output_folder, file_name) dot.render(out_graph_file_name, format='svg', cleanup=True, view=False) current_index += 1 + log_message('event trees graph generated done, count: ' + str(current_index)) + + +class FrameNodeParentChildrenPair: + item_self: FrameNode = None # parent + children: List['FrameNodeParentChildrenPair'] = [] + + def __init__(self, item): + self.item_self = item + self.children = [] + + def append_child(self, child): + self.children.append(child) + + def get_node_id(self): + return self.item_self.nodeId + + +def build_hittest_result_tree(tree: EventTree): + result = [] + node_map = {} + flatten_frame_nodes: List[FrameNode] = tree.frame_nodes + # make a mapping table + for item in flatten_frame_nodes: + node_map[item.nodeId] = FrameNodeParentChildrenPair(item) + # # append child nodes to their parent's `children` attribute based on `parentId` + for item in flatten_frame_nodes: + if item.parentId is not None and item.parentId != -1: + parent = get_dict_value(node_map, item.parentId) + if parent is not None: + child = get_dict_value(node_map, item.nodeId) + parent.append_child(child) + else: + child = get_dict_value(node_map, item.nodeId) + result.append(child) + return result + + +def generate_hittest_label_with_highlight(item: FrameNode): + if item.isHit == 0: + return item.get_showup_string() + + label = '<{}({})
isHit: {}
hitTestMode: {} >'.format(item.tag, item.nodeId, + item.isHit, + item.hitTestMode) + return label + + +def draw_hittest_result_recursively(node_tree: List[FrameNodeParentChildrenPair], parent_node_name: str, + graph: Digraph): + for item in node_tree: + node_name = 'frame node ' + str(item.get_node_id()) + node_label = generate_hittest_label_with_highlight(item.item_self) + graph.node(node_name, node_label, tooltip=item.item_self.to_string()) + if parent_node_name is not None: + graph.edge(parent_node_name, node_name) + if len(item.children) > 0: + draw_hittest_result_recursively(item.children, node_name, graph) + + +def draw_hittest_result(tree: EventTree, tree_name, dot): + hittest_result = build_hittest_result_tree(tree) + draw_hittest_result_recursively(hittest_result, tree_name, dot) + + +def generate_hittest_graph(dump_result): + current_index = 0 + # draw every event tree into file + for tree in dump_result.event_trees: + # create a graph + dot = Digraph(comment='hit test result ' + str(current_index)) + tree_name = 'hit test result ' + str(tree.tree_id) + # draw event procedures + draw_hittest_result(tree, tree_name, dot) + # save to file + file_name = f'hit_test_{str(tree.tree_id)}' + out_graph_file_name = os.path.join(output_folder, file_name) + dot.render(out_graph_file_name, format='svg', cleanup=True, view=False) + current_index += 1 + log_message('hit test graph generated done, count: ' + str(current_index)) + + +def generate_all_graphs(dump_result, is_show_detail): + # delete all history files before generate new ones + reset_output_dir() + generate_event_trees_graph(dump_result, is_show_detail) + generate_hittest_graph(dump_result) diff --git a/test/tools/event_tree_to_graph/src/keywords.py b/test/tools/event_tree_to_graph/src/keywords.py index 258ed031705..85496713ec9 100644 --- a/test/tools/event_tree_to_graph/src/keywords.py +++ b/test/tools/event_tree_to_graph/src/keywords.py @@ -42,6 +42,9 @@ # procedure: HandleTouchUp, timestamp: 2017-08-25 15:00:22.295 +from typing import Dict, Any + + class KeyValueSample: key = "" value = "" @@ -136,23 +139,28 @@ event_procedure_keyword = { } -def get_dict_value(input_dict, key): - if input_dict is None or key is None or len(key) == 0: - return None - if key not in input_dict: - return None - return input_dict[key] +def get_dict_value(input_dict: Dict[str, Any], key: str) -> Any: + if not isinstance(input_dict, dict): + raise ValueError("input_dict must be a dictionary") + return input_dict.get(key) -def get_sample_key(input_dict, name): - sample = get_dict_value(input_dict, name) +def get_sample_key(input_dict: Dict[str, KeyValueSample], name: str) -> str: + sample: KeyValueSample = get_dict_value(input_dict, name) if sample is None: - return None + return '' return sample.key -def get_sample_value(input_dict, name): - sample = get_dict_value(input_dict, name) +def get_sample_value(input_dict: Dict[str, KeyValueSample], name: str) -> str: + sample: KeyValueSample = get_dict_value(input_dict, name) if sample is None: - return None + return '' return sample.value + + +def get_sample_separator_count(input_dict: Dict[str, KeyValueSample], name: str) -> int: + sample: KeyValueSample = get_dict_value(input_dict, name) + if sample is None: + return 0 + return sample.value_separator_count diff --git a/test/tools/event_tree_to_graph/src/pre_process.py b/test/tools/event_tree_to_graph/src/pre_process.py index e7321ceba52..3163d969d04 100644 --- a/test/tools/event_tree_to_graph/src/pre_process.py +++ b/test/tools/event_tree_to_graph/src/pre_process.py @@ -16,7 +16,7 @@ # limitations under the License. # -# 预处理输入文件,去除多余信息,生成一个中间文件 +# Preprocess the input file, removing extraneous information, and generate an intermediate file import os import stat @@ -25,33 +25,25 @@ from src.utils.log_wrapper import log_info def handle_file_preprocess(input_file, output_file): - # 检查输出文件路径的文件是否存在,存在则先删除 + # Check if the file at the output file path exists, and if it does, delete it first. if os.path.exists(output_file): try: os.remove(output_file) except Exception as e: - # 删除文件时发生错误 - print(f"删除文件 {output_file} 时发生错误:{e}") + print(f"delete {output_file} failed:{e}") - # 打开原始文件和目标文件 with open(input_file, 'r', encoding='utf-8') as infile: flags = os.O_WRONLY | os.O_CREAT mode = stat.S_IWUSR | stat.S_IRUSR with os.fdopen(os.open(output_file, flags, mode), 'w') as outfile: event_tree_dump_info_key = get_dict_value(keywords_dict, 'EventTreeDumpInfo') - # 遍历输入文件的每一行 for line in infile: - # 查找'EventTreeDumpInfo'的位置 + # find the EventTreeDumpInfo section position index = line.find(event_tree_dump_info_key) - # 如果找到了'EventTreeDumpInfo: ' if index != -1: new_index = index + len(event_tree_dump_info_key) - # 从'EventTreeDumpInfo'开始截取直到行末 newline = line[new_index:] - # 将处理后的行写入临时文件 outfile.write(newline) else: - # 否则直接写入临时文件 outfile.write(line) - log_info("输入文件预处理完成:" + input_file + "->" + output_file) - + log_info("preprocess done: " + input_file + "->" + output_file) diff --git a/test/tools/event_tree_to_graph/src/test/keyword_test.py b/test/tools/event_tree_to_graph/src/test/keyword_test.py index 9b29e6409a7..2b5a586fbea 100644 --- a/test/tools/event_tree_to_graph/src/test/keyword_test.py +++ b/test/tools/event_tree_to_graph/src/test/keyword_test.py @@ -18,25 +18,6 @@ from src.keywords import KeyValueSample - -# 2: event tree => -# touch points: -# id: 0, point: Offset (278.00, 551.00), screenPoint: Offset (278.00, 551.00), type: TouchDown, timestamp: 2017-08-25 15:00:22.244, isInjected: 0 -# id: 0, point: Offset (278.00, 551.00), screenPoint: Offset (278.00, 551.00), type: TouchUp, timestamp: 2017-08-25 15:00:22.295, isInjected: 0 -# hittest: -# nodeId: 0, parentId: -1, tag: root, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] -# nodeId: 1, parentId: 0, tag: stage, monopolizeEvents: 0, isHit: 1, hitTestMode: 0, responseRegion: RectT (0.00, 0.00) - [720.00 x 1280.00] -# event procedures: -# finger:0 -# frameNodeId: 84, type: TouchEventActuator, depth: 0, id: 0xf072b240, parentId: 0x0 -# stateHistory: -# procedure: HandleTouchDown, timestamp: 2017-08-25 15:00:22.247 -# procedure: HandleTouchUp, timestamp: 2017-08-25 15:00:22.295 -# finger:1 -# frameNodeId: 84, type: TouchEventActuator, depth: 0, id: 0xf072b240, parentId: 0x0 -# stateHistory: -# procedure: HandleTouchDown, timestamp: 2017-08-25 15:00:22.247 -# procedure: HandleTouchUp, timestamp: 2017-08-25 15:00:22.295 if __name__ == '__main__': KeyValueSample("touch points:") KeyValueSample("id: 0") diff --git a/test/tools/event_tree_to_graph/src/utils/log_wrapper.py b/test/tools/event_tree_to_graph/src/utils/log_wrapper.py index 0a98010c171..f736d2f6391 100644 --- a/test/tools/event_tree_to_graph/src/utils/log_wrapper.py +++ b/test/tools/event_tree_to_graph/src/utils/log_wrapper.py @@ -38,14 +38,22 @@ class LogWrapper: logWrapper = LogWrapper() +log_debug_enabled = False + + +def enable_debug(flag): + global log_debug_enabled + log_debug_enabled = flag def log_debug(msg): - logWrapper.logger.debug(msg) + if log_debug_enabled: + logWrapper.logger.debug(msg) def log_info(msg): - logWrapper.logger.info(msg) + if log_debug_enabled: + logWrapper.logger.info(msg) def log_warning(msg): @@ -58,3 +66,7 @@ def log_error(msg): def log_critical(msg): logWrapper.logger.critical(msg) + + +def log_message(msg): + logWrapper.logger.info(msg) \ No newline at end of file