diff --git a/ide/src/doc/compile_trace_streamer.html b/ide/src/doc/compile_trace_streamer.html index 64eb5f5aa814dc8f6cc4851d9f3fe0a942343c26..c4f815ed6827dda36e3d08448fcb2284aa9250fb 100644 --- a/ide/src/doc/compile_trace_streamer.html +++ b/ide/src/doc/compile_trace_streamer.html @@ -809,11 +809,11 @@ git pull │ └── prebuilts/emsdk/emsdk/lib │ └── prebuilts/emsdk/emsdk/lib/clang └── prebuilts/emsdk/node - └── prebuilts/emsdk/node/14.18.2_64bit - ├── prebuilts/emsdk/node/14.18.2_64bit/bin - ├── prebuilts/emsdk/node/14.18.2_64bit/include - ├── prebuilts/emsdk/node/14.18.2_64bit/lib - └── prebuilts/emsdk/node/14.18.2_64bit/share + └── prebuilts/emsdk/node/16.20.0_64bit + ├── prebuilts/emsdk/node/16.20.0_64bit/bin + ├── prebuilts/emsdk/node/16.20.0_64bit/include + ├── prebuilts/emsdk/node/16.20.0_64bit/lib + └── prebuilts/emsdk/node/16.20.0_64bit/share
之后调用
= { pluginName: 'network-plugin', sampleInterval: 1000, @@ -1577,7 +1575,7 @@ export class SpRecordTrace extends BaseElement { if (perfConfig?.process && !perfConfig?.process.includes('ALL') && perfConfig?.process.length > 0) { let process = perfConfig.process; if (process.indexOf(',') != -1) { - let processIdOrName = process.split(','); + let processIdOrName = process.split(','); if (this.isNumber(processIdOrName[0])) { recordArgs = recordArgs + ' -p ' + perfConfig?.process; } else { @@ -1800,20 +1798,20 @@ export class SpRecordTrace extends BaseElement { if (re.test(processId)) { pid = Number(processId); } - let jsHeapConfig: JsHeapConfig = { + let arkTSConfig: ArkTSConfig = { pid: pid, type: this.spJsHeap!.radioBoxType, interval: this.spJsHeap!.intervalValue, capture_numeric_value: this.spJsHeap!.grabNumeric, track_allocations: this.spJsHeap!.grabAllocations, }; - let jsHeapPluginConfig: ProfilerPluginConfig= { - pluginName: 'js-memory', + let arkTSPluginConfig: ProfilerPluginConfig = { + pluginName: 'arkts-plugin', sampleInterval: 5000, - configData: jsHeapConfig, + configData: arkTSConfig, }; - return jsHeapPluginConfig; + return arkTSPluginConfig; } private createFpsPluginConfig() { diff --git a/ide/src/trace/component/setting/bean/ProfilerServiceTypes.ts b/ide/src/trace/component/setting/bean/ProfilerServiceTypes.ts index 49f6583673e10b782096c11b0b5131db9fce58f6..7420cfa32f3ca35e024dc21edf8661a6619dc1a6 100644 --- a/ide/src/trace/component/setting/bean/ProfilerServiceTypes.ts +++ b/ide/src/trace/component/setting/bean/ProfilerServiceTypes.ts @@ -889,7 +889,6 @@ export interface DiskioConfig { } export interface NetworkConfig { - testFile: string; } export interface HiperfPluginConfig { @@ -903,7 +902,7 @@ export interface HiSystemEventConfig { processName: string; } -export interface JsHeapConfig { +export interface ArkTSConfig { pid: number; type: number; interval: number; diff --git a/trace_streamer/dl_emsdk.sh b/trace_streamer/dl_emsdk.sh index 8ba47bab428a469c3152ac0ab41939dae3092e75..a1ebccbce5e3becfe712be25fdabca847c1916e1 100755 --- a/trace_streamer/dl_emsdk.sh +++ b/trace_streamer/dl_emsdk.sh @@ -22,7 +22,7 @@ if [ ! -d "prebuilts/emsdk" ];then fi if [ ! -d "tools/emsdk" ];then cd tools - git clone https://gitee.com/su_ze1688/emsdk.git --depth=1 + git clone https://github.com/juj/emsdk.git --depth=1 cd emsdk git pull ./emsdk install 3.1.12 diff --git a/trace_streamer/dl_tools.sh b/trace_streamer/dl_tools.sh index b6e3e7411dbc45e6f53ed01f3525617b13cdd3b6..fa97b0624f170ae2ae112a453d04b519a75928e9 100755 --- a/trace_streamer/dl_tools.sh +++ b/trace_streamer/dl_tools.sh @@ -28,7 +28,9 @@ if [ ! -f "prebuilts/$gn_path/gn" ] || [ ! -f "prebuilts/$gn_path/ninja" ];then curl https://repo.huaweicloud.com/openharmony/compiler/ninja/1.11.0/darwin/ninja-darwin-x86-1.11.0.tar.gz --output ninja.tar.gz tar -xvf ninja.tar.gz --directory=prebuilts/$gn_path/ elif [ "$gn_path" == "windows" ];then - echo "fix path blow to get gn.exe and ninja.exe for windows" - ./gettoolsforwindows.sh windows + curl https://repo.huaweicloud.com/openharmony/compiler/gn/1744/windows/gn-windows-amd64.zip --output gn.zip + unzip gn.zip -d prebuilts/$gn_path/ + curl https://repo.huaweicloud.com/openharmony/compiler/ninja/1.9.0/windows/ninja-win.zip --output ninja.zip + unzip ninja.zip -d prebuilts/$gn_path/ fi fi diff --git a/trace_streamer/doc/des_tables.md b/trace_streamer/doc/des_tables.md index 15a489c2a13aa7f10135191671b3dc4d00430b03..5880abd51104485f85065d4e3ca812846f72d825 100755 --- a/trace_streamer/doc/des_tables.md +++ b/trace_streamer/doc/des_tables.md @@ -12,8 +12,8 @@ TraceStreamer可以将trace数据源转化为易于理解和使用的数据库  ## TraceStreamer输出数据库包含以下表格 | 表名称 |作用| -| ---- |---- | -| app_name | 记录HiSysEvent事件的事件名与IDE部分事件的字段名为APPNAME中存放的相关信息的映射关系 | +| ---- |---- | +| app_name | 记录HiSysEvent事件的事件名与IDE部分事件的字段名为APPNAME中存放的相关信息的映射关系 | | args | 记录方法参数集合| | bio_latency_sample | 记录IO操作相关方法调用,及调用栈数据| | callstack | 记录调用堆栈和异步调用信息,其中depth,stack_id和parent_stack_id仅在非异步调用中有效。当cookid不为空时,为异步调用,此时callid为进程唯一号,否则为线程唯一号| @@ -28,7 +28,7 @@ TraceStreamer可以将trace数据源转化为易于理解和使用的数据库 | file_system_samp | 记录了调用栈的相关信息| | hidump | 记录FPS(Frame Per Second)数据| | hisys_event_measure | 记录了HiSysEvent事件相关数据,目前HiSysEvent事件包括了异常事件,IDE事件,器件状态事件 | -| instant | 记录Sched_waking, sched_wakeup事件, 用作ThreadState表的上下文使用 | +| instant | 记录Sched_waking, sched_wakeup事件, 用作ThreadState表的上下文使用 | | irq | 记录中断相关事件| | js_heap_edges | 记录了js内存数据类对象对应的成员的信息| | js_heap_files | 记录了js内存数据的名称和时间| @@ -45,6 +45,7 @@ TraceStreamer可以将trace数据源转化为易于理解和使用的数据库 | meta | 记录执行解析操作相关的基本信息| | native_hook | 记录堆内存申请与释放相关的数据| | native_hook_frame | 记录堆内存申请与释放相关的调用栈| +| native_hook_statistic | 记录堆内存申请与释放相关的统计信息| | network | 抓取网络信息传输时产生的一些相关信息| | paged_memory_sample | 记录内存操作相关方法调用,及调用栈数据| | perf_callchain | 记录Hiperf采样数据的调用栈信息| @@ -58,7 +59,7 @@ TraceStreamer可以将trace数据源转化为易于理解和使用的数据库 | process_measure_filter | 将进程ID作为key1,进程的内存,界面刷新,屏幕亮度等信息作为key2,唯一确定一个filter_id| | raw | 此数据结构主要作为ThreadState的上下文使用,这张表是sched_waking,sched_wakup, cpu_idle事件的原始记录| | sched_slice | 此数据结构主要作为ThreadState的上下文使用,这张表是sched_switch事件的原始记录| -| smaps | 记录进程的内存消耗的相关信息采样| +| smaps | 记录进程的内存消耗的相关信息采样| | stat | 此结果用来统计数据解析中各类数据的数据条数,数据和合法性,数据的匹配程度(begin-end),数据的损失等,查看此结构对应的表,可对数据源有基本的了解| | symbols | 记录系统调用名称和其函数指针的对应关系,trace中用addr来映射function_name来节省存储空间| | syscall | 记录用户空间函数与内核空间函数相互调用记录| @@ -89,15 +90,15 @@ TraceStreamer可以将trace数据源转化为易于理解和使用的数据库 |hisys_event_measure | - |hisysevent-plugin |JSON数据源 | |instant | - |ftrace-plugin |waking和wakeup事件 | |irq | - |ftrace-plugin |记录中断事件 | -| js_heap_edges | - |js-memory | js内存数据 | -| js_heap_files | - |js-memory | js内存数据 | -| js_heap_info | - |js-memory | js内存数据 | -| js_heap_location | - |js-memory | js内存数据 | -| js_heap_nodes | - |js-memory | js内存数据 | -| js_heap_sample | - |js-memory | js内存数据 | -| js_heap_string | - |js-memory | js内存数据 | -| js_heap_trace_function_info | - |js-memory | js内存数据 | -| js_heap_trace_node | - |js-memory | js内存数据 | +| js_heap_edges | - |arkts-plugin | js内存数据 | +| js_heap_files | - |arkts-plugin | js内存数据 | +| js_heap_info | - |arkts-plugin | js内存数据 | +| js_heap_location | - |arkts-plugin | js内存数据 | +| js_heap_nodes | - |arkts-plugin | js内存数据 | +| js_heap_sample | - |arkts-plugin | js内存数据 | +| js_heap_string | - |arkts-plugin | js内存数据 | +| js_heap_trace_function_info | - |arkts-plugin | js内存数据 | +| js_heap_trace_node | - |arkts-plugin | js内存数据 | |live_process | - |process-plugin |Monitor数据 | |network | - |network-plugin |Monitor数据 | |diskio | - |diskio-plugin |Monitor数据 | @@ -105,8 +106,9 @@ TraceStreamer可以将trace数据源转化为易于理解和使用的数据库 |measure | 通用的 | - |系统中的计量值(数值型)| |measure_filter | 通用的 | - |计量值的查询辅助表 | |meta | 通用的 | - |记录解析现场数据(解析时间,数据类型,解析工具等)| -|native_hook | - |nativehook/hookdaemon |内存数据 | -|native_hook_frame | - |nativehook/hookdaemon |内存数据 | +|native_hook | - |nativehook/hookdaemon |malloc && mmap内存数据 | +|native_hook_frame | - |nativehook/hookdaemon |native_hook调用栈数据 | +|native_hook_statistic | - |nativehook/hookdaemon |malloc && mmap统计数据 | |perf_callchain | - |perf-plugin |perf数据(非插件模式) | |perf_files | - | - |perf数据(非插件模式) | |perf_report | - | - |perf数据(非插件模式) | @@ -158,11 +160,17 @@ native_hook表字段解释如下: native_hook_frame表记录内存申请/释放的调用堆栈。通过callChainId区分一组调用堆栈,depth为堆栈深度,depth为0时,表示当前行为栈顶数据。  + +native_hook_statistic表记录内存申请/释放的统计信息。通过callChainId区分一组调用堆栈。每个统计事件将记录当前事件的callChainId,并统计当前调用栈内存分配/释放的总次数和总大小。 + + ### 查询举例 - 已知tid = 123,查看当前线程的所有堆内存变化信息,可以使用如下SQL语句: ```select native_hook.* from thread, native_hook where thread.tid = 123 and thread.id = native_hook.itid``` -- 已知callchainid = 0, 查看当前内存变化调用堆栈 -```select * from native_hook_frame where callChainId = 0``` +- 已知callchainid = 1, 查看当前内存变化调用堆栈 +```select * from native_hook_frame where callchain_id = 1``` +- 已知callchainid = 1, 查看当前内存变化调用堆栈对应的统计信息 +```select * from native_hook_statistic where callchain_id = 1``` ### 日志表与进程线程表关系图 log表记录日志信息。可以根据seq字段的连续性,来判断是否存在日志丢失的情况。 @@ -894,6 +902,32 @@ js_heap_sample:记录timeline的时间轴信息 - symbol_id:函数名 - file_id:函数所属文件 +### native_hook_statistic表 +#### 表结构 +| Columns Name | SQL TYPE | +|---- |---- | +|id |INT | +|callchain_id |INT | +|ipid |INT | +|ts |INT | +|type |INT | +|apply_count |INT | +|release_count |INT | +|apply_size |INT | +|release_size |INT | + +#### 表描述 +该表记录了内存申请/释放的统计信息。 +#### 关键字段描述 +- callchain_id:内存分配的回调链id +- ipid:进程id +- ts:统计数据上报时间 +- type:事件类型,0代表malloc事件,1代表mmap事件 +- apply_count:当前调用栈内存分配总次数 +- release_count:当前调用栈内存释放总次数 +- apply_size:当前调用栈累计分配总大小 +- release_size:当前调用栈累计释放总大小 + ### network表 #### 表结构 | Columns Name | SQL TYPE | @@ -1427,7 +1461,7 @@ js_heap_sample:记录timeline的时间轴信息 |start_ts |INT | |end_ts |INT | #### 表描述 -记录解析解析开始时间以及结束时间。 +该表记录了解析开始时间以及结束时间。 #### 关键字段描述 -- start_ts:trace的开始时间,纳秒为单位 +- start_ts:trace的开始时间,纳秒为单位 - end_ts:trace的结束时间,纳秒为单位 \ No newline at end of file diff --git a/trace_streamer/doc/js_memory.md b/trace_streamer/doc/js_memory.md index 1580d43767015e7bc56c26a3963b9b17f7d54228..1cfb5528f9906008cd6c219482b78d10b6c5eb28 100644 --- a/trace_streamer/doc/js_memory.md +++ b/trace_streamer/doc/js_memory.md @@ -38,7 +38,7 @@ JS内存数据解析对应两个proto文件 --- -js memory的数据包含在htrace文件中,由proto文件定义数据格式,解析规则如下: +arkts-plugin的数据包含在htrace文件中,由proto文件定义数据格式,解析规则如下: 1.js-memory相关数据携带js-memory_config和js-memory插件头,先通过接口ParseJSMemoryConfig获取对应的type和pid,其中type=0为snapshot类型数据,type=1为timeline数据。js-memory数据为json格式,json包含以下节点:snapshot,nodes,edges,locations,strings,samples,trace_function_infos,trace_tree。使用第三方json库nlohmann::json进行解析。 diff --git a/trace_streamer/figures/db_native_hook_statistic.png b/trace_streamer/figures/db_native_hook_statistic.png new file mode 100644 index 0000000000000000000000000000000000000000..b20e4439633a00e2a75367ae384ae7773b602f4e Binary files /dev/null and b/trace_streamer/figures/db_native_hook_statistic.png differ diff --git a/trace_streamer/figures/db_native_memory.png b/trace_streamer/figures/db_native_memory.png old mode 100755 new mode 100644 index 0e1403e958fbf76f3d2c31fc6304426de6579afb..7cb32fd4250fcda94ad9aa86157d02628e776e28 Binary files a/trace_streamer/figures/db_native_memory.png and b/trace_streamer/figures/db_native_memory.png differ diff --git a/trace_streamer/figures/dump_and_mem.png b/trace_streamer/figures/dump_and_mem.png old mode 100755 new mode 100644 index 2c3f59eef7476de91cafb8f59832c93fe4117e51..ab9d01a8107c957e53cce9b66ff5a1d8e200064c Binary files a/trace_streamer/figures/dump_and_mem.png and b/trace_streamer/figures/dump_and_mem.png differ diff --git a/trace_streamer/gettoolsforwindows.sh b/trace_streamer/gettoolsforwindows.sh deleted file mode 100755 index c6586a651c6faa3e3b0bef4e03cfe6d8f0d86290..0000000000000000000000000000000000000000 --- a/trace_streamer/gettoolsforwindows.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -# Copyright (C) 2021 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. -set -e -gn_path="$1" -if [ ! -d "tools" ];then - mkdir tools -fi -cd tools -git clone git@gitee.com:su_ze1688/public_tools.git -cd .. -mv tools/public_tools/gn/$gn_path/gn prebuilts/$gn_path -mv tools/public_tools/gn/$gn_path/ninja prebuilts/$gn_path/ninja -rm -rf tools \ No newline at end of file diff --git a/trace_streamer/gn/.emscripten b/trace_streamer/gn/.emscripten index 0ed7e1dd1a0e50b80ac895e5911c4b1adc2b8da6..97e12ef16abdaf931b2083af45e4563dd1b77f90 100644 --- a/trace_streamer/gn/.emscripten +++ b/trace_streamer/gn/.emscripten @@ -22,7 +22,7 @@ if thisFile is None: rootDir = os.path.dirname(os.path.dirname(thisFile)) emsdkPath = os.path.join(rootDir, 'prebuilts/emsdk/emsdk') -nodePath = os.path.join(rootDir, 'prebuilts/emsdk/node/14.18.2_64bit') +nodePath = os.path.join(rootDir, 'prebuilts/emsdk/node/16.20.0_64bit') LLVM_ROOT = os.path.join(emsdkPath, 'bin') NODE_JS = os.path.join(nodePath, 'bin/node') diff --git a/trace_streamer/gn/BUILD.gn b/trace_streamer/gn/BUILD.gn index 3f6ecd540853e3702a809a8f88ad1b080585eeeb..006acf33146a8f51d2290bb4a10b4f01e9951191 100755 --- a/trace_streamer/gn/BUILD.gn +++ b/trace_streamer/gn/BUILD.gn @@ -64,6 +64,7 @@ config("default") { } if (target_os == "windows") { cflags += [ "-D target_cpu_x86_64" ] + libs += [ "z" ] } else if (is_linux || is_macx) { cflags += [ "-Wa,--noexecstack", @@ -88,6 +89,7 @@ config("default") { "-DHAVE_CONFIG_H", "-DCC_IS_CLANG", ] + libs += [ "z" ] # with_libunwind = true } if (!use_wasm && !is_win && !is_macx && !is_test) { @@ -221,4 +223,5 @@ config("executable") { } else if (!is_debug && is_macx) { ldflags += [ "-dead_strip" ] } + ldflags += [ "-Wl,--gc-sections" ] } diff --git a/trace_streamer/gn/wasm.gni b/trace_streamer/gn/wasm.gni index b4c986495cbb7afe176ebaa0972e22e932b6fa75..e63cbe46ea40be54c76c8d27703c2e75cc4cb779 100644 --- a/trace_streamer/gn/wasm.gni +++ b/trace_streamer/gn/wasm.gni @@ -46,6 +46,8 @@ template("wasm_lib") { "EXPORT_NAME=${target_name}", "-s", "MODULARIZE=1", + "-s", + "USE_ZLIB=1", "-lworkerfs.js", # For FS.filesystems.WORKERFS ] _lib_name = invoker.name diff --git a/trace_streamer/pare_third_party.sh b/trace_streamer/pare_third_party.sh index 0639f4a53abc98f8bb6a03fa5c18bce838c59802..830e8fe7a438d52a575be07ee2d8816f5f68839c 100755 --- a/trace_streamer/pare_third_party.sh +++ b/trace_streamer/pare_third_party.sh @@ -113,12 +113,7 @@ if [ ! -f "hiperf/BUILD.gn" ];then $cp ../prebuilts/patch_hiperf/file_ex.h hiperf/include/nonlinux/linux $cp ../prebuilts/patch_hiperf/unique_fd.h hiperf/include/nonlinux/linux $sed -i "/using __s8 = char;/a #define unw_word_t uint64_t" hiperf/include/nonlinux/linux/types.h - $sed -i "/#include /s/^\(.*\)$/\/\/\1/g" hiperf/src/utilities.cpp - $sed -i '/^bool CompressFile(/,/^}/ s/^.*$/\/\/&/; /^bool CompressFile(/,/return true;/ s/^[[:blank:]]*/ /' hiperf/src/utilities.cpp - $sed -i '/^bool UncompressFile(/,/^}/ s/^.*$/\/\/&/; /^bool UncompressFile(/,/return true;/ s/^[[:blank:]]*/ /' hiperf/src/utilities.cpp $sed -i '/^void Report::PrepareConsole(/,/^}/ s/^.*$/\/\/&/; /^void Report::PrepareConsole(/,/return;/ s/^[[:blank:]]*/ /' hiperf/src/report.cpp - $sed -i '/namespace HiPerf {/abool UncompressFile(const std::string &gzipFile, const std::string &dataFile){return true;}' hiperf/src/utilities.cpp - $sed -i '/namespace HiPerf {/abool CompressFile(const std::string &dataFile, const std::string &destFile){return true;}' hiperf/src/utilities.cpp $sed -i '/namespace HiPerf {/avoid Report::PrepareConsole(){ return;}' hiperf/src/report.cpp fi fi diff --git a/trace_streamer/prebuilts/patch_hiperf/BUILD.gn b/trace_streamer/prebuilts/patch_hiperf/BUILD.gn index c885ec156aaab9fff02d5af7af58df75fc3d637c..f2869ab4972507ae8ec6fce980b5d78dc8152038 100644 --- a/trace_streamer/prebuilts/patch_hiperf/BUILD.gn +++ b/trace_streamer/prebuilts/patch_hiperf/BUILD.gn @@ -32,6 +32,7 @@ ohos_source_set("elf") { "include/nonlinux/linux", "include/nonlinux", "${THIRD_PARTY}/perf_include/musl", + "${SRC}/../prebuilts/emsdk/node/16.20.0_64bit/include/node", ] } ohos_source_set("hiperf_src") { @@ -88,7 +89,4 @@ group("hiperf") { "${THIRD_PARTY}/protobuf:protobuf", "${THIRD_PARTY}/protobuf:protobuf_lite", ] - if (target != "test" && !is_openharmony) { - deps += [ "//prebuilts/protos:ts_proto_data_cpp" ] - } } diff --git a/trace_streamer/sdk/demo_sdk/BUILD.gn b/trace_streamer/sdk/demo_sdk/BUILD.gn index 3f8527bbdbdb39a36a0f395e7856a1df8b0615e7..653b6e0014cceeb05be517081f0cdb8b1b2d6999 100755 --- a/trace_streamer/sdk/demo_sdk/BUILD.gn +++ b/trace_streamer/sdk/demo_sdk/BUILD.gn @@ -114,8 +114,7 @@ ohos_source_set("trace_streamer_sdk") { "${OHOS_PROTO_GEN}", "${OHOS_PROTO_GEN}/types/plugins/mock_data", "${THIRD_PARTY}/protobuf/src", - "${THIRD_PARTY}/json-master/include", - "${THIRD_PARTY}/json-master/include/nlohmann", + "${THIRD_PARTY}/json-master/single_include/nlohmann", ] if (!use_wasm) { include_dirs += [ diff --git a/trace_streamer/sdk/demo_sdk/doc/wasm.md b/trace_streamer/sdk/demo_sdk/doc/wasm.md index 0c2876b9e1816899915b5c07234cf56743c6045e..2872ace529e1131ec632602d61626555d112ea32 100644 --- a/trace_streamer/sdk/demo_sdk/doc/wasm.md +++ b/trace_streamer/sdk/demo_sdk/doc/wasm.md @@ -31,11 +31,11 @@ prebuilts/emsdk │ └── prebuilts/emsdk/emsdk/lib │ └── prebuilts/emsdk/emsdk/lib/clang └── prebuilts/emsdk/node - └── prebuilts/emsdk/node/14.18.2_64bit - ├── prebuilts/emsdk/node/14.18.2_64bit/bin - ├── prebuilts/emsdk/node/14.18.2_64bit/include - ├── prebuilts/emsdk/node/14.18.2_64bit/lib - └── prebuilts/emsdk/node/14.18.2_64bit/share + └── prebuilts/emsdk/node/16.20.0_64bit + ├── prebuilts/emsdk/node/16.20.0_64bit/bin + ├── prebuilts/emsdk/node/16.20.0_64bit/include + ├── prebuilts/emsdk/node/16.20.0_64bit/lib + └── prebuilts/emsdk/node/16.20.0_64bit/share ``` 之后调用 ``` diff --git a/trace_streamer/sdk/demo_sdk/test/BUILD.gn b/trace_streamer/sdk/demo_sdk/test/BUILD.gn index f15fdc2848f5844a3a8b3153c177a555652834f5..34d13eac2419b2b13db1f4a3ff9b0960db337948 100755 --- a/trace_streamer/sdk/demo_sdk/test/BUILD.gn +++ b/trace_streamer/sdk/demo_sdk/test/BUILD.gn @@ -47,8 +47,7 @@ if (target == "sdkdemotest") { "${OHOS_PROTO_GEN}/types/plugins/mock_data", "${THIRD_PARTY}/googletest/googletest/include/gtest", "${THIRD_PARTY}/protobuf/src", - "${THIRD_PARTY}/json-master/include", - "${THIRD_PARTY}/json-master/include/nlohmann", + "${THIRD_PARTY}/json-master/single_include/nlohmann", ] cflags = [ "-Wno-inconsistent-missing-override", diff --git a/trace_streamer/sdk/dubai_sdk/BUILD.gn b/trace_streamer/sdk/dubai_sdk/BUILD.gn index fbd88129e4a64629bf44f60aa554ec5796ba7e91..8f7a0212ea43f0cf2a49e828ea4da9705d4571e1 100755 --- a/trace_streamer/sdk/dubai_sdk/BUILD.gn +++ b/trace_streamer/sdk/dubai_sdk/BUILD.gn @@ -112,8 +112,7 @@ source_set("trace_streamer_sdk") { "${OHOS_PROTO_GEN}", "${OHOS_PROTO_GEN}/types/plugins/mock_data", "${THIRD_PARTY}/protobuf/src", - "${THIRD_PARTY}/json-master/include", - "${THIRD_PARTY}/json-master/include/nlohmann", + "${THIRD_PARTY}/json-master/single_include/nlohmann", ] if (!use_wasm) { include_dirs += [ diff --git a/trace_streamer/sdk/dubai_sdk/doc/wasm.md b/trace_streamer/sdk/dubai_sdk/doc/wasm.md index 0c2876b9e1816899915b5c07234cf56743c6045e..2872ace529e1131ec632602d61626555d112ea32 100755 --- a/trace_streamer/sdk/dubai_sdk/doc/wasm.md +++ b/trace_streamer/sdk/dubai_sdk/doc/wasm.md @@ -31,11 +31,11 @@ prebuilts/emsdk │ └── prebuilts/emsdk/emsdk/lib │ └── prebuilts/emsdk/emsdk/lib/clang └── prebuilts/emsdk/node - └── prebuilts/emsdk/node/14.18.2_64bit - ├── prebuilts/emsdk/node/14.18.2_64bit/bin - ├── prebuilts/emsdk/node/14.18.2_64bit/include - ├── prebuilts/emsdk/node/14.18.2_64bit/lib - └── prebuilts/emsdk/node/14.18.2_64bit/share + └── prebuilts/emsdk/node/16.20.0_64bit + ├── prebuilts/emsdk/node/16.20.0_64bit/bin + ├── prebuilts/emsdk/node/16.20.0_64bit/include + ├── prebuilts/emsdk/node/16.20.0_64bit/lib + └── prebuilts/emsdk/node/16.20.0_64bit/share ``` 之后调用 ``` diff --git a/trace_streamer/sdk/dubai_sdk/test/BUILD.gn b/trace_streamer/sdk/dubai_sdk/test/BUILD.gn index f61d43e247e768ba1ef1a3327be7549a8f2c1123..573eea5b62be5a9f6a6c0be8174f01096426a783 100755 --- a/trace_streamer/sdk/dubai_sdk/test/BUILD.gn +++ b/trace_streamer/sdk/dubai_sdk/test/BUILD.gn @@ -47,8 +47,7 @@ if (target == "sdkdemotest") { "${OHOS_PROTO_GEN}/types/plugins/mock_data", "${THIRD_PARTY}/googletest/googletest/include/gtest", "${THIRD_PARTY}/protobuf/src", - "${THIRD_PARTY}/json-master/include", - "${THIRD_PARTY}/json-master/include/nlohmann", + "${THIRD_PARTY}/json-master/single_include/nlohmann", ] cflags = [ "-Wno-inconsistent-missing-override", diff --git a/trace_streamer/src/BUILD.gn b/trace_streamer/src/BUILD.gn index d1862d800db6d3cda6d6ee9bad5dfe5ab942bea8..bcf90934e8d1853f47387cc0c153e0a0943072c9 100644 --- a/trace_streamer/src/BUILD.gn +++ b/trace_streamer/src/BUILD.gn @@ -48,8 +48,7 @@ ohos_source_set("lib") { "cfg", "proto_reader/include", "${THIRD_PARTY}/sqlite/include", - "${THIRD_PARTY}/json-master/include", - "${THIRD_PARTY}/json-master/include/nlohmann", + "${THIRD_PARTY}/json-master/single_include/nlohmann", "${OHOS_PROTO_GEN}/types/plugins/memory_data", "${OHOS_PROTO_GEN}/types/plugins/ftrace_data/${kernel_version}", "${OHOS_PROTO_GEN}/types/plugins/hilog_data", @@ -147,8 +146,7 @@ ohos_source_set("trace_streamer_source") { include_dirs += [ "${THIRD_PARTY}/libunwind/include", "${THIRD_PARTY}/libunwind/src", - "${THIRD_PARTY}/json-master/include", - "${THIRD_PARTY}/json-master/include/nlohmann", + "${THIRD_PARTY}/json-master/single_include/nlohmann", "${THIRD_PARTY}/hiperf/include", "${THIRD_PARTY}/hiperf/include/nonlinux/linux", "${THIRD_PARTY}/hiperf/include/nonlinux", diff --git a/trace_streamer/src/base/ts_common.h b/trace_streamer/src/base/ts_common.h index 85a6a1b96d8bbafee53e80676e320df961bf44a4..3c6705b02599488cf4c86321fe2002bc35de73c0 100644 --- a/trace_streamer/src/base/ts_common.h +++ b/trace_streamer/src/base/ts_common.h @@ -59,7 +59,13 @@ enum RefType { K_REF_MAX }; -enum TraceFileType { TRACE_FILETYPE_BY_TRACE, TRACE_FILETYPE_H_TRACE, TRACE_FILETYPE_SYSEVENT, TRACE_FILETYPE_UN_KNOW }; +enum TraceFileType { + TRACE_FILETYPE_BY_TRACE, + TRACE_FILETYPE_H_TRACE, + TRACE_FILETYPE_SYSEVENT, + TRACE_FILETYPE_PERF, + TRACE_FILETYPE_UN_KNOW +}; enum EndState { // (R) ready state or running state, the process is ready to run, but not necessarily occupying the CPU diff --git a/trace_streamer/src/filter/BUILD.gn b/trace_streamer/src/filter/BUILD.gn index 2073a827f094df9fde8fb881434f01abd8fa2a48..39830ce17baca481d52265b536a3b02eb2ba262b 100644 --- a/trace_streamer/src/filter/BUILD.gn +++ b/trace_streamer/src/filter/BUILD.gn @@ -36,6 +36,10 @@ ohos_source_set("filter") { "irq_filter.h", "measure_filter.cpp", "measure_filter.h", + "native_hook_filter.cpp", + "native_hook_filter.h", + "offline_symbolization_filter.cpp", + "offline_symbolization_filter.h", "process_filter.cpp", "process_filter.h", "slice_filter.cpp", @@ -46,10 +50,6 @@ ohos_source_set("filter") { "symbols_filter.h", "system_event_measure_filter.cpp", "system_event_measure_filter.h", - "native_hook_filter.cpp", - "native_hook_filter.h", - "offline_symbolization_filter.cpp", - "offline_symbolization_filter.h", ] if (enable_ts_utest && !use_wasm) { diff --git a/trace_streamer/src/filter/cpu_filter.cpp b/trace_streamer/src/filter/cpu_filter.cpp index fce9980181da5b104df3509e6202f27caed38b0a..dfb354ddad992e6bce54f46f3a85f650eaf3aa7b 100644 --- a/trace_streamer/src/filter/cpu_filter.cpp +++ b/trace_streamer/src/filter/cpu_filter.cpp @@ -44,7 +44,6 @@ void CpuFilter::InsertSwitchEvent(uint64_t ts, auto lastRow = RowOfInternalTidInStateTable(nextPid); if (lastRow != INVALID_UINT64) { // check if there are wakeup or waking events before - lastRow = RowOfInternalTidInStateTable(nextPid); traceDataCache_->GetThreadStateData()->UpdateDuration(static_cast (lastRow), ts); } auto index = @@ -75,7 +74,6 @@ void CpuFilter::InsertSwitchEvent(uint64_t ts, auto lastRow = RowOfInternalTidInStateTable(prevPid); if (lastRow != INVALID_UINT64) { CheckWakeupEvent(prevPid); - lastRow = RowOfInternalTidInStateTable(prevPid); traceDataCache_->GetThreadStateData()->UpdateDuration(static_cast (lastRow), ts); streamFilters_->processFilter_->AddCpuStateCount(prevPid); auto thread = traceDataCache_->GetThreadData(prevPid); diff --git a/trace_streamer/src/filter/native_hook_filter.cpp b/trace_streamer/src/filter/native_hook_filter.cpp index e9fec504c262f15418f3259ba825c71e1b858b34..4b745af8db437675dac8630569b86f2ede5656d3 100644 --- a/trace_streamer/src/filter/native_hook_filter.cpp +++ b/trace_streamer/src/filter/native_hook_filter.cpp @@ -929,6 +929,8 @@ bool NativeHookFilter::NativeHookReloadElfSymbolTable( } } } + filePathIdAndStValueToSymAddr_.Clear(); + filePathIdToImportSymbolTableMap_.clear(); return true; } } // namespace TraceStreamer diff --git a/trace_streamer/src/main.cpp b/trace_streamer/src/main.cpp index 24455e693023d7b59dd42f3a2e00d165e12d7921..18204e7f1d3d4b58a0137e96f0b3077f40c73857 100644 --- a/trace_streamer/src/main.cpp +++ b/trace_streamer/src/main.cpp @@ -75,7 +75,7 @@ void ShowHelpInfo(const char* argv) " -e transfer a bytrace file into a SQLiteBased DB. with -nm to except meta table\n" " -c command line mode.\n" " -h start HTTP server.\n" - " -s separate js memory data, and save it in current dir with default filename.\n" + " -s separate arkts-plugin data, and save it in current dir with default filename.\n" " -p Specify the port of HTTP server, default is 9001.\n" " -i show information.\n" " -v show version.", diff --git a/trace_streamer/src/parser/BUILD.gn b/trace_streamer/src/parser/BUILD.gn index ff6a449226fe11187c1a287806d20f54a407fda5..13032d7e743485b269b7aeef25bfdf3f42de056a 100644 --- a/trace_streamer/src/parser/BUILD.gn +++ b/trace_streamer/src/parser/BUILD.gn @@ -57,14 +57,12 @@ ohos_source_set("parser") { "${SRC}/filter", "${SRC}", ".", - "${THIRD_PARTY}/json-master/include", - "${THIRD_PARTY}/json-master/include/nlohmann", + "${THIRD_PARTY}/json-master/single_include/nlohmann", ] include_dirs += [ "htrace_pbreader_parser" ] include_dirs += [ "../proto_reader/include" ] - if (enable_ts_utest && !use_wasm) { cflags = [ "-fprofile-arcs", diff --git a/trace_streamer/src/parser/bytrace_parser/bytrace_parser.cpp b/trace_streamer/src/parser/bytrace_parser/bytrace_parser.cpp index 093d0022e35fe9afa7750b3cc7acc739465c3e5d..2178adc72cbb524576bbeff27cfbf1dec768e28d 100644 --- a/trace_streamer/src/parser/bytrace_parser/bytrace_parser.cpp +++ b/trace_streamer/src/parser/bytrace_parser/bytrace_parser.cpp @@ -72,6 +72,30 @@ void BytraceParser::ParseTraceDataSegment(std::unique_ptr bufferStr, auto extra = *(packagesLine - 1) == '\r' ? 1 : 0; std::string bufferLine(packagesBegin, packagesLine - extra); + if (isFirstLine) { + isFirstLine = false; + if (IsHtmlTrace(bufferLine)) { + isHtmlTrace_ = true; + goto NEXT_LINE; + } + } + if (isHtmlTrace_) { + if (!isHtmlTraceContent_) { + if (IsHtmlTraceBegin(bufferLine)) { + isHtmlTraceContent_ = true; + } + goto NEXT_LINE; + } + auto pos = bufferLine.find(script_.c_str()); + if (pos != std::string::npos) { + isHtmlTraceContent_ = false; + bufferLine = bufferLine.substr(0, pos); + if (std::all_of(bufferLine.begin(), bufferLine.end(), isspace)) { + goto NEXT_LINE; + } + } + } + if (IsTraceComment(bufferLine)) { traceCommentLines_++; goto NEXT_LINE; @@ -81,10 +105,6 @@ void BytraceParser::ParseTraceDataSegment(std::unique_ptr bufferStr, goto NEXT_LINE; } - if (bufferLine.find(script_.c_str()) != std::string::npos) { - isParsingOver_ = true; - break; - } if (isBytrace_) { if (!traceBegan_) { traceBegan_ = true; diff --git a/trace_streamer/src/parser/bytrace_parser/bytrace_parser.h b/trace_streamer/src/parser/bytrace_parser/bytrace_parser.h index 9baa0f75ea063c3dc133d56376957bc4488305b1..375b675b1fd00e43019a85b6d3d5218955024153 100644 --- a/trace_streamer/src/parser/bytrace_parser/bytrace_parser.h +++ b/trace_streamer/src/parser/bytrace_parser/bytrace_parser.h @@ -70,6 +70,17 @@ private: { return ((buffer[0] == '#') || buffer.find("TASK-PID") != std::string::npos); } + inline static bool IsHtmlTrace(const std::string& buffer) + { + std::string lower(buffer); + transform(buffer.begin(), buffer.end(), lower.begin(), ::tolower); + return ((lower.compare(0, std::string("").length(), "") == 0) || + (lower.compare(0, std::string("").length(), "") == 0)); + } + inline static bool IsHtmlTraceBegin(const std::string& buffer) + { + return buffer.find(R"(