update event tool

Signed-off-by: jiadexiang <jiadexiang@huawei.com>
This commit is contained in:
piggyguy 2024-07-12 23:22:38 +08:00
parent 4f84fd321a
commit 20694df8e6
20 changed files with 638 additions and 151 deletions

2
.gitignore vendored
View File

@ -15,3 +15,5 @@ lite/maplejs/
lite/tools/
lite/ui/
.clangd
__pycache__/
output/

View File

@ -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目录路径添加到环境变量中。

View File

@ -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 树状图

View File

@ -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 <cmd> <input> <output>')
print('python main.py -i input.txt')
print('\n Usage: main.py <cmd> <input>')
print(' <cmd>: TODO')
print(' <input>: input dump file')
print(' <output>: 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)

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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):

View File

@ -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):

View File

@ -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

View File

@ -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):

View File

@ -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):

View File

@ -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

View File

@ -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())

View File

@ -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

View File

@ -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 = '<{}({})<br/><font color="red">isHit: {}</font><br/>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)

View File

@ -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

View File

@ -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)

View File

@ -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")

View File

@ -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)