From a0c7e8e6a78ceb22f0f563454507547709ccf54a Mon Sep 17 00:00:00 2001 From: zhang-zepeng1 Date: Wed, 24 Apr 2024 18:19:29 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E2=80=98codecheck=E6=B8=85=E7=90=86?= =?UTF-8?q?=E2=80=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang-zepeng1 --- ide/server/smarperfServer.py | 281 -------------- ide/src/base-ui/tabs/lit-tabs.ts | 1 - ide/src/base-ui/tree/LitTree.ts | 4 +- ide/src/doc/quickstart_trace_streamer.html | 2 +- ide/src/hdc/HdcDeviceManager.ts | 1 + ide/src/trace/bean/BoxSelection.ts | 13 +- ide/src/trace/component/SpSystemTrace.init.ts | 4 +- .../trace/component/setting/SpWebHdcShell.ts | 7 +- .../component/trace/TimerShaftElement.ts | 4 +- .../trace/component/trace/base/RangeSelect.ts | 1 + .../trace/component/trace/base/TraceRow.ts | 7 +- .../component/trace/base/TraceRowConfig.ts | 2 +- .../trace/sheet/TabPaneCurrentSelection.ts | 2 + .../bpftrace/TabPaneSampleInstruction.ts | 19 +- .../TabPaneSampleInstructionDistributions.ts | 12 +- .../TabPaneSampleInstructionSelection.ts | 28 +- .../file-system/TabPaneIOTierStatistics.ts | 2 +- .../sheet/native-memory/TabPaneNMCallTree.ts | 1 - .../trace/sheet/sdk/TabPaneSdkSlice.ts | 2 + .../component/trace/timer-shaft/SportRuler.ts | 4 +- .../ProcedureLogicWorkerCommon.ts | 44 ++- .../ProcedureLogicWorkerFileSystem.ts | 11 +- .../ProcedureLogicWorkerNativeNemory.ts | 8 +- .../logic-worker/ProcedureLogicWorkerPerf.ts | 37 +- ide/webpack.config.js | 1 - trace_streamer/build/protoc_w.py | 12 +- trace_streamer/sdk/demo_sdk/version.cpp | 4 + trace_streamer/sdk/demo_sdk/version.h | 4 + trace_streamer/src/base/codec_cov.cpp | 34 +- .../src/base/sqlite_ext/sqlite_ext_funcs.cpp | 10 +- trace_streamer/src/base/ts_common.h | 2 + .../hi_sysevent_measure_filter.cpp | 10 +- .../filter/hook_filter/native_hook_filter.cpp | 37 +- trace_streamer/src/filter/slice_filter.cpp | 1 - trace_streamer/src/metrics/metrics.cpp | 72 ++-- trace_streamer/src/metrics/metrics.h | 5 +- .../ebpf_parser/bio_latency_data_parser.cpp | 4 +- .../src/parser/ebpf_parser/ebpf_base.cpp | 5 +- .../parser/ebpf_parser/ebpf_data_reader.cpp | 4 +- .../src/parser/ebpf_parser/ebpf_data_reader.h | 4 +- .../ebpf_parser/file_system_data_parser.cpp | 6 +- .../ebpf_parser/paged_memory_data_parser.cpp | 6 +- .../pbreader_disk_io_parser.cpp | 1 - .../ffrt_parser/pbreader_ffrt_parser.h | 3 +- .../rawtrace_parser/ftrace_processor.cpp | 4 +- trace_streamer/src/rpc/ffrt_converter.cpp | 350 ++++++++---------- trace_streamer/src/rpc/ffrt_converter.h | 77 ++-- trace_streamer/src/rpc/rpc_server.cpp | 36 +- .../src/table/ftrace/process_table.cpp | 13 +- .../trace_data/sqllite_prepar_cache_data.h | 2 +- .../src/trace_data/trace_data_db.cpp | 4 +- .../trace_stdtype/common_stdtype.cpp | 2 +- .../trace_data/trace_stdtype/common_stdtype.h | 4 +- .../trace_stdtype/hiperf/hiperf_stdtype.cpp | 19 +- .../trace_stdtype/hiperf/hiperf_stdtype.h | 19 +- .../hisysevent/hisysevent_stdtype.cpp | 87 ++--- .../hisysevent/hisysevent_stdtype.h | 67 ++-- .../trace_stdtype/htrace/ebpf_stdtype.cpp | 141 +++---- .../trace_stdtype/htrace/ebpf_stdtype.h | 113 +++--- .../htrace/native_memory_stdtype.cpp | 90 ++--- .../htrace/native_memory_stdtype.h | 67 ++-- .../pbreader_mem_parser_test.cpp | 16 +- .../ptreader_parser/event_parser_test.cpp | 12 +- .../test/unittest/table/table_test.cpp | 61 ++- 64 files changed, 774 insertions(+), 1132 deletions(-) delete mode 100644 ide/server/smarperfServer.py diff --git a/ide/server/smarperfServer.py b/ide/server/smarperfServer.py deleted file mode 100644 index a89d63ad4..000000000 --- a/ide/server/smarperfServer.py +++ /dev/null @@ -1,281 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# Copyright (C) 2023 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. - -import http -import json -from datetime import datetime -from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer -import ssl -import os -from urllib.parse import urlparse -import urllib.request -import subprocess -import re -import platform -import webbrowser - -PORT = 9000 -CERT_FILE = './cert/certFile.pem' -KEY_FILE = './cert/keyFile.key' -version = 'v1.0.0' -server_info = '' - - -def is_windows(): - return platform.system() == 'Windows' - - -def is_darwin(): - return platform.system() == 'Darwin' - - -def is_linux(): - return platform.system() == 'Linux' - - -def open_web(url): - webbrowser.open(url) - - -def get_pid_by_port(port_number): - res_pid = -1 - cmd_res = subprocess.run(f"netstat -ano -p tcp | findstr {port_number}", capture_output=True, text=True, - shell=True) - cmd_res_str = cmd_res.stdout - find_str = re.findall(r'\s(\d+)\s', cmd_res_str) - if len(find_str) > 0: - try: - res_pid = int(find_str[0]) - except ValueError: - res_pid = -1 - return res_pid - - -def check_port(port): - if is_windows(): - pid = get_pid_by_port(port) - if pid != -1: - subprocess.run(f"taskkill /F /PID {pid} /T", shell=True) - - -class SpRequestHandler(http.server.BaseHTTPRequestHandler): - global version - global server_info - - def do_get(self): - parse_result = urlparse(self.path) - if parse_result.path == '/application/serverInfo': - self.server_info_handler() - elif parse_result.path.startswith('/application'): - self.application_handler(parse_result) - else: - self.send_error(404, 'Not found') - - def do_post(self): - parse_result = urlparse(self.path) - if parse_result.path.startswith('/logger'): - self.console_handler() - elif parse_result.path.startswith('/upload'): - print(f'upload') - - elif parse_result.path.startswith('/download-file'): - print(f'download-file') - self.download_handler() - - def download_handler(self): - self.clear_overdue_file() - content_type = self.headers.get("Content-Type") - if content_type and content_type.startswith("application/x-www-form-urlencoded"): - url = self.post_form_value("url") - try: - req = urllib.request.Request(url) - response = urllib.request.urlopen(req) - content = response.read().decode("utf-8") - except Exception as e: - self.send_response(200) - response = {"success": False, "code": -1, "message": str(e), "data": None} - self.wfile.write(bytes(json.dumps(response), "utf-8")) - return - suffix_str = os.path.splitext(url.split("/")[-1])[1] - file_name = f"upload/{datetime.now().strftime('%Y%m%d%H%M%S%f')}{suffix_str}" - os.makedirs(os.path.dirname(file_name), exist_ok=True) - try: - with open(file_name, "wb") as f: - f.write(content) - written = f.tell() - except Exception as e: - self.send_response(200) - response = {"success": False, "code": -1, "message": str(e), "data": None} - self.wfile.write(bytes(json.dumps(response), "utf-8")) - return - self.send_response(200) - response = {"success": True, "code": 0, "message": "success", "data": {"url": file_name, "size": written}} - self.wfile.write(bytes(json.dumps(response), "utf-8")) - return - - def post_form_value(self, key): - content_length = int(self.headers.get("Content-Length", 0)) - post_data = self.rfile.read(content_length).decode("utf-8") - for param in post_data.split("&"): - param_key, param_value = param.split("=") - if param_key == key: - return param_value - return "" - - def clear_overdue_file(self): - path = "./upload/" - upload_dir = os.path.dirname(os.path.normpath(path)) - if not os.path.exists(upload_dir): - os.makedirs(upload_dir) - now = datetime.now() - for root, dirs, files in os.walk(path): - for file_name in files: - file_path = os.path.join(root, file_name) - if self.check_due(file_name): - print(f"{now} delete -> {file_path}") - os.remove(file_path) - - def check_due(self, file_name): - now = datetime.now() - datetime_str = os.path.splitext(os.path.basename(file_name))[0] - file_date = datetime.strptime(datetime_str, "%Y%m%d%H%M%S%f") - return (now - file_date).total_seconds() > 3600 - - def console_handler(self): - self.check_dir('./logger') - now_date = datetime.now() - now = now_date.strftime("%Y-%m-%d") - fileName = f"{now}.txt" - with open(os.path.join("logger", fileName), "a") as dst: - content_type = self.headers.get("Content-Type") - if content_type and content_type.startswith("application/json"): - content_length = int(self.headers.get("Content-Length", 0)) - req_data = self.rfile.read(content_length) - req = json.loads(req_data) - now = datetime.now() - formatted_date = now.strftime("%Y-%m-%d %H:%M:%S") - dst.write(f"{formatted_date} {req['fileName']} ({req['fileSize']} M)\n") - self.send_response(200) - self.send_header("Content-type", "text/html") - self.end_headers() - self.wfile.write(bytes(f"日志写入成功", "utf-8")) - - def check_dir(self, dir_path): - if not os.path.exists(dir_path): - os.makedirs(dir_path) - - def application_handler(self, parse_result): - file_path = parse_result.path[12:] - file_extension = os.path.splitext(file_path)[1] - if file_path == '/' or file_path == '': - file_path = './index.html' - file_extension = '.html' - else: - file_path = '.' + file_path - try: - with open(file_path, 'rb') as file: - content = file.read() - self.send_response(200) - self.send_header('Content-type', get_content_type(file_extension)) - self.send_header("Cross-Origin-Opener-Policy", "same-origin") - self.send_header("Cross-Origin-Embedder-Policy", "require-corp") - self.send_header("Access-Control-Allow-Origin", "*") - self.send_header("Access-Control-Allow-Credentials", "true") - self.send_header("Access-Control-Allow-Headers", "x-requested-with, authorization, blade-auth") - self.send_header("Access-Control-Allow-Methods", "*") - self.send_header("Access-Control-Max-Age", "3600") - self.send_header("data-version", version) - self.end_headers() - self.wfile.write(content) - except FileNotFoundError: - self.send_error(404, 'File not found') - - def server_info_handler(self): - self.send_response(200) - self.send_header("Access-Control-Allow-Origin", "*") - self.send_header("request_info", server_info) - self.end_headers() - - -def read_text(read_file_path): - try: - with open(read_file_path, 'r') as file: - content = file.read() - return content - except IOError: - return None - - -def get_content_type(file_extension): - if file_extension == '.js': - return 'application/javascript' - if file_extension == '.wasm': - return 'application/wasm' - if file_extension == '.json': - return 'application/json' - if file_extension == '.html': - return 'text/html' - if file_extension == '.svg': - return 'image/svg+xml' - return 'text/plain' - - -def gen_ssl(cert_file, key_file): - serial_number = 123456789 - organization = "www.smartperf.com" - organizational_unit = "ITs" - common_name = "www.smartperf.com" - validity_days = 3650 - subprocess.run(["openssl", "genpkey", "-algorithm", "RSA", "-out", key_file]) - csr_file = "cert/cert.csr" - subprocess.run(["openssl", "req", "-new", "-key", key_file, "-out", csr_file, "-subj", - "/O={}/OU={}/CN={}".format(organization, organizational_unit, common_name)]) - subprocess.run(["openssl", "x509", "-req", "-days", str(validity_days), "-in", csr_file, "-signkey", - key_file, "-out", cert_file, "-set_serial", str(serial_number)]) - - -class SpServer: - def __init__(self, server_address, cert_file_path, keyfile_path): - global version - global server_info - version = read_text('version.txt') - server_info = read_text('server-config.txt') - self.server_address = server_address - self.context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) - self.context.load_cert_chain(cert_file_path, keyfile_path) - self.httpd = ThreadingHTTPServer(server_address, SpRequestHandler) - self.httpd.socket = self.context.wrap_socket(self.httpd.socket, True) - - def start(self): - print(f'HTTPS[{PORT}] SmartPerf Server Start') - if is_windows(): - open_web("https://127.0.0.1:9000/application/") - self.httpd.serve_forever() - - -def main(): - check_port(PORT) - if not os.path.exists(CERT_FILE) or not os.path.exists(KEY_FILE): - if is_linux(): - if not os.path.exists('./cert'): - os.makedirs('./cert') - gen_ssl(CERT_FILE, KEY_FILE) - server_address = ('', PORT) - server = SpServer(server_address, CERT_FILE, KEY_FILE) - server.start() - - -if __name__ == '__main__': - main() diff --git a/ide/src/base-ui/tabs/lit-tabs.ts b/ide/src/base-ui/tabs/lit-tabs.ts index b296b9ea0..75935c8f1 100644 --- a/ide/src/base-ui/tabs/lit-tabs.ts +++ b/ide/src/base-ui/tabs/lit-tabs.ts @@ -167,7 +167,6 @@ export class LitTabs extends HTMLElement { } connectedCallback(): void { - let that = this; this.tabPos = {}; this.nav = this.shadowRoot?.querySelector('#nav'); this.line = this.shadowRoot?.querySelector('#tab-line'); diff --git a/ide/src/base-ui/tree/LitTree.ts b/ide/src/base-ui/tree/LitTree.ts index 276ab7da6..257e3089d 100644 --- a/ide/src/base-ui/tree/LitTree.ts +++ b/ide/src/base-ui/tree/LitTree.ts @@ -336,7 +336,7 @@ export class LitTree extends BaseElement { onDrag(e: MouseEvent): void {} - onDragStart(ev: MouseEvent) { + onDragStart(ev: MouseEvent): void { this.srcDragElement = ev.target; (ev.target! as LitTreeNode).open = 'true'; (ev.target! as LitTreeNode).autoExpand(); @@ -350,7 +350,7 @@ export class LitTree extends BaseElement { (ev.target as LitTreeNode).style.backgroundColor = '#42b98333'; } - onDragOver(ev: MouseEvent) { + onDragOver(ev: MouseEvent): void { let node = ev.target as LitTreeNode; //@ts-ignore if (this.srcDragElement.data.key === node.data!.key) { return; diff --git a/ide/src/doc/quickstart_trace_streamer.html b/ide/src/doc/quickstart_trace_streamer.html index 5676d805f..3ca9d30ef 100644 --- a/ide/src/doc/quickstart_trace_streamer.html +++ b/ide/src/doc/quickstart_trace_streamer.html @@ -892,7 +892,7 @@ TraceStreamer在解析数据过程中,使用ipid(internal pid)唯一标识进 lightBackGround[i].style.backgroundColor = '#32373F'; } } - }) + }); \ No newline at end of file diff --git a/ide/src/hdc/HdcDeviceManager.ts b/ide/src/hdc/HdcDeviceManager.ts index 23e031c4f..4d4aa0b78 100644 --- a/ide/src/hdc/HdcDeviceManager.ts +++ b/ide/src/hdc/HdcDeviceManager.ts @@ -233,6 +233,7 @@ export class HdcDeviceManager { } else { hdcShellStream.DoCommand(HdcDeviceManager.processCommand(keyboardEvent)); } + return; }; } diff --git a/ide/src/trace/bean/BoxSelection.ts b/ide/src/trace/bean/BoxSelection.ts index 1b4d6a5ed..799501bc8 100644 --- a/ide/src/trace/bean/BoxSelection.ts +++ b/ide/src/trace/bean/BoxSelection.ts @@ -686,13 +686,14 @@ export class SelectionParam { } let jsCpuProfilerData = copyFrameSelectData.filter((item: unknown): unknown => { // @ts-ignore - if (item.depth === 0) { - // @ts-ignore - setSelectState(item, frameSelectDataIdArr); - // @ts-ignore - item.isSelect = true; - return item; + if (item.depth !== 0) { + return; } + // @ts-ignore + setSelectState(item, frameSelectDataIdArr); + // @ts-ignore + item.isSelect = true; + return item; }); this.jsCpuProfilerData = jsCpuProfilerData; } diff --git a/ide/src/trace/component/SpSystemTrace.init.ts b/ide/src/trace/component/SpSystemTrace.init.ts index 6bc445421..a37157a66 100644 --- a/ide/src/trace/component/SpSystemTrace.init.ts +++ b/ide/src/trace/component/SpSystemTrace.init.ts @@ -610,10 +610,10 @@ function intersectionObserverHandler(sp: SpSystemTrace): void { // 判断目标元素是否可见 isIntersecting为true是可见 if (!it.isIntersecting) { tr.sleeping = true; - sp.invisibleRows.indexOf(tr) == -1 && sp.invisibleRows.push(tr); + sp.invisibleRows.indexOf(tr) === -1 && sp.invisibleRows.push(tr); } else { tr.sleeping = false; - sp.visibleRows.indexOf(tr) == -1 && sp.visibleRows.push(tr); + sp.visibleRows.indexOf(tr) === -1 && sp.visibleRows.push(tr); } }); //更新可见泳道及不可见泳道值 diff --git a/ide/src/trace/component/setting/SpWebHdcShell.ts b/ide/src/trace/component/setting/SpWebHdcShell.ts index 7db8272da..ba79b1b1b 100644 --- a/ide/src/trace/component/setting/SpWebHdcShell.ts +++ b/ide/src/trace/component/setting/SpWebHdcShell.ts @@ -67,12 +67,11 @@ export class SpWebHdcShell extends BaseElement { event.preventDefault(); event.stopPropagation(); }); - let listenerThis = this; this.shellCanvas!.addEventListener('keydown', async (keyboardEvent) => { keyboardEvent.preventDefault(); - if (keyboardEvent.ctrlKey && keyboardEvent.code === 'KeyC' && listenerThis.points) { - let rowText: string = listenerThis.getSelectedText(); - listenerThis.points = undefined; + if (keyboardEvent.ctrlKey && keyboardEvent.code === 'KeyC' && this.points) { + let rowText: string = this.getSelectedText(); + this.points = undefined; await navigator.clipboard.writeText(rowText); } else { if (this.sendCallBack) { diff --git a/ide/src/trace/component/trace/TimerShaftElement.ts b/ide/src/trace/component/trace/TimerShaftElement.ts index 705767982..60a6edbf7 100644 --- a/ide/src/trace/component/trace/TimerShaftElement.ts +++ b/ide/src/trace/component/trace/TimerShaftElement.ts @@ -570,8 +570,8 @@ export class TimerShaftElement extends BaseElement { this._rangeRuler?.keyUp(ev); } - drawTriangle(time: number, type: string): void { - this._sportRuler?.drawTriangle(time, type); + drawTriangle(time: number, type: string): unknown { + return this._sportRuler?.drawTriangle(time, type); } removeTriangle(type: string): void { diff --git a/ide/src/trace/component/trace/base/RangeSelect.ts b/ide/src/trace/component/trace/base/RangeSelect.ts index 79fed3b75..a7e2b0b02 100644 --- a/ide/src/trace/component/trace/base/RangeSelect.ts +++ b/ide/src/trace/component/trace/base/RangeSelect.ts @@ -388,6 +388,7 @@ export class RangeSelect { TraceRow.rangeSelectObject = rangeSelect; return true; } + return false; }); this.timerShaftEL!.sportRuler!.isRangeSelect = (this.rangeTraceRow?.length || 0) > 0; this.timerShaftEL!.sportRuler!.draw(); diff --git a/ide/src/trace/component/trace/base/TraceRow.ts b/ide/src/trace/component/trace/base/TraceRow.ts index e1525517c..1c58dce0a 100644 --- a/ide/src/trace/component/trace/base/TraceRow.ts +++ b/ide/src/trace/component/trace/base/TraceRow.ts @@ -558,11 +558,8 @@ export class TraceRow extends HTMLElement { } }; - getHoverStruct( - strict: boolean = true, - offset: boolean = false, - maxKey: string | undefined = undefined - ): T | undefined { + //@ts-ignore + getHoverStruct(strict: boolean = true, offset: boolean = false, maxKey?: string): T { if (this.isHover) { if (maxKey) { let arr = this.dataListCache diff --git a/ide/src/trace/component/trace/base/TraceRowConfig.ts b/ide/src/trace/component/trace/base/TraceRowConfig.ts index db20983af..5cbc1dd42 100644 --- a/ide/src/trace/component/trace/base/TraceRowConfig.ts +++ b/ide/src/trace/component/trace/base/TraceRowConfig.ts @@ -83,7 +83,7 @@ export class TraceRowConfig extends BaseElement { TraceRowConfig.allTraceRowList.push(...this.traceRowList!); this.refreshAllConfig(true, true); // 鼠标移入该页面,隐藏泳道图tip - this.onmouseenter = () => { + this.onmouseenter = (): void => { this.spSystemTrace!.tipEL!.style.display = 'none'; this.spSystemTrace!.hoverStructNull(); this.spSystemTrace!.refreshCanvas(true); diff --git a/ide/src/trace/component/trace/sheet/TabPaneCurrentSelection.ts b/ide/src/trace/component/trace/sheet/TabPaneCurrentSelection.ts index ef90271e7..c7f085646 100644 --- a/ide/src/trace/component/trace/sheet/TabPaneCurrentSelection.ts +++ b/ide/src/trace/component/trace/sheet/TabPaneCurrentSelection.ts @@ -1638,6 +1638,8 @@ export class TabPaneCurrentSelection extends BaseElement { let wakeUps = await queryThreadWakeUpFrom(itid, startTime + (window as unknown).recordStartNS); if (wakeUps !== undefined && wakeUps.length > 0) { return wakeUps[0]; + } else { + return; } } diff --git a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstruction.ts b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstruction.ts index c02126b62..9ad56bdac 100644 --- a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstruction.ts +++ b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstruction.ts @@ -279,13 +279,13 @@ export class TabPaneSampleInstruction extends BaseElement { //计算当前节点下指令数之和 用于计算每个节点所占的宽度比 const total = isCycles ? instructionArray[key] - // @ts-ignore - .filter((i: unknown) => i.parentName === parentNode.name) - .reduce((pre: number, cur: SampleStruct) => pre + cur.cycles!, 0) + // @ts-ignore + .filter((i: unknown) => i.parentName === parentNode.name) + .reduce((pre: number, cur: SampleStruct) => pre + cur.cycles!, 0) : instructionArray[key] - // @ts-ignore - .filter((i: unknown) => i.parentName === parentNode.name) - .reduce((pre: number, cur: SampleStruct) => pre + cur.instructions!, 0); + // @ts-ignore + .filter((i: unknown) => i.parentName === parentNode.name) + .reduce((pre: number, cur: SampleStruct) => pre + cur.instructions!, 0); const curWidth = isCycles ? cur.cycles : cur.instructions; const width = Math.floor(parentNode.frame.width * (curWidth / total)); if (i === 0) { @@ -385,13 +385,14 @@ export class TabPaneSampleInstruction extends BaseElement { * @param clickData */ setRelationDataProperty(relationData: Array, clickData: SampleStruct): void { - const propertyData = this.instructionData.find((subArr: any) => + const propertyData = this.instructionData.find((subArr: unknown) => + // @ts-ignore subArr.some((obj: SampleStruct) => obj.begin === clickData.begin) ); //获取非unknown数据 - // @ts-ignore + // @ts-ignore const knownRelation = relationData.filter((relation) => relation.name.indexOf('unknown') < 0); - propertyData.forEach((property: any) => { + propertyData.forEach((property: unknown) => { // @ts-ignore const relation = knownRelation.find((relation) => relation.name === property.func_name); // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionDistributions.ts b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionDistributions.ts index 1d82fbc76..f9eef5e79 100644 --- a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionDistributions.ts +++ b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionDistributions.ts @@ -136,7 +136,7 @@ export class TabPaneSampleInstructionDistributions extends BaseElement { * @param canvasY * @returns */ - searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number) { + searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number): unknown { // @ts-ignore for (let i = 0; i < nodes.length; i++) { // @ts-ignore @@ -210,12 +210,12 @@ export class TabPaneSampleInstructionDistributions extends BaseElement { const detail = hoverNode!; this.hintContent = ` ${ - // @ts-ignore - detail.instruct + // @ts-ignore + detail.instruct }
${ - // @ts-ignore - parseFloat(detail.heightPer) + // @ts-ignore + parseFloat(detail.heightPer) } `; } @@ -281,7 +281,7 @@ export class TabPaneSampleInstructionDistributions extends BaseElement { * @param height * @param count */ - drawBar(instructionData: unknown, height: number, count: number) { + drawBar(instructionData: unknown, height: number, count: number): void { const yTotal = Number((this.yAvg * 5).toFixed(2)); const interval = Math.floor((height - paddingBottom) / 6); // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionSelection.ts b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionSelection.ts index d87b3254a..46f3c26f5 100644 --- a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionSelection.ts +++ b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionSelection.ts @@ -225,8 +225,8 @@ export class TabPaneSampleInstructionSelection extends BaseElement { // @ts-ignore this.hintContent = `${hoverNode.detail}(${hoverNode.name})
${ - // @ts-ignore - this.isChecked ? hoverNode.hoverCycles : hoverNode.hoverInstructions + // @ts-ignore + this.isChecked ? hoverNode.hoverCycles : hoverNode.hoverInstructions } `; @@ -293,16 +293,16 @@ export class TabPaneSampleInstructionSelection extends BaseElement { const parentNode = preList.find((node: SampleStruct) => node.name === cur.parentName); //计算当前节点下指令数之和 用于计算每个节点所占的宽度比 const total = isCycles - // @ts-ignore - ? instructionArray[key] - // @ts-ignore - .filter((i: unknown) => i.parentName === parentNode.name) - .reduce((pre: number, cur: SampleStruct) => pre + cur.cycles!, 0) - // @ts-ignore - : instructionArray[key] - // @ts-ignore - .filter((i: unknown) => i.parentName === parentNode.name) - .reduce((pre: number, cur: SampleStruct) => pre + cur.instructions!, 0); + ? // @ts-ignore + instructionArray[key] + // @ts-ignore + .filter((i: unknown) => i.parentName === parentNode.name) + .reduce((pre: number, cur: SampleStruct) => pre + cur.cycles!, 0) + : // @ts-ignore + instructionArray[key] + // @ts-ignore + .filter((i: unknown) => i.parentName === parentNode.name) + .reduce((pre: number, cur: SampleStruct) => pre + cur.instructions!, 0); const curWidth = isCycles ? cur.cycles : cur.instructions; const width = Math.floor(parentNode.frame.width * (curWidth / total)); if (i === 0) { @@ -356,7 +356,7 @@ export class TabPaneSampleInstructionSelection extends BaseElement { * @param canvasY * @returns */ - searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number) { + searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number): unknown { // @ts-ignore for (const key in nodes) { // @ts-ignore @@ -411,7 +411,7 @@ export class TabPaneSampleInstructionSelection extends BaseElement { * @param instructionData * @returns */ - getAvgInstructionData(instructionData: Array) { + getAvgInstructionData(instructionData: Array): unknown[] { // @ts-ignore const length = instructionData[0].property.length; // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts b/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts index 723b292c5..0ce9dafb6 100644 --- a/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts +++ b/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts @@ -356,7 +356,7 @@ export class TabPaneIOTierStatistics extends BaseElement { } else if (this.ioTierStatisticsSortType === 2) { // @ts-ignore return ioTierStatItemB.node[key] - ioTierStatItemA.node[key]; - } else{ + } else { return 0; } }); diff --git a/ide/src/trace/component/trace/sheet/native-memory/TabPaneNMCallTree.ts b/ide/src/trace/component/trace/sheet/native-memory/TabPaneNMCallTree.ts index 0937b851b..2dc005775 100644 --- a/ide/src/trace/component/trace/sheet/native-memory/TabPaneNMCallTree.ts +++ b/ide/src/trace/component/trace/sheet/native-memory/TabPaneNMCallTree.ts @@ -183,7 +183,6 @@ export class TabpaneNMCalltree extends BaseElement { if (data.type === 'AllocEvent') { data.type = '1'; } - const that = this; if (this.subTypeArr.length > 0) { this.subTypeArr.map((memory): void => { selections.push({ diff --git a/ide/src/trace/component/trace/sheet/sdk/TabPaneSdkSlice.ts b/ide/src/trace/component/trace/sheet/sdk/TabPaneSdkSlice.ts index ea40b9952..2dd8e7d54 100644 --- a/ide/src/trace/component/trace/sheet/sdk/TabPaneSdkSlice.ts +++ b/ide/src/trace/component/trace/sheet/sdk/TabPaneSdkSlice.ts @@ -376,6 +376,8 @@ export class TabPaneSdkSlice extends BaseElement { default: if (typeof sliceValue === 'string') { return sliceValue.replace(//gi, '>'); + } else { + return; } } } diff --git a/ide/src/trace/component/trace/timer-shaft/SportRuler.ts b/ide/src/trace/component/trace/timer-shaft/SportRuler.ts index 32ee54dd6..e31c54577 100644 --- a/ide/src/trace/component/trace/timer-shaft/SportRuler.ts +++ b/ide/src/trace/component/trace/timer-shaft/SportRuler.ts @@ -373,7 +373,7 @@ export class SportRuler extends Graph { return inRange; } - drawTriangle(time: number, type: string): void { + drawTriangle(time: number, type: string): unknown { if (time !== null && typeof time !== undefined) { let i = this.flagList.findIndex((it) => it.time === time); if (type === 'triangle') { @@ -405,7 +405,7 @@ export class SportRuler extends Graph { !this.hoverFlag.hidden ? this.hoverFlag : null, this.flagList.find((it) => it.selected) || null ); - //return this.flagList[triangle].time; + return this.flagList[triangle].time; } } } else if (type === 'inverted') { diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerCommon.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerCommon.ts index c6472b50c..c60ebc36f 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerCommon.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerCommon.ts @@ -13,7 +13,6 @@ * limitations under the License. */ - export class ChartStruct { depth: number = 0; symbol: string = ''; @@ -64,6 +63,8 @@ export class HiPerfSymbol { } } +type SplitMap = Map; + export class MerageBean extends ChartStruct { #parentNode: MerageBean | undefined = undefined; #total = 0; @@ -109,7 +110,7 @@ class MerageBeanDataSplit { //所有的操作都是针对整个树结构的, 不区分特定的数据 splitTree( - splitMapData: unknown, + splitMapData: SplitMap, data: MerageBean[], name: string, isCharge: boolean, @@ -128,12 +129,18 @@ class MerageBeanDataSplit { this.resetAllNode(data, currentTreeList, searchValue); } - recursionChargeInitTree(splitMapData: unknown, node: MerageBean, symbolName: string, isSymbol: boolean): void { + splitPush(splitMapData: SplitMap, name: string, node: MerageBean) { + if (!splitMapData.has(name)) { + splitMapData.set(name, []); + } + splitMapData.get(name)!.push(node); + } + + recursionChargeInitTree(splitMapData: SplitMap, node: MerageBean, symbolName: string, isSymbol: boolean): void { if ((isSymbol && node.symbol === symbolName) || (!isSymbol && node.lib === symbolName)) { - //@ts-ignore - (splitMapData[symbolName] = splitMapData[symbolName] || []).push(node); node.isStore++; } + this.splitPush(splitMapData, symbolName, node); if (node.initChildren.length > 0) { node.initChildren.forEach((child) => { this.recursionChargeInitTree(splitMapData, child, symbolName, isSymbol); @@ -141,10 +148,9 @@ class MerageBeanDataSplit { } } - recursionPruneInitTree(splitMapData: unknown, node: MerageBean, symbolName: string, isSymbol: boolean): void { + recursionPruneInitTree(splitMapData: SplitMap, node: MerageBean, symbolName: string, isSymbol: boolean): void { if ((isSymbol && node.symbol === symbolName) || (!isSymbol && node.lib === symbolName)) { - //@ts-ignore - (splitMapData[symbolName] = splitMapData[symbolName] || []).push(node); + this.splitPush(splitMapData, symbolName, node); node.isStore++; this.pruneChildren(splitMapData, node, symbolName); } else if (node.initChildren.length > 0) { @@ -166,7 +172,7 @@ class MerageBeanDataSplit { } recursionChargeByRule( - splitMapData: unknown, + splitMapData: SplitMap, node: MerageBean, ruleName: string, rule: (node: MerageBean) => boolean @@ -174,8 +180,7 @@ class MerageBeanDataSplit { if (node.initChildren.length > 0) { node.initChildren.forEach((child) => { if (rule(child)) { - //@ts-ignore - (splitMapData[ruleName] = splitMapData[ruleName] || []).push(child); + this.splitPush(splitMapData, ruleName, child); child.isStore++; } this.recursionChargeByRule(splitMapData, child, ruleName, rule); @@ -183,18 +188,17 @@ class MerageBeanDataSplit { } } - pruneChildren(splitMapData: unknown, node: MerageBean, symbolName: string): void { + pruneChildren(splitMapData: SplitMap, node: MerageBean, symbolName: string): void { if (node.initChildren.length > 0) { node.initChildren.forEach((child) => { child.isStore++; - //@ts-ignore - (splitMapData[symbolName] = splitMapData[symbolName] || []).push(child); + this.splitPush(splitMapData, symbolName, child); this.pruneChildren(splitMapData, child, symbolName); }); } } - hideSystemLibrary(allProcess: MerageBean[], splitMapData: unknown): void { + hideSystemLibrary(allProcess: MerageBean[], splitMapData: SplitMap): void { allProcess.forEach((item) => { item.children = []; this.recursionChargeByRule(splitMapData, item, this.systmeRuleName, (node) => { @@ -203,7 +207,7 @@ class MerageBeanDataSplit { }); } - hideNumMaxAndMin(allProcess: MerageBean[], splitMapData: unknown, startNum: number, endNum: string): void { + hideNumMaxAndMin(allProcess: MerageBean[], splitMapData: SplitMap, startNum: number, endNum: string): void { let max = endNum === '∞' ? Number.POSITIVE_INFINITY : parseInt(endNum); allProcess.forEach((item) => { item.children = []; @@ -216,7 +220,7 @@ class MerageBeanDataSplit { resotreAllNode(splitMapData: unknown, symbols: string[]): void { symbols.forEach((symbol) => { //@ts-ignore - let list = splitMapData[symbol]; + let list = splitMapData.get(symbol); if (list !== undefined) { list.forEach((item: unknown) => { //@ts-ignore @@ -250,15 +254,15 @@ class MerageBeanDataSplit { values.forEach((item: unknown) => { //@ts-ignore if (item.parentNode !== undefined) { - //@ts-ignore + //@ts-ignore if (item.isStore === 0 && item.searchShow) { - //@ts-ignore + //@ts-ignore let parentNode = item.parentNode; while (parentNode !== undefined && !(parentNode.isStore === 0 && parentNode.searchShow)) { parentNode = parentNode.parentNode; } if (parentNode) { - //@ts-ignore + //@ts-ignore item.currentTreeParentNode = parentNode; parentNode.children.push(item); } diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerFileSystem.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerFileSystem.ts index f0847b9e9..dff1c122b 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerFileSystem.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerFileSystem.ts @@ -679,7 +679,7 @@ class FileSystemCallTreeHandler { currentDataType: string = ''; currentTreeList: FileMerageBean[] = []; samplesList: FileSample[] = []; - splitMapData: MerageMap = {}; + splitMapData: Map = new Map(); searchValue: string = ''; currentEventId: string = ''; isHideThread: boolean = false; @@ -697,7 +697,7 @@ class FileSystemCallTreeHandler { this.dataSource.length = 0; this.currentTreeList.length = 0; this.samplesList.length = 0; - this.splitMapData = {}; + this.splitMapData.clear(); } setEventId(eventId: string): void { @@ -1092,19 +1092,18 @@ and s.start_ts <= ${selectionParam.rightNs} + t.start_ts ${sqlFilter} and callch } clearAll(): void { this.samplesList = []; - this.splitMapData = {}; + this.splitMapData.clear(); this.currentTreeMapData = {}; this.currentTreeList = []; this.searchValue = ''; this.allProcess = []; this.dataSource = []; - this.splitMapData = {}; this.currentDataType = ''; } clearSplitMapData(symbolName: string): void { - if (symbolName in this.splitMapData){ - delete this.splitMapData[symbolName]; + if (this.splitMapData.has(symbolName)) { + this.splitMapData.delete(symbolName); } } } diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerNativeNemory.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerNativeNemory.ts index 6e6476668..e9066774d 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerNativeNemory.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerNativeNemory.ts @@ -43,7 +43,7 @@ export class ProcedureLogicWorkerNativeMemory extends LogicHandler { queryAllCallchainsSamples: NativeHookStatistics[] = []; currentSamples: NativeHookStatistics[] = []; allThreads: NativeHookCallInfo[] = []; - splitMapData: CallInfoMap = {}; + splitMapData: Map = new Map(); searchValue: string = ''; currentEventId: string = ''; realTimeDif: number = 0; @@ -616,7 +616,7 @@ export class ProcedureLogicWorkerNativeMemory extends LogicHandler { } clearAll(): void { this.dataCache.clearNM(); - this.splitMapData = {}; + this.splitMapData.clear(); this.currentSamples = []; this.allThreads = []; this.queryAllCallchainsSamples = []; @@ -1142,8 +1142,8 @@ export class ProcedureLogicWorkerNativeMemory extends LogicHandler { currentNode.lib.endsWith('.so.1') || currentNode.lib.endsWith('.dll') || currentNode.lib.endsWith('.so') ? 0 : 1; } clearSplitMapData(symbolName: string): void { - if (symbolName in this.splitMapData) { - delete this.splitMapData[symbolName]; + if (this.splitMapData.has(symbolName)) { + this.splitMapData.delete(symbolName); } } resolvingNMCallAction(params: unknown[]): NativeHookCallInfo[] { diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts index efefb4b89..bd0fff4c5 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts @@ -42,16 +42,12 @@ type MergeMap = { [id: string]: PerfCallChainMerageData; }; -type spiltMap = { - [id: string]: PerfCallChainMerageData[]; -}; - export class ProcedureLogicWorkerPerf extends LogicHandler { filesData: FileMap = {}; samplesData: Array = []; threadData: PerfThreadMap = {}; callChainData: PerfCallChainMap = {}; - splitMapData: spiltMap = {}; + splitMapData: Map = new Map(); currentTreeMapData: MergeMap = {}; currentTreeList: PerfCallChainMerageData[] = []; searchValue: string = ''; @@ -411,7 +407,7 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { this.samplesData = []; this.threadData = {}; this.callChainData = {}; - this.splitMapData = {}; + this.splitMapData.clear(); this.currentTreeMapData = {}; this.currentTreeList = []; this.searchValue = ''; @@ -617,7 +613,10 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { recursionPerfChargeInitTree(sample: PerfCallChainMerageData, symbolName: string, isSymbol: boolean): void { if ((isSymbol && sample.symbolName === symbolName) || (!isSymbol && sample.libName === symbolName)) { - (this.splitMapData[symbolName] = this.splitMapData[symbolName] || []).push(sample); + if (!this.splitMapData.has(symbolName)) { + this.splitMapData.set(symbolName, []); + } + this.splitMapData.get(symbolName)!.push(sample); sample.isStore++; } if (sample.initChildren.length > 0) { @@ -629,7 +628,10 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { recursionPerfPruneInitTree(node: PerfCallChainMerageData, symbolName: string, isSymbol: boolean): void { if ((isSymbol && node.symbolName === symbolName) || (!isSymbol && node.libName === symbolName)) { - (this.splitMapData[symbolName] = this.splitMapData[symbolName] || []).push(node); + if (!this.splitMapData.has(symbolName)) { + this.splitMapData.set(symbolName, []); + } + this.splitMapData.get(symbolName)!.push(node); node.isStore++; this.pruneChildren(node, symbolName); } else if (node.initChildren.length > 0) { @@ -658,7 +660,10 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { if (sample.initChildren.length > 0) { sample.initChildren.forEach((child): void => { if (rule(child)) { - (this.splitMapData[ruleName] = this.splitMapData[ruleName] || []).push(child); + if (!this.splitMapData.has(ruleName)) { + this.splitMapData.set(ruleName, []); + } + this.splitMapData.get(ruleName)!.push(child); child.isStore++; } this.recursionChargeByRule(child, ruleName, rule); @@ -670,7 +675,10 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { if (sample.initChildren.length > 0) { sample.initChildren.forEach((child: PerfCallChainMerageData): void => { child.isStore++; - (this.splitMapData[symbolName] = this.splitMapData[symbolName] || []).push(child); + if (!this.splitMapData.has(symbolName)) { + this.splitMapData.set(symbolName, []); + } + this.splitMapData.get(symbolName)!.push(child); this.pruneChildren(child, symbolName); }); } @@ -696,14 +704,14 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { } clearSplitMapData(symbolName: string): void { - if (symbolName in this.splitMapData){ - delete this.splitMapData[symbolName]; + if (this.splitMapData.has(symbolName)) { + this.splitMapData.delete(symbolName); } } resetAllSymbol(symbols: string[]): void { symbols.forEach((symbol: string): void => { - let list = this.splitMapData[symbol]; + let list = this.splitMapData.get(symbol); if (list !== undefined) { list.forEach((item: PerfCallChainMerageData): void => { item.isStore--; @@ -879,7 +887,10 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { return this.combineCallChainForAnalysis(); case 'getBottomUp': return this.getBottomUp(); + default: + return; } + return; } combineCallChainForAnalysis(obj?: unknown): PerfAnalysisSample[] { diff --git a/ide/webpack.config.js b/ide/webpack.config.js index 7419154b1..f7702c1c8 100644 --- a/ide/webpack.config.js +++ b/ide/webpack.config.js @@ -207,7 +207,6 @@ const config = { https: false, stream: false, crypto: false, - child_process: false, path: false, //if you want to use this module also don't forget npm i crypto-browserify }, }, diff --git a/trace_streamer/build/protoc_w.py b/trace_streamer/build/protoc_w.py index 1c97d16f0..cb88d9cdd 100755 --- a/trace_streamer/build/protoc_w.py +++ b/trace_streamer/build/protoc_w.py @@ -27,7 +27,8 @@ if "developtools" in sys.argv[3]: PROJECT_TOP = os.path.realpath(os.path.join(THIS_DIR, "..")) OHOS_X64_OUT = os.path.join(PROJECT_TOP, sys.argv[2]) -LIBCXX_X64_OUT = os.path.join(PROJECT_TOP, sys.argv[1], "ndk/libcxx/linux_x86_64") +LIBCXX_X64_OUT = os.path.join( + PROJECT_TOP, sys.argv[1], "ndk/libcxx/linux_x86_64") SUBSYS_X64_OUT = os.path.join(PROJECT_TOP, sys.argv[2], TAIL_DIR) PROTOC_NAME = "protoc" PROTOCREADER_PLUGIN = "protoreader_plugin" @@ -36,8 +37,10 @@ if current_os == "Windows": PROTOC_NAME = "protoc.exe" PROTOCREADER_PLUGIN = "protoreader_plugin.exe" PROTOC = os.path.join(PROJECT_TOP, sys.argv[2], TAIL_DIR, PROTOC_NAME) -OPT_PLUGIN_PROTOREADER_PATH = os.path.join(PROJECT_TOP, sys.argv[2], TAIL_DIR, PROTOCREADER_PLUGIN) -OPT_PLUGIN_PROTOREADER = "--plugin=protoc-gen-plugin=" + os.path.join(PROJECT_TOP, sys.argv[2], TAIL_DIR, PROTOCREADER_PLUGIN) +OPT_PLUGIN_PROTOREADER_PATH = os.path.join( + PROJECT_TOP, sys.argv[2], TAIL_DIR, PROTOCREADER_PLUGIN) +OPT_PLUGIN_PROTOREADER = "--plugin=protoc-gen-plugin=" + \ + os.path.join(PROJECT_TOP, sys.argv[2], TAIL_DIR, PROTOCREADER_PLUGIN) PLUGINOUT = "--plugin_out=wrapper_namespace=ProtoReader" PARAMS = sys.argv[1:] @@ -49,7 +52,8 @@ PARAMS_ALL = f"{PARAMS_SRC}" if not sys.argv[4].startswith("--plugin"): if os.path.isfile(OPT_PLUGIN_PROTOREADER_PATH): - cmd=[PROTOC, OPT_PLUGIN_PROTOREADER, f"{ PLUGINOUT }:{ sys.argv[5] }", *PARAMS_ALL.split()] + cmd = [PROTOC, OPT_PLUGIN_PROTOREADER, + f"{PLUGINOUT}:{sys.argv[5]}", *PARAMS_ALL.split()] print("执行参数:--------------- ", cmd, " --------------------------") subprocess.run(cmd) subprocess.run([PROTOC, *PARAMS_ALL.split()]) diff --git a/trace_streamer/sdk/demo_sdk/version.cpp b/trace_streamer/sdk/demo_sdk/version.cpp index 10d2b6f2b..1569a7994 100644 --- a/trace_streamer/sdk/demo_sdk/version.cpp +++ b/trace_streamer/sdk/demo_sdk/version.cpp @@ -13,6 +13,10 @@ * limitations under the License. */ #include "version.h" +namespace SysTuning { +namespace TraceStreamer { size_t g_loadSize = 0; const std::string SDK_VERSION = "1.0.2"; // version const std::string SDK_PUBLISH_VERSION = "2023/3/13"; // publish datetime +} // namespace TraceStreamer +} // namespace SysTuning diff --git a/trace_streamer/sdk/demo_sdk/version.h b/trace_streamer/sdk/demo_sdk/version.h index e7cc9a9e2..3ba6da8cf 100644 --- a/trace_streamer/sdk/demo_sdk/version.h +++ b/trace_streamer/sdk/demo_sdk/version.h @@ -17,7 +17,11 @@ #define VERSION_H #include #include +namespace SysTuning { +namespace TraceStreamer { extern size_t g_loadSize; extern const std::string SDK_VERSION; // version extern const std::string SDK_PUBLISH_VERSION; // publish datetime +} // namespace TraceStreamer +} // namespace SysTuning #endif diff --git a/trace_streamer/src/base/codec_cov.cpp b/trace_streamer/src/base/codec_cov.cpp index 5817b3df2..a1360fe68 100644 --- a/trace_streamer/src/base/codec_cov.cpp +++ b/trace_streamer/src/base/codec_cov.cpp @@ -40,22 +40,22 @@ int32_t PreNum(unsigned char byte) bool IsUTF8(const uint8_t *data, int32_t len) { - constexpr uint8_t MASK = 0x80; - constexpr uint8_t FIRST_BYTE = 0xc0; - constexpr int32_t TARGET = 2; + constexpr uint8_t mask = 0x80; + constexpr uint8_t firstByte = 0xc0; + constexpr int32_t target = 2; int32_t num = 0; int32_t i = 0; while (i < len) { - if ((data[i] & MASK) == 0x00) { + if ((data[i] & mask) == 0x00) { i++; continue; } - if ((num = PreNum(data[i])) <= TARGET) { + if ((num = PreNum(data[i])) <= target) { return false; } i++; for (int32_t j = 0; j < num - 1; j++) { - if ((data[i] & FIRST_BYTE) != MASK) { + if ((data[i] & firstByte) != mask) { return false; } i++; @@ -66,22 +66,22 @@ bool IsUTF8(const uint8_t *data, int32_t len) bool IsGBK(const uint8_t *data, int32_t len) { - constexpr int32_t STEP = 2; - constexpr uint8_t ASCII_END = 0x7f; - constexpr uint8_t FIRST_BYTE = 0x81; - constexpr uint8_t FIRST_BYTE_END = 0xfe; - constexpr uint8_t SECOND_BYTE_ONE = 0x40; - constexpr uint8_t SECOND_BYTE_TWO_END = 0xfe; - constexpr uint8_t GBK_MASK = 0xf7; + constexpr int32_t step = 2; + constexpr uint8_t asciiEnd = 0x7f; + constexpr uint8_t firstByte = 0x81; + constexpr uint8_t firstByteEnd = 0xfe; + constexpr uint8_t secondByteOne = 0x40; + constexpr uint8_t secondByteTwoEnd = 0xfe; + constexpr uint8_t gbkMask = 0xf7; int32_t i = 0; while (i < len) { - if (data[i] <= ASCII_END) { + if (data[i] <= asciiEnd) { i++; continue; } else { - if (data[i] >= FIRST_BYTE && data[i] <= FIRST_BYTE_END && data[i + 1] >= SECOND_BYTE_ONE && - data[i + 1] <= SECOND_BYTE_TWO_END && data[i + 1] != GBK_MASK) { - i += STEP; + if (data[i] >= firstByte && data[i] <= firstByteEnd && data[i + 1] >= secondByteOne && + data[i + 1] <= secondByteTwoEnd && data[i + 1] != gbkMask) { + i += step; continue; } else { return false; diff --git a/trace_streamer/src/base/sqlite_ext/sqlite_ext_funcs.cpp b/trace_streamer/src/base/sqlite_ext/sqlite_ext_funcs.cpp index cf504d2d5..bf70f6265 100644 --- a/trace_streamer/src/base/sqlite_ext/sqlite_ext_funcs.cpp +++ b/trace_streamer/src/base/sqlite_ext/sqlite_ext_funcs.cpp @@ -205,8 +205,8 @@ struct JsonBuild { void BuildJson(sqlite3_context *ctx, int32_t argc, sqlite3_value **argv) { - const int32_t PAIR_ARGS_SIZE = 2; - if (argc % PAIR_ARGS_SIZE != 0) { + const int32_t pairArgsSize = 2; + if (argc % pairArgsSize != 0) { TS_LOGI("BuildJson arg number error"); sqlite3_result_error(ctx, "BuildJson arg number error", -1); return; @@ -214,7 +214,7 @@ void BuildJson(sqlite3_context *ctx, int32_t argc, sqlite3_value **argv) JsonBuild builder; builder.AppendHead(); - for (int32_t i = 0; i < argc; i += PAIR_ARGS_SIZE) { + for (int32_t i = 0; i < argc; i += pairArgsSize) { if (sqlite3_value_type(argv[i]) != SQLITE_TEXT) { TS_LOGI("BuildJson: Invalid args argc:%d, %d", argc, sqlite3_value_type(argv[i])); sqlite3_result_error(ctx, "BuildJson: Invalid args", -1); @@ -244,7 +244,7 @@ void BuildJson(sqlite3_context *ctx, int32_t argc, sqlite3_value **argv) void RepeatedJsonStep(sqlite3_context *ctx, int32_t argc, sqlite3_value **argv) { - const int32_t PAIR_ARGS_SIZE = 2; + const int32_t pairArgsSize = 2; auto **jsonBuild = static_cast(sqlite3_aggregate_context(ctx, sizeof(JsonBuild *))); if (*jsonBuild == nullptr) { @@ -252,7 +252,7 @@ void RepeatedJsonStep(sqlite3_context *ctx, int32_t argc, sqlite3_value **argv) } JsonBuild *builder = *jsonBuild; builder->AppendHead(); - for (int32_t i = 0; i < argc; i += PAIR_ARGS_SIZE) { + for (int32_t i = 0; i < argc; i += pairArgsSize) { if (sqlite3_value_type(argv[i]) != SQLITE_TEXT) { TS_LOGI("BuildJson: Invalid args argc:%d, %d", argc, sqlite3_value_type(argv[i])); sqlite3_result_error(ctx, "BuildJson: Invalid args", -1); diff --git a/trace_streamer/src/base/ts_common.h b/trace_streamer/src/base/ts_common.h index 564854e6f..502bfedff 100644 --- a/trace_streamer/src/base/ts_common.h +++ b/trace_streamer/src/base/ts_common.h @@ -22,6 +22,7 @@ #include #include #include "log.h" +namespace { using ClockId = uint32_t; constexpr size_t G_CHUNK_SIZE = 1024 * 1024; constexpr size_t FLUSH_CHUNK_THRESHOLD = G_CHUNK_SIZE - 10000; @@ -101,6 +102,7 @@ const std::string TRACE_STATE_QUERY = "select event_name,stat_type,count,source, const std::string TRACE_TASK_NAME = "select P.id as id, P.pid as pid, P.name as process_name, group_concat(T.name,',') as thread_name from process as " "P left join thread as T where P.id = T.ipid group by pid;"; +} // namespace enum BuiltinClocks { TS_CLOCK_UNKNOW = 0, TS_CLOCK_BOOTTIME = 1, diff --git a/trace_streamer/src/filter/hi_sysevent_filter/hi_sysevent_measure_filter.cpp b/trace_streamer/src/filter/hi_sysevent_filter/hi_sysevent_measure_filter.cpp index f53757c17..362ce6922 100644 --- a/trace_streamer/src/filter/hi_sysevent_filter/hi_sysevent_measure_filter.cpp +++ b/trace_streamer/src/filter/hi_sysevent_filter/hi_sysevent_measure_filter.cpp @@ -38,8 +38,9 @@ DataIndex HiSysEventMeasureFilter::AppendNewValue(uint64_t serial, DataIndex strValue) { uint64_t appKeyId = GetOrCreateFilterIdInternal(appNameId, key); - traceDataCache_->GetHiSysEventMeasureData()->AppendData(serial, timeStamp, appNameId, appKeyId, type, numericValue, - strValue); + HiSysEventMeasureDataRow hiSysEventMeasureDataRow = {serial, timeStamp, appNameId, appKeyId, type, numericValue, + strValue}; + traceDataCache_->GetHiSysEventMeasureData()->AppendData(hiSysEventMeasureDataRow); return appNameId; } void HiSysEventMeasureFilter::AppendNewValue(std::string msg, std::string processName) @@ -68,10 +69,11 @@ void HiSysEventMeasureFilter::AppendNewValue(int32_t brightnessState, int32_t recording, int32_t streamAll) { - traceDataCache_->GetHiSysEventDeviceStateData()->AppendNewData( + HiSysEventDeviceStateDataRow hiSysEventDeviceStateDataRow = { brightnessState, btState, locationState, wifiState, streamDefault, voiceCall, music, streamRing, media, voiceAssistant, system, alarm, notification, bluetoolthSco, enforcedAudible, streamDtmf, streamTts, - accessibility, recording, streamAll); + accessibility, recording, streamAll}; + traceDataCache_->GetHiSysEventDeviceStateData()->AppendNewData(hiSysEventDeviceStateDataRow); return; } bool HiSysEventMeasureFilter::FilterAllHiSysEvent(const json &jMessage, uint64_t serial, bool &haveSplitSeg) diff --git a/trace_streamer/src/filter/hook_filter/native_hook_filter.cpp b/trace_streamer/src/filter/hook_filter/native_hook_filter.cpp index be6f9b4be..3d62c26ca 100644 --- a/trace_streamer/src/filter/hook_filter/native_hook_filter.cpp +++ b/trace_streamer/src/filter/hook_filter/native_hook_filter.cpp @@ -264,9 +264,9 @@ void NativeHookFilter::ParseAllocEvent(uint64_t timeStamp, const ProtoReader::By if (allocEventReader.has_thread_name_id()) { UpdateMap(itidToThreadNameId_, itid, ipidWithThreadNameIdIndex); } - auto row = traceDataCache_->GetNativeHookData()->AppendNewNativeHookData( - callChainId, ipid, itid, "AllocEvent", INVALID_UINT64, timeStamp, 0, 0, allocEventReader.addr(), - allocEventReader.size()); + NativeHookRow nativeHookRow = {callChainId, ipid, itid, "AllocEvent", INVALID_UINT64, timeStamp, 0, 0, allocEventReader.addr(), + allocEventReader.size()}; + auto row = traceDataCache_->GetNativeHookData()->AppendNewNativeHookData(nativeHookRow); addrToAllocEventRow_->insert(std::make_pair(allocEventReader.addr(), static_cast(row))); if (allocEventReader.size() != 0) { MaybeUpdateCurrentSizeDur(row, timeStamp, true); @@ -332,8 +332,8 @@ void NativeHookFilter::ParseFreeEvent(uint64_t timeStamp, const ProtoReader::Byt streamFilters_->statFilter_->IncreaseStat(TRACE_NATIVE_HOOK_FREE, STAT_EVENT_DATA_INVALID); return; } - row = traceDataCache_->GetNativeHookData()->AppendNewNativeHookData( - callChainId, ipid, itid, "FreeEvent", INVALID_UINT64, timeStamp, 0, 0, freeEventReader.addr(), freeHeapSize); + NativeHookRow nativeHookRow = {callChainId, ipid, itid, "FreeEvent", INVALID_UINT64, timeStamp, 0, 0, freeEventReader.addr(), freeHeapSize}; + row = traceDataCache_->GetNativeHookData()->AppendNewNativeHookData(nativeHookRow); if (freeHeapSize != 0) { MaybeUpdateCurrentSizeDur(row, timeStamp, true); } @@ -392,8 +392,8 @@ void NativeHookFilter::ParseMmapEvent(uint64_t timeStamp, const ProtoReader::Byt // Establish a mapping of addr and size to the mmap tag index. addrToMmapTag_[mMapAddr] = subType; // update addr to MemMapSubType } - auto row = traceDataCache_->GetNativeHookData()->AppendNewNativeHookData( - callChainId, ipid, itid, "MmapEvent", subType, timeStamp, 0, 0, mMapAddr, mMapSize); + NativeHookRow nativeHookRow = {callChainId, ipid, itid, "MmapEvent", subType, timeStamp, 0, 0, mMapAddr, mMapSize}; + auto row = traceDataCache_->GetNativeHookData()->AppendNewNativeHookData(nativeHookRow); if (subType == INVALID_UINT64) { UpdateAnonMmapDataDbIndex(mMapAddr, mMapSize, static_cast(row)); } @@ -462,9 +462,9 @@ void NativeHookFilter::ParseMunmapEvent(uint64_t timeStamp, const ProtoReader::B streamFilters_->statFilter_->IncreaseStat(TRACE_NATIVE_HOOK_MUNMAP, STAT_EVENT_DATA_INVALID); return; } - row = traceDataCache_->GetNativeHookData()->AppendNewNativeHookData( - callChainId, ipid, itid, "MunmapEvent", GetMemMapSubTypeWithAddr(mUnmapEventReader.addr()), timeStamp, 0, 0, - mUnmapEventReader.addr(), mUnmapEventReader.size()); + NativeHookRow nativeHookRow = {callChainId, ipid, itid, "MunmapEvent", GetMemMapSubTypeWithAddr(mUnmapEventReader.addr()), timeStamp, 0, 0, + mUnmapEventReader.addr(), mUnmapEventReader.size()}; + row = traceDataCache_->GetNativeHookData()->AppendNewNativeHookData(nativeHookRow); addrToMmapTag_.erase(mUnmapEventReader.addr()); // earse MemMapSubType with addr if (mUnmapEventReader.size() != 0) { MaybeUpdateCurrentSizeDur(row, timeStamp, false); @@ -684,9 +684,10 @@ void NativeHookFilter::FillOfflineSymbolizationFrames( auto frameInfo = itor->get(); filePathIndex = ipidToFilePathIdToFileIndex_.Find(curCacheIpid, frameInfo->filePathId_); std::string vaddr = base::Uint64ToHexText(frameInfo->symVaddr_); - auto row = traceDataCache_->GetNativeHookFrameData()->AppendNewNativeHookFrame( + NativeHookFrameVaddrRow nativeHookFrameVaddrRow = { callChainId_, depth++, frameInfo->ip_, frameInfo->symbolIndex_, filePathIndex, frameInfo->offset_, - frameInfo->symbolOffset_, vaddr); + frameInfo->symbolOffset_, vaddr}; + auto row = traceDataCache_->GetNativeHookFrameData()->AppendNewNativeHookFrame(nativeHookFrameVaddrRow); UpdateFilePathIndexToCallStackRowMap(row, filePathIndex); } } @@ -1015,9 +1016,9 @@ void NativeHookFilter::ParseFramesInCallStackCompressedMode() auto frameIp = reader.has_ip() ? reader.ip() : INVALID_UINT64; auto frameOffset = reader.has_offset() ? reader.offset() : INVALID_UINT64; auto frameSymbolOffset = reader.has_symbol_offset() ? reader.symbol_offset() : INVALID_UINT64; - auto row = traceDataCache_->GetNativeHookFrameData()->AppendNewNativeHookFrame( - stackIdToFramesItor->first, depth++, frameIp, symbolIndex, filePathIndex, frameOffset, - frameSymbolOffset); + NativeHookFrameRow nativeHookFrameRow = {stackIdToFramesItor->first, depth++, frameIp, symbolIndex, filePathIndex, frameOffset, + frameSymbolOffset}; + auto row = traceDataCache_->GetNativeHookFrameData()->AppendNewNativeHookFrame(nativeHookFrameRow); UpdateFilePathIndexToCallStackRowMap(row, filePathIndex); } } @@ -1039,9 +1040,9 @@ void NativeHookFilter::ParseFramesWithOutCallStackCompressedMode() return; } auto &frameInfo = frameHashToFrameInfoMap_.at(*frameHashValueVectorItor); - auto row = traceDataCache_->GetNativeHookFrameData()->AppendNewNativeHookFrame( - callChainId, depth++, frameInfo->ip_, frameInfo->symbolIndex_, frameInfo->filePathIndex_, - frameInfo->offset_, frameInfo->symbolOffset_); + NativeHookFrameRow nativeHookFrameRow = {callChainId, depth++, frameInfo->ip_, frameInfo->symbolIndex_, frameInfo->filePathIndex_, + frameInfo->offset_, frameInfo->symbolOffset_}; + auto row = traceDataCache_->GetNativeHookFrameData()->AppendNewNativeHookFrame(nativeHookFrameRow); UpdateFilePathIndexToCallStackRowMap(row, frameInfo->filePathIndex_); } } diff --git a/trace_streamer/src/filter/slice_filter.cpp b/trace_streamer/src/filter/slice_filter.cpp index dc34b5527..227b3e0d8 100644 --- a/trace_streamer/src/filter/slice_filter.cpp +++ b/trace_streamer/src/filter/slice_filter.cpp @@ -344,7 +344,6 @@ size_t SliceFilter::CompleteSlice(uint64_t timeStamp, DataIndex name, ArgsSet args) { - TS_CHECK_TRUE_RET(binderStackMap_.find(internalTid) != binderStackMap_.end(), SIZE_MAX); auto &stackInfo = binderStackMap_[internalTid]; SlicesStack &stack = stackInfo.sliceStack; diff --git a/trace_streamer/src/metrics/metrics.cpp b/trace_streamer/src/metrics/metrics.cpp index 0dcc75446..61739a899 100644 --- a/trace_streamer/src/metrics/metrics.cpp +++ b/trace_streamer/src/metrics/metrics.cpp @@ -60,18 +60,18 @@ void Metrics::ParserJson(const std::string &metrics, std::string &result) void Metrics::InitMemoryStrategy(const std::string &result) { json jMessage = json::parse(result); - const uint32_t TYPE_INFO_ITEM_MAX = 0; - const uint32_t TYPE_INFO_ITEM_MIN = 1; - const uint32_t TYPE_INFO_ITEM_AVG = 2; - const uint32_t PROCESS_METRICES_ITEMS_NAME = 4; + const uint32_t typeInfoItemMax = 0; + const uint32_t typeInfoItemMin = 1; + const uint32_t typeInfoItemAvg = 2; + const uint32_t processMetricesItemsName = 4; for (int i = 0; i < jMessage.at("values").size(); i++) { TypeInfoItem typeInfoItem; - typeInfoItem.max = jMessage.at("values")[i].at(TYPE_INFO_ITEM_MAX); - typeInfoItem.min = jMessage.at("values")[i].at(TYPE_INFO_ITEM_MIN); - typeInfoItem.avg = jMessage.at("values")[i].at(TYPE_INFO_ITEM_AVG); + typeInfoItem.max = jMessage.at("values")[i].at(typeInfoItemMax); + typeInfoItem.min = jMessage.at("values")[i].at(typeInfoItemMin); + typeInfoItem.avg = jMessage.at("values")[i].at(typeInfoItemAvg); ProcessMetricsItems processMetricsItems; processMetricsItems.overallCounters = typeInfoItem; - processMetricsItems.processName = jMessage.at("values")[i].at(PROCESS_METRICES_ITEMS_NAME); + processMetricsItems.processName = jMessage.at("values")[i].at(processMetricesItemsName); memStrategy_.emplace_back(std::move(processMetricsItems)); } return; @@ -79,20 +79,20 @@ void Metrics::InitMemoryStrategy(const std::string &result) void Metrics::InitMemoryUnAggStrategy(const std::string &result) { json jMessage = json::parse(result); - const uint32_t PROCESS_VALUES_ITEM_NAME = 0; - const uint32_t NAMES = 1; - const uint32_t VALUES = 2; - const uint32_t TIMES = 3; + const uint32_t processValuesItemName = 0; + const uint32_t namesIndex = 1; + const uint32_t valuesIndex = 2; + const uint32_t timesIndex = 3; for (int i = 0; i < jMessage.at("values").size(); i++) { ProcessValuesItem processValuesItem; if (jMessage.at("values")[i].at(0).is_null()) { processValuesItem.processName = ""; } else { - processValuesItem.processName = jMessage.at("values")[i].at(PROCESS_VALUES_ITEM_NAME); + processValuesItem.processName = jMessage.at("values")[i].at(processValuesItemName); } - auto names = base::SplitStringToVec(jMessage.at("values")[i].at(NAMES), ","); - auto values = base::SplitStringToVec(jMessage.at("values")[i].at(VALUES), ","); - auto times = base::SplitStringToVec(jMessage.at("values")[i].at(TIMES), ","); + auto names = base::SplitStringToVec(jMessage.at("values")[i].at(namesIndex), ","); + auto values = base::SplitStringToVec(jMessage.at("values")[i].at(valuesIndex), ","); + auto times = base::SplitStringToVec(jMessage.at("values")[i].at(timesIndex), ","); auto oomScoreValue = 0; for (auto index = 0; index < names.size(); index++) { if (names[index] == "oom_score_adj") { @@ -119,20 +119,20 @@ void Metrics::InitMemoryUnAggStrategy(const std::string &result) void Metrics::InitMemoryTaskNameStrategy(const std::string &result) { json jMessage = json::parse(result); - const uint32_t JMESSAGE_VALUE_SIZE_ONE = 1; - const uint32_t JMESSAGE_VALUE_SIZE_TWO = 2; - const uint32_t JMESSAGE_VALUE_SIZE_THREE = 3; + const uint32_t jmessageValueSizeOne = 1; + const uint32_t jmessageValueSizeTwo = 2; + const uint32_t jmessageValueSizeThree = 3; for (int i = 0; i < jMessage.at("values").size(); i++) { TaskProcessItem taskProcessItem; - taskProcessItem.pid = jMessage.at("values")[i].at(JMESSAGE_VALUE_SIZE_ONE); - if (jMessage.at("values")[i].at(JMESSAGE_VALUE_SIZE_TWO).is_null()) { + taskProcessItem.pid = jMessage.at("values")[i].at(jmessageValueSizeOne); + if (jMessage.at("values")[i].at(jmessageValueSizeTwo).is_null()) { taskProcessItem.processName = ""; } else { - taskProcessItem.processName = jMessage.at("values")[i].at(JMESSAGE_VALUE_SIZE_TWO); + taskProcessItem.processName = jMessage.at("values")[i].at(jmessageValueSizeTwo); } - if (!jMessage.at("values")[i].at(JMESSAGE_VALUE_SIZE_THREE).is_null()) { + if (!jMessage.at("values")[i].at(jmessageValueSizeThree).is_null()) { taskProcessItem.threadName = - base::SplitStringToVec(jMessage.at("values")[i].at(JMESSAGE_VALUE_SIZE_THREE), ","); + base::SplitStringToVec(jMessage.at("values")[i].at(jmessageValueSizeThree), ","); } taskNameStrategy_.emplace_back(taskProcessItem); } @@ -141,16 +141,16 @@ void Metrics::InitMemoryTaskNameStrategy(const std::string &result) void Metrics::InitTraceStatsStrategy(const std::string &result) { json jMessage = json::parse(result); - const uint32_t STAT_ITEM_NAME = 0; - const uint32_t STAT_ITEM_COUNT = 2; - const uint32_t STAT_ITEM_SOURCE = 3; - const uint32_t STAT_ITEM_SEVERITY = 4; + const uint32_t statItemName = 0; + const uint32_t statItemCount = 2; + const uint32_t statItemSource = 3; + const uint32_t statItemSeverity = 4; for (int i = 0; i < jMessage.at("values").size(); i++) { StatItem statItem; - statItem.name = jMessage.at("values")[i].at(STAT_ITEM_NAME); - statItem.count = jMessage.at("values")[i].at(STAT_ITEM_COUNT); - statItem.source = jMessage.at("values")[i].at(STAT_ITEM_SOURCE); - statItem.severity = jMessage.at("values")[i].at(STAT_ITEM_SEVERITY); + statItem.name = jMessage.at("values")[i].at(statItemName); + statItem.count = jMessage.at("values")[i].at(statItemCount); + statItem.source = jMessage.at("values")[i].at(statItemSource); + statItem.severity = jMessage.at("values")[i].at(statItemSeverity); statStrategy_.emplace_back(statItem); } return; @@ -158,12 +158,12 @@ void Metrics::InitTraceStatsStrategy(const std::string &result) void Metrics::InitTraceMetaDataStrategy(const std::string &result) { json jMessage = json::parse(result); - const uint32_t TRACE_METADATA_ITEM_NAME = 0; - const uint32_t TRACE_METADATA_ITEM_VALUE = 1; + const uint32_t traceMetaDataItemName = 0; + const uint32_t traceMetaDataItemValue = 1; for (int i = 0; i < jMessage.at("values").size(); i++) { TraceMetadataItem traceMetadataItem; - traceMetadataItem.name = jMessage.at("values")[i].at(TRACE_METADATA_ITEM_NAME); - traceMetadataItem.value = jMessage.at("values")[i].at(TRACE_METADATA_ITEM_VALUE); + traceMetadataItem.name = jMessage.at("values")[i].at(traceMetaDataItemName); + traceMetadataItem.value = jMessage.at("values")[i].at(traceMetaDataItemValue); metaDataStrategy_.emplace_back(traceMetadataItem); } return; diff --git a/trace_streamer/src/metrics/metrics.h b/trace_streamer/src/metrics/metrics.h index 5ef43179d..4e762b701 100644 --- a/trace_streamer/src/metrics/metrics.h +++ b/trace_streamer/src/metrics/metrics.h @@ -38,6 +38,8 @@ enum METRICS_INDEX { METRICS_SYS_CALLS, }; +namespace SysTuning { +namespace TraceStreamer { const std::string TRACE_MEM = "trace_mem"; const std::string TRACE_MEM_TOP_TEN = "trace_mem_top10"; const std::string TRACE_MEM_UNAGG = "trace_mem_unagg"; @@ -72,9 +74,6 @@ const std::string FUNCTION_NAME = "function_name:"; const std::string DUR_MAX = "dur_max:"; const std::string DUR_MIN = "dur_min:"; const std::string DUR_AVG = "dur_avg:"; - -namespace SysTuning { -namespace TraceStreamer { using json = nlohmann::json; class Metrics { public: diff --git a/trace_streamer/src/parser/ebpf_parser/bio_latency_data_parser.cpp b/trace_streamer/src/parser/ebpf_parser/bio_latency_data_parser.cpp index be0e4d354..ccbdd9a8e 100644 --- a/trace_streamer/src/parser/ebpf_parser/bio_latency_data_parser.cpp +++ b/trace_streamer/src/parser/ebpf_parser/bio_latency_data_parser.cpp @@ -99,8 +99,8 @@ void BioLatencyDataParser::ParseBioLatencyEvent() if (pathId != INVALID_UINT64) { tracerEventToStrIndexMap.Erase(ITEM_EVENT_FS, type, itid, startTs); } - traceDataCache_->GetBioLatencySampleData()->AppendNewData( - currentCallId_, type, ipid, itid, newStartTs, newEndTs, duration, prio, size, blkCount, pathId, durPer4K); + GetBioLatencySampleDataRow bioLatencySampleDataRow = {currentCallId_, type, ipid, itid, newStartTs, newEndTs, duration, prio, size, blkCount, pathId, durPer4K}; + traceDataCache_->GetBioLatencySampleData()->AppendNewData(bioLatencySampleDataRow); if (!callIdExistFlag) { ParseCallStackData(userIpsAddr, bioFixedHeadrAddr->nips, bioFixedHeadrAddr->pid, currentCallId_); } diff --git a/trace_streamer/src/parser/ebpf_parser/ebpf_base.cpp b/trace_streamer/src/parser/ebpf_parser/ebpf_base.cpp index bfc8e6743..7ab0ecdcc 100644 --- a/trace_streamer/src/parser/ebpf_parser/ebpf_base.cpp +++ b/trace_streamer/src/parser/ebpf_parser/ebpf_base.cpp @@ -52,8 +52,9 @@ void EbpfBase::ParseCallStackData(const uint64_t *userIpsAddr, uint16_t count, u auto ebpfSymbolInfo = GetEbpfSymbolInfo(pid, userIpsAddr[i]); auto ipIndex = ConvertToHexTextIndex(userIpsAddr[i]); ipStrIndexToIpMap_.insert(std::make_pair(ipIndex, userIpsAddr[i])); - auto row = traceDataCache_->GetEbpfCallStack()->AppendNewData( - callId, depth++, ipIndex, ebpfSymbolInfo.symbolIndex, ebpfSymbolInfo.filePathIndex, ebpfSymbolInfo.vaddr); + EbpfCallStackDataRow ebpfCallStackDataRow = {callId, depth++, ipIndex, ebpfSymbolInfo.symbolIndex, + ebpfSymbolInfo.filePathIndex, ebpfSymbolInfo.vaddr}; + auto row = traceDataCache_->GetEbpfCallStack()->AppendNewData(ebpfCallStackDataRow); if (ebpfSymbolInfo.filePathIndex == INVALID_UINT64) { continue; } diff --git a/trace_streamer/src/parser/ebpf_parser/ebpf_data_reader.cpp b/trace_streamer/src/parser/ebpf_parser/ebpf_data_reader.cpp index b344e75b2..81e8760b7 100644 --- a/trace_streamer/src/parser/ebpf_parser/ebpf_data_reader.cpp +++ b/trace_streamer/src/parser/ebpf_parser/ebpf_data_reader.cpp @@ -181,9 +181,9 @@ void EbpfDataReader::ReadKernelSymAddrMap(const KernelSymbolInfoHeader *elfAddr, maxKernelAddr_ = elfAddr->vaddrEnd; minKernelAddr_ = elfAddr->vaddrStart; for (uint32_t i = 0; i < sysItemSize; i++) { - (void)memset_s(strSymbolName_, MAX_SYMBOL_LENGTH, 0, MAX_SYMBOL_LENGTH); + (void)memset_s(strSymbolName_, maxSymbolLength, 0, maxSymbolLength); auto item = start + i; - if (strncpy_s(strSymbolName_, MAX_SYMBOL_LENGTH, strTab + item->nameOffset, MAX_SYMBOL_LENGTH) < 0) { + if (strncpy_s(strSymbolName_, maxSymbolLength, strTab + item->nameOffset, maxSymbolLength) < 0) { TS_LOGE("get kernel symbol name error"); } AddrDesc desc{item->size, traceDataCache_->dataDict_.GetStringIndex(strSymbolName_)}; diff --git a/trace_streamer/src/parser/ebpf_parser/ebpf_data_reader.h b/trace_streamer/src/parser/ebpf_parser/ebpf_data_reader.h index bca516f81..299b4439f 100644 --- a/trace_streamer/src/parser/ebpf_parser/ebpf_data_reader.h +++ b/trace_streamer/src/parser/ebpf_parser/ebpf_data_reader.h @@ -89,8 +89,8 @@ private: DataIndex name = 0; }; std::map kernelSymbolMap_ = {}; - static const uint32_t MAX_SYMBOL_LENGTH = 256; - char strSymbolName_[MAX_SYMBOL_LENGTH] = {0}; + static const uint32_t maxSymbolLength = 256; + char strSymbolName_[maxSymbolLength] = {0}; }; } // namespace TraceStreamer } // namespace SysTuning diff --git a/trace_streamer/src/parser/ebpf_parser/file_system_data_parser.cpp b/trace_streamer/src/parser/ebpf_parser/file_system_data_parser.cpp index 4dbc45e84..2dd16d884 100644 --- a/trace_streamer/src/parser/ebpf_parser/file_system_data_parser.cpp +++ b/trace_streamer/src/parser/ebpf_parser/file_system_data_parser.cpp @@ -144,9 +144,9 @@ void FileSystemDataParser::ParseFileSystemEvent() uint64_t filePathId = INVALID_UINT64; auto fd = GetFileDescriptor(fsFixedHeadrAddr, type); size_t size = FileWriteOperation(tracerEventToStrIndexMap, fsFixedHeadrAddr, itid, filePathId, type); - traceDataCache_->GetFileSystemSample()->AppendNewData( - currentCallId_, type, ipid, itid, newStartTs, newEndTs, duration, returnValue, errorCode, size, fd, - filePathId, firstArgument, secondArgument, thirdArgument, fourthArgument); + FileSystemSampleRow fileSystemSampleRow = {currentCallId_, type, ipid, itid, newStartTs, newEndTs, duration, returnValue, errorCode, size, fd, + filePathId, firstArgument, secondArgument, thirdArgument, fourthArgument}; + traceDataCache_->GetFileSystemSample()->AppendNewData(fileSystemSampleRow); if (!callIdExistFlag) { ParseCallStackData(userIpsAddr, fsFixedHeadrAddr->nrUserIPs, fsFixedHeadrAddr->pid, currentCallId_); } diff --git a/trace_streamer/src/parser/ebpf_parser/paged_memory_data_parser.cpp b/trace_streamer/src/parser/ebpf_parser/paged_memory_data_parser.cpp index 57c4698ce..88d407ee5 100644 --- a/trace_streamer/src/parser/ebpf_parser/paged_memory_data_parser.cpp +++ b/trace_streamer/src/parser/ebpf_parser/paged_memory_data_parser.cpp @@ -57,9 +57,9 @@ int32_t PagedMemoryDataParser::PagingData(const PagedMemoryFixedHeader *pagedMem auto addr = ConvertToHexTextIndex(pagedMemoryFixedHeadrAddr->addr); auto size = pagedMemoryFixedHeadrAddr->size; - - traceDataCache_->GetPagedMemorySampleData()->AppendNewData(currentCallId_, type, ipid, newStartTs, newEndTs, - duration, size, addr, itid); + PagedMemorySampleDataRow pagedMemorySampleDataRow = {currentCallId_, type, ipid, newStartTs, newEndTs, + duration, size, addr, itid}; + traceDataCache_->GetPagedMemorySampleData()->AppendNewData(pagedMemorySampleDataRow); return 1; } diff --git a/trace_streamer/src/parser/pbreader_parser/disk_io_parser/pbreader_disk_io_parser.cpp b/trace_streamer/src/parser/pbreader_parser/disk_io_parser/pbreader_disk_io_parser.cpp index 9ebc564a8..dbc974dfa 100644 --- a/trace_streamer/src/parser/pbreader_parser/disk_io_parser/pbreader_disk_io_parser.cpp +++ b/trace_streamer/src/parser/pbreader_parser/disk_io_parser/pbreader_disk_io_parser.cpp @@ -60,7 +60,6 @@ void PbreaderDiskIOParser::Finish() for (auto itor = diskIOData_.begin(); itor != diskIOData_.end(); itor++) { DiskIoRow row; row.ts = streamFilters_->clockFilter_->ToPrimaryTraceTime(TS_CLOCK_REALTIME, itor->ts); - // itor->ts = streamFilters_->clockFilter_->ToPrimaryTraceTime(TS_CLOCK_REALTIME, itor->ts); UpdatePluginTimeRange(TS_CLOCK_REALTIME, row.ts, row.ts); if (first) { lastTs = row.ts; diff --git a/trace_streamer/src/parser/pbreader_parser/ffrt_parser/pbreader_ffrt_parser.h b/trace_streamer/src/parser/pbreader_parser/ffrt_parser/pbreader_ffrt_parser.h index 77792c663..7acff1da2 100644 --- a/trace_streamer/src/parser/pbreader_parser/ffrt_parser/pbreader_ffrt_parser.h +++ b/trace_streamer/src/parser/pbreader_parser/ffrt_parser/pbreader_ffrt_parser.h @@ -43,7 +43,8 @@ private: private: HtraceEventParser *eventParser_; ClockId ffrtClockid_ = TS_CLOCK_UNKNOW; - DoubleMap taskNameIndexMap_; + // tid, pid, taskname + DoubleMap taskNameIndexMap_; }; } // namespace TraceStreamer } // namespace SysTuning diff --git a/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.cpp b/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.cpp index a6976d02a..8e70920a2 100644 --- a/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.cpp +++ b/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.cpp @@ -120,10 +120,10 @@ bool FtraceProcessor::HandleHeaderPageFormat(const std::string &formatInfo) int FtraceProcessor::HeaderPageCommitSize(void) { // return the size value (8B on 64bit device, 4B on 32bit device) of commit field read from events/header_page - const uint16_t DEFAULT_SIZE = 8; + const uint16_t defaultSize = 8; if (pageHeaderFormat_.commit.size == 0) { TS_LOGW("haven't header_page infos, set defalut size is 8B"); - pageHeaderFormat_.commit.size = DEFAULT_SIZE; + pageHeaderFormat_.commit.size = defaultSize; } return pageHeaderFormat_.commit.size; } diff --git a/trace_streamer/src/rpc/ffrt_converter.cpp b/trace_streamer/src/rpc/ffrt_converter.cpp index 44e4f84f1..b8e623f4f 100644 --- a/trace_streamer/src/rpc/ffrt_converter.cpp +++ b/trace_streamer/src/rpc/ffrt_converter.cpp @@ -23,22 +23,28 @@ bool FfrtConverter::RecoverTraceAndGenerateNewFile(const std::string &ffrtFileNa TS_LOGE("ffrtFile or outFile is invalid."); return false; } - std::vector lines; std::string line; while (std::getline(ffrtFile, line)) - lines.push_back(std::move(line)); + context_.emplace_back(line); ffrtFile.close(); - CheckTraceMarker(lines); - TypeFfrtPid result = ClassifyLogsForFfrtWorker(lines); - ConvertFfrtThreadToFfrtTask(lines, result); - for (const std::string &lineergodic : lines) { - outFile << lineergodic << std::endl; + InitTracingMarkerKey(); + ClassifyContextForFfrtWorker(); + ConvertFfrtThreadToFfrtTask(); + for (const std::string &oneLine : context_) { + outFile << oneLine << std::endl; } + Clear(); return true; } -void FfrtConverter::CheckTraceMarker(vector &lines) +void FfrtConverter::Clear() { - for (auto line : lines) { + context_.clear(); + ffrtPidMap_.clear(); + taskLabels_.clear(); +} +void FfrtConverter::InitTracingMarkerKey() +{ + for (auto line : context_) { if (line.find(" tracing_mark_write: ") != std::string::npos) { tracingMarkerKey_ = "tracing_mark_write: "; break; @@ -49,22 +55,21 @@ void FfrtConverter::CheckTraceMarker(vector &lines) } } } -int FfrtConverter::ExtractProcessId(const std::string &log) +int FfrtConverter::ExtractProcessId(const size_t index) { std::smatch match; static const std::regex pidPattern = std::regex(R"(\(\s*\d+\) \[)"); - if (std::regex_search(log, match, pidPattern)) { - for (size_t i = 0; i < match.size(); i++) { - if (match[i] == '-') { - return 0; - } - } - auto beginPos = match.str().find('(') + 1; - auto endPos = match.str().find(')'); - return std::stoi(match.str().substr(beginPos, endPos - beginPos)); - } else { + if (!std::regex_search(context_[index], match, pidPattern)) { return 0; } + for (size_t i = 0; i < match.size(); i++) { + if (match[i] == '-') { + return 0; + } + } + auto beginPos = match.str().find('(') + 1; + auto endPos = match.str().find(')'); + return std::stoi(match.str().substr(beginPos, endPos - beginPos)); } std::string FfrtConverter::ExtractTimeStr(const std::string &log) @@ -73,9 +78,8 @@ std::string FfrtConverter::ExtractTimeStr(const std::string &log) static const std::regex timePattern = std::regex(R"( (\d+)\.(\d+):)"); if (std::regex_search(log, match, timePattern)) { return match.str().substr(1, match.str().size() - STR_LEGH); - } else { - return ""; } + return ""; } std::string FfrtConverter::ExtractCpuId(const std::string &log) @@ -86,50 +90,43 @@ std::string FfrtConverter::ExtractCpuId(const std::string &log) auto beginPos = match.str().find('[') + 1; auto endPos = match.str().find(']'); return match.str().substr(beginPos, endPos - beginPos); - } else { - return ""; } + return ""; } std::string FfrtConverter::MakeBeginFakeLog(const std::string &mark, - const int pid, - const std::string &label, const long long gid, - const int tid, - const std::string &threadName, - const int prio) + const int prio, + const ThreadInfo &threadInfo) { auto beginTimeStamp = ExtractTimeStr(mark); auto cpuId = ExtractCpuId(mark); std::unique_ptr result = std::make_unique(MAX_LEN); - auto taskId = GetTaskId(pid, gid); + auto taskId = GetTaskId(threadInfo.pid, gid); (void)sprintf_s( result.get(), MAX_LEN, "\n %s-%d (%7d) [%s] .... %s: sched_switch: prev_comm=%s prev_pid=%d prev_prio=%d prev_state=S ==> " "next_comm=%s next_pid=%s next_prio=%d\n", - threadName.c_str(), tid, pid, cpuId.c_str(), beginTimeStamp.c_str(), threadName.c_str(), tid, prio, - label.c_str(), taskId.c_str(), prio); + threadInfo.name.c_str(), threadInfo.tid, threadInfo.pid, cpuId.c_str(), beginTimeStamp.c_str(), + threadInfo.name.c_str(), threadInfo.tid, prio, taskLabels_[threadInfo.pid][gid].c_str(), taskId.c_str(), prio); return mark + result.get(); } std::string FfrtConverter::MakeEndFakeLog(const std::string &mark, - const int pid, - const std::string &label, const long long gid, - const int tid, - const std::string &threadName, - const int prio) + const int prio, + const ThreadInfo &threadInfo) { auto endTimeStamp = ExtractTimeStr(mark); auto cpuId = ExtractCpuId(mark); std::unique_ptr result = std::make_unique(MAX_LEN); - auto taskId = GetTaskId(pid, gid); + auto taskId = GetTaskId(threadInfo.pid, gid); (void)sprintf_s( result.get(), MAX_LEN, " %s-%s (%7d) [%s] .... %s: sched_switch: prev_comm=%s prev_pid=%s prev_prio=%d prev_state=S ==> " "next_comm=%s next_pid=%d next_prio=%d\n", - label.c_str(), taskId.c_str(), pid, cpuId.c_str(), endTimeStamp.c_str(), label.c_str(), taskId.c_str(), prio, - threadName.c_str(), tid, prio); + taskLabels_[threadInfo.pid][gid].c_str(), taskId.c_str(), threadInfo.pid, cpuId.c_str(), endTimeStamp.c_str(), + taskLabels_[threadInfo.pid][gid].c_str(), taskId.c_str(), prio, threadInfo.name.c_str(), threadInfo.tid, prio); std::string fakeLog = result.get(); memset_s(result.get(), MAX_LEN, 0, MAX_LEN); return fakeLog; @@ -138,7 +135,6 @@ std::string FfrtConverter::MakeEndFakeLog(const std::string &mark, std::string FfrtConverter::ReplaceSchedSwitchLog(std::string &fakeLog, const std::string &mark, const int pid, - const std::string &label, const long long gid, const int tid) { @@ -148,12 +144,12 @@ std::string FfrtConverter::ReplaceSchedSwitchLog(std::string &fakeLog, if (mark.find("prev_pid=" + std::to_string(tid)) != std::string::npos) { if (regex_search(fakeLog, match, indexPattern_)) { auto beginPos = fakeLog.find(match.str()); - (void)sprintf_s(result.get(), MAX_LEN, " %s-%s ", label.c_str(), taskId.c_str()); + (void)sprintf_s(result.get(), MAX_LEN, " %s-%s ", taskLabels_[pid][gid].c_str(), taskId.c_str()); fakeLog = result.get() + fakeLog.substr(beginPos); size_t pcommPos = fakeLog.find("prev_comm="); size_t pPidPos = fakeLog.find("prev_pid="); memset_s(result.get(), MAX_LEN, 0, MAX_LEN); - (void)sprintf_s(result.get(), MAX_LEN, "prev_comm=%s ", label.c_str()); + (void)sprintf_s(result.get(), MAX_LEN, "prev_comm=%s ", taskLabels_[pid][gid].c_str()); fakeLog = fakeLog.substr(0, pcommPos) + result.get() + fakeLog.substr(pPidPos); memset_s(result.get(), MAX_LEN, 0, MAX_LEN); pPidPos = fakeLog.find("prev_pid="); @@ -163,7 +159,7 @@ std::string FfrtConverter::ReplaceSchedSwitchLog(std::string &fakeLog, memset_s(result.get(), MAX_LEN, 0, MAX_LEN); } } else if (mark.find("next_pid=" + std::to_string(tid)) != std::string::npos) { - (void)sprintf_s(result.get(), MAX_LEN, "next_comm=%s ", label.c_str()); + (void)sprintf_s(result.get(), MAX_LEN, "next_comm=%s ", taskLabels_[pid][gid].c_str()); size_t nCommPos = fakeLog.find("next_comm="); size_t nPidPos = fakeLog.find("next_pid="); fakeLog = fakeLog.substr(0, nCommPos) + result.get() + fakeLog.substr(nPidPos); @@ -222,100 +218,84 @@ std::string FfrtConverter::ReplaceTracingMarkLog(std::string &fakeLog, } std::string FfrtConverter::ConvertWorkerLogToTask(const std::string &mark, const int pid, - const std::string &label, const long long gid, const int tid) { std::string fakeLog = mark; if (mark.find("sched_switch: ") != std::string::npos) { - return ReplaceSchedSwitchLog(fakeLog, mark, pid, label, gid, tid); + return ReplaceSchedSwitchLog(fakeLog, mark, pid, gid, tid); } if (mark.find(": sched_wak") != std::string::npos) { - return ReplaceSchedWakeLog(fakeLog, label, pid, gid); + return ReplaceSchedWakeLog(fakeLog, taskLabels_[pid][gid], pid, gid); } if (mark.find("sched_blocked_reason: ") != std::string::npos) { return ReplaceSchedBlockLog(fakeLog, pid, gid); } - return ReplaceTracingMarkLog(fakeLog, label, pid, gid); + return ReplaceTracingMarkLog(fakeLog, taskLabels_[pid][gid], pid, gid); } -int FfrtConverter::FindTid(std::string &log) +int FfrtConverter::FindIntNumberAfterStr(const size_t index, const string &str) { - std::string index = "prev_pid="; - auto beginPos = log.find(index); - auto endPos = log.find_first_of(" ", beginPos); - beginPos = beginPos + index.length(); - auto tid = stoi(log.substr(beginPos, endPos - beginPos)); - return tid; + auto beginPos = context_[index].find(str) + str.length(); + auto endPos = context_[index].find_first_of(" ", beginPos); + return stoi(context_[index].substr(beginPos, endPos - beginPos)); } - -void FfrtConverter::ClassifySchedSwitchLogs(std::string &log, - size_t line, - std::unordered_map> &traceMap, - FfrtConverter::TypeFfrtPid &ffrtPidsMap) +std::string FfrtConverter::FindSubStrAfterStr(const size_t index, const string &str) { - if (log.find("prev_comm=ffrt") != std::string::npos || log.find("prev_comm=OS_FFRT") != std::string::npos) { - auto pid = ExtractProcessId(log); - if (ffrtPidsMap.find(pid) == ffrtPidsMap.end()) { - ffrtPidsMap[pid] = {}; - } - std::string begin = "prev_comm="; - std::string end = " prev_pid="; - auto beginPos = log.find(begin) + begin.length(); - auto endPos = log.find(end); - auto tid = FindTid(log); - if (ffrtPidsMap[pid].find(tid) == ffrtPidsMap[pid].end()) { - ffrtPidsMap[pid][tid].name = log.substr(beginPos, endPos - beginPos); - } - } - auto prevTid = FindTid(log); - if (traceMap.find(prevTid) == traceMap.end()) { + auto beginPos = context_[index].find(str) + str.length(); + auto endPos = context_[index].find_first_of(" ", beginPos); + return context_[index].substr(beginPos, endPos - beginPos); +} +void FfrtConverter::ClassifySchedSwitchData(const size_t index, std::unordered_map> &traceMap) +{ + auto prevTid = FindIntNumberAfterStr(index, "prev_pid="); + auto nextTid = FindIntNumberAfterStr(index, "next_pid="); + // update sched_switch prev_pid and next_pid corresponding line number + if (traceMap.count(prevTid) == 0) { traceMap[prevTid] = std::vector(); } - traceMap[prevTid].push_back(line); - std::string begin = "next_pid="; - auto beginPos = log.find(begin) + begin.length(); - std::string end = " next_prio="; - auto endPos = log.find(end); - auto nextTid = stoi(log.substr(beginPos, endPos - beginPos)); - if (traceMap.find(nextTid) == traceMap.end()) { + if (traceMap.count(nextTid) == 0) { traceMap[nextTid] = std::vector(); } - traceMap[nextTid].push_back(line); + traceMap[prevTid].push_back(index); + traceMap[nextTid].push_back(index); + + // Get thread name as ffrtxxx or OS_FFRTxxx + if (context_[index].find("prev_comm=ffrt") != std::string::npos || + context_[index].find("prev_comm=OS_FFRT") != std::string::npos) { + auto pid = ExtractProcessId(index); + if (ffrtPidMap_.count(pid) == 0 || ffrtPidMap_[pid].count(prevTid) == 0) { + ffrtPidMap_[pid][prevTid].name = FindSubStrAfterStr(index, "prev_comm="); + } + } return; } -void FfrtConverter::FindFfrtProcessAndClassifyLogs(std::string &log, - size_t line, - std::unordered_map> &traceMap, - FfrtConverter::TypeFfrtPid &ffrtPidsMap) +void FfrtConverter::FindFfrtProcessAndClassify(const size_t index, std::unordered_map> &traceMap) { - if (log.find("sched_switch") != std::string::npos) { - ClassifySchedSwitchLogs(log, line, traceMap, ffrtPidsMap); + if (context_[index].find("sched_switch") != std::string::npos) { + ClassifySchedSwitchData(index, traceMap); return; } - if (log.find(": sched_wak") != std::string::npos || (log.find("sched_blocked_reason:") != std::string::npos)) { - std::string begin = "pid="; - auto beginPos = log.find(begin); - auto endPos = log.find_first_of(" ", beginPos); - beginPos = beginPos + begin.length(); - auto tid = stoi(log.substr(beginPos, endPos - beginPos)); + if (context_[index].find(": sched_wak") != std::string::npos || + (context_[index].find("sched_blocked_reason:") != std::string::npos)) { + auto tid = FindIntNumberAfterStr(index, "pid="); if (traceMap.find(tid) == traceMap.end()) { traceMap[tid] = std::vector(); } - traceMap[tid].push_back(line); + traceMap[tid].push_back(index); return; } static std::smatch match; - if (std::regex_search(log, match, matchPattern_)) { - auto endPos = log.find(match.str()); - std::string res = log.substr(0, endPos); + if (std::regex_search(context_[index], match, matchPattern_)) { + auto endPos = context_[index].find(match.str()); + std::string res = context_[index].substr(0, endPos); std::string begin = "-"; auto beginPos = res.find_last_of(begin); beginPos = beginPos + begin.length(); - auto tid = stoi(log.substr(beginPos, endPos - beginPos)); + auto tid = stoi(context_[index].substr(beginPos, endPos - beginPos)); if (traceMap.find(tid) == traceMap.end()) { traceMap[tid] = std::vector(); } - traceMap[tid].push_back(line); + traceMap[tid].push_back(index); } return; } @@ -351,166 +331,150 @@ bool FfrtConverter::IsDigit(const std::string &str) return true; } -FfrtConverter::TypeFfrtPid FfrtConverter::ClassifyLogsForFfrtWorker(vector &results) +void FfrtConverter::ClassifyContextForFfrtWorker() { - TypeFfrtPid ffrtPidMap; std::unordered_map> traceMap; - for (auto line = 0; line < results.size(); line++) { - FindFfrtProcessAndClassifyLogs(results[line], line, traceMap, ffrtPidMap); + for (auto index = 0; index < context_.size(); index++) { + FindFfrtProcessAndClassify(index, traceMap); } - for (auto &[pid, tids] : ffrtPidMap) { - for (const auto &pair : tids) { - auto tid = pair.first; - ffrtPidMap[pid][tid].line = traceMap[tid]; + for (auto &[pid, threads] : ffrtPidMap_) { + for (const auto &thread : threads) { + auto tid = thread.first; + ffrtPidMap_[pid][tid].indices = traceMap[tid]; } } - return ffrtPidMap; } -void FfrtConverter::ConvertFfrtThreadToFfrtTask(vector &results, TypeFfrtPid &ffrtPidsMap) +void FfrtConverter::ConvertFfrtThreadToFfrtTask() { int prio; - std::unordered_map> taskLabels; - for (auto &[pid, tids] : ffrtPidsMap) { - taskLabels[pid] = {}; - for (auto &[tid, info] : ffrtPidsMap[pid]) { - auto &threadName = info.name; + for (auto &[pid, threads] : ffrtPidMap_) { + taskLabels_[pid] = {}; + for (auto &[tid, ffrtContent] : ffrtPidMap_[pid]) { + ThreadInfo threadInfo; + threadInfo.pid = pid; + threadInfo.tid = tid; + threadInfo.name = ffrtContent.name; + // auto &threadName = ffrtContent.name; auto switchInFakeLog = false; auto switchOutFakeLog = false; auto ffbkMarkRemove = false; auto gid = WAKE_EVENT_DEFAULT_VALUE; - for (auto &line : info.line) { - auto mark = results[line]; - ProcessMarkWithSchedSwitch(tid, prio, mark); - if (mark.find("|FFRT") != std::string::npos || mark.find("|H:FFRT") != std::string::npos) { - auto returnValue = - ProcessMarkWithFFRT(results, line, threadName, prio, tid, pid, gid, taskLabels, mark); - if (!returnValue) { + for (auto index : ffrtContent.indices) { + ProcessMarkWithSchedSwitch(tid, prio, index); + if (context_[index].find("|FFRT") != std::string::npos || + context_[index].find("|H:FFRT") != std::string::npos) { + if (!ProcessMarkWithFFRT(index, prio, gid, threadInfo)) { continue; } switchInFakeLog = true; continue; } if (gid != WAKE_EVENT_DEFAULT_VALUE) { - auto returnValue = DeleteRedundance(switchInFakeLog, switchOutFakeLog, mark, line, results); - if (!returnValue) { + if (!DeleteRedundance(switchInFakeLog, switchOutFakeLog, index)) { continue; } static const std::regex EndPattern = std::regex(R"( F\|(\d+)\|[BF]\|(\d+))"); static const std::regex HEndPattern = std::regex(R"( F\|(\d+)\|H:[BF]\s(\d+))"); - if (std::regex_search(mark, EndPattern) || std::regex_search(mark, HEndPattern)) { - results[line] = MakeEndFakeLog(mark, pid, taskLabels[pid][gid], gid, tid, threadName, prio); + if (std::regex_search(context_[index], EndPattern) || + std::regex_search(context_[index], HEndPattern)) { + context_[index] = MakeEndFakeLog(context_[index], gid, prio, threadInfo); gid = WAKE_EVENT_DEFAULT_VALUE; switchOutFakeLog = false; continue; } - auto fakeLog = ConvertWorkerLogToTask(mark, pid, taskLabels[pid][gid], gid, tid); - results[line] = fakeLog; + context_[index] = ConvertWorkerLogToTask(context_[index], pid, gid, tid); continue; } } } } - return; } -void FfrtConverter::ProcessMarkWithSchedSwitch(const int &tid, - int &prio, - const std::string &mark) +void FfrtConverter::ProcessMarkWithSchedSwitch(const int tid, int &prio, const size_t index) { - if (mark.find("sched_switch:") != std::string::npos) { - if (mark.find("prev_pid=" + std::to_string(tid) + " ") != std::string::npos) { + if (context_[index].find("sched_switch:") != std::string::npos) { + if (context_[index].find("prev_pid=" + std::to_string(tid) + " ") != std::string::npos) { static std::string beginPprio = "prev_prio="; - auto beginPos = mark.find(beginPprio); + auto beginPos = context_[index].find(beginPprio); beginPos = beginPos + beginPprio.length(); - auto endPos = mark.find_first_of(" ", beginPos); - prio = stoi(mark.substr(beginPos, endPos - beginPos)); - } else if (mark.find("next_pid=" + std::to_string(tid)) != std::string::npos) { + auto endPos = context_[index].find_first_of(" ", beginPos); + prio = stoi(context_[index].substr(beginPos, endPos - beginPos)); + } else if (context_[index].find("next_pid=" + std::to_string(tid)) != std::string::npos) { static std::string beginNprio = "next_prio="; - auto beginPos = mark.find(beginNprio); + auto beginPos = context_[index].find(beginNprio); beginPos = beginPos + beginNprio.length(); - prio = stoi(mark.substr(beginPos)); + prio = stoi(context_[index].substr(beginPos)); } } } -std::string FfrtConverter::GetLabel(const string &mark) +std::string FfrtConverter::GetLabel(const string &line) { std::string label; - if (mark.find("|H:FFRT") != std::string::npos) { - if (mark.find("H:FFRT::") != std::string::npos) { - auto beginPos = mark.rfind("["); - auto endPos = mark.rfind("]"); - label = mark.substr(beginPos + 1, endPos - beginPos - 1); + if (line.find("|H:FFRT") != std::string::npos) { + if (line.find("H:FFRT::") != std::string::npos) { + auto beginPos = line.rfind("["); + auto endPos = line.rfind("]"); + label = line.substr(beginPos + 1, endPos - beginPos - 1); } else { static std::string indexHFfrt = "|H:FFRT"; - auto beginPos = mark.find(indexHFfrt); + auto beginPos = line.find(indexHFfrt); beginPos = beginPos + indexHFfrt.length(); - auto endPos = mark.find_first_of("|", beginPos); - label = mark.substr(beginPos, endPos - beginPos); + auto endPos = line.find_first_of("|", beginPos); + label = line.substr(beginPos, endPos - beginPos); } } else { - if (mark.find("|FFRT::") != std::string::npos) { - auto beginPos = mark.rfind("["); - auto endPos = mark.rfind("]"); - label = mark.substr(beginPos + 1, endPos - beginPos - 1); + if (line.find("|FFRT::") != std::string::npos) { + auto beginPos = line.rfind("["); + auto endPos = line.rfind("]"); + label = line.substr(beginPos + 1, endPos - beginPos - 1); } else { static std::string indexFfrt = "|FFRT"; - auto beginPos = mark.find(indexFfrt); + auto beginPos = line.find(indexFfrt); beginPos = beginPos + indexFfrt.length(); - auto endPos = mark.find_first_of("|", beginPos); - label = mark.substr(beginPos, endPos - beginPos); + auto endPos = line.find_first_of("|", beginPos); + label = line.substr(beginPos, endPos - beginPos); } } return label; } -bool FfrtConverter::ProcessMarkWithFFRT(vector &results, - const int &line, - const std::string &threadName, - int &prio, - const int &tid, - const int &pid, - int32_t &gid, - std::unordered_map> &taskLabels, - const std::string &mark) +bool FfrtConverter::ProcessMarkWithFFRT(const int index, int &prio, int32_t &gid, const ThreadInfo &threadInfo) { - std::string missLog; - auto label = GetLabel(mark); + auto line = context_[index]; + auto label = GetLabel(line); if (label.find("executor_task") != std::string::npos || label.find("ex_task") != std::string::npos) { return false; } + std::string missLog; if (gid != WAKE_EVENT_DEFAULT_VALUE) { - missLog = MakeEndFakeLog(mark, pid, taskLabels[pid][gid], gid, tid, threadName, prio); - auto timestamp = ExtractTimeStr(mark); - auto cpuId = ExtractCpuId(mark); + missLog = MakeEndFakeLog(line, gid, prio, threadInfo); + auto timestamp = ExtractTimeStr(line); + auto cpuId = ExtractCpuId(line); std::unique_ptr result = std::make_unique(MAX_LEN); - (void)sprintf_s(result.get(), MAX_LEN, " %s-%d (%7d) [%s] .... %s: %sE|%d\n", threadName.c_str(), tid, - pid, cpuId.c_str(), timestamp.c_str(), tracingMarkerKey_.c_str(), pid); + (void)sprintf_s(result.get(), MAX_LEN, " %s-%d (%7d) [%s] .... %s: %sE|%d\n", threadInfo.name.c_str(), + threadInfo.tid, threadInfo.pid, cpuId.c_str(), timestamp.c_str(), tracingMarkerKey_.c_str(), + threadInfo.pid); missLog = missLog + result.get(); memset_s(result.get(), MAX_LEN, 0, MAX_LEN); } - auto beginPos = mark.rfind("|"); - if (beginPos != std::string::npos && IsDigit(mark.substr(beginPos + 1))) { - gid = stoll(mark.substr(beginPos + 1)); - } else { + auto beginPos = line.rfind("|"); + if (beginPos == std::string::npos || !IsDigit(line.substr(beginPos + 1))) { return false; } - if (taskLabels[pid].find(gid) == taskLabels[pid].end()) { - taskLabels[pid][gid] = label; + gid = stoll(line.substr(beginPos + 1)); + if (taskLabels_[threadInfo.pid].count(gid) == 0) { + taskLabels_[threadInfo.pid][gid] = label; } - results[line] = MakeBeginFakeLog(mark, pid, taskLabels[pid][gid], gid, tid, threadName, prio); + context_[index] = MakeBeginFakeLog(line, gid, prio, threadInfo); if (!missLog.empty()) { - results[line] = missLog + results[line]; + context_[index] = missLog + context_[index]; } return true; } -bool FfrtConverter::DeleteRedundance(bool &switchInFakeLog, - bool &switchOutFakeLog, - const std::string &mark, - const int &line, - vector &results) +bool FfrtConverter::DeleteRedundance(bool &switchInFakeLog, bool &switchOutFakeLog, const int index) { static const std::regex CoPattern = std::regex(R"( F\|(\d+)\|Co\|(\d+))"); static const std::regex HCoPattern = std::regex(R"( F\|(\d+)\|H:Co\s(\d+))"); - if (std::regex_search(mark, CoPattern) || std::regex_search(mark, HCoPattern)) { - results[line].clear(); + if (std::regex_search(context_[index], CoPattern) || std::regex_search(context_[index], HCoPattern)) { + context_[index].clear(); if (switchInFakeLog) { switchInFakeLog = false; return false; @@ -519,12 +483,12 @@ bool FfrtConverter::DeleteRedundance(bool &switchInFakeLog, return false; } } - if (switchInFakeLog && (mark.find(tracingMarkerKey_ + "B") != std::string::npos)) { - results[line].clear(); + if (switchInFakeLog && (context_[index].find(tracingMarkerKey_ + "B") != std::string::npos)) { + context_[index].clear(); return false; } - if (switchOutFakeLog && (mark.find(tracingMarkerKey_ + "E") != std::string::npos)) { - results[line].clear(); + if (switchOutFakeLog && (context_[index].find(tracingMarkerKey_ + "E") != std::string::npos)) { + context_[index].clear(); return false; } return true; diff --git a/trace_streamer/src/rpc/ffrt_converter.h b/trace_streamer/src/rpc/ffrt_converter.h index 8fec872cd..7d06d3aee 100644 --- a/trace_streamer/src/rpc/ffrt_converter.h +++ b/trace_streamer/src/rpc/ffrt_converter.h @@ -33,15 +33,20 @@ constexpr int32_t WAKE_EVENT_DEFAULT_VALUE = -1; constexpr int32_t STR_LEGH = 2; constexpr int32_t STR_LEN = 8; constexpr int32_t MAX_LEN = 256; -struct ffrtContent { +struct FfrtContent { std::string name; - std::vector line; + std::vector indices; }; struct WakeEvent { std::string state = "none"; int prevWakLine = WAKE_EVENT_DEFAULT_VALUE; std::string prevWakeLog; }; +struct ThreadInfo { + int pid; + int tid; + std::string name; +}; class FfrtConverter { public: FfrtConverter() = default; @@ -49,57 +54,32 @@ public: bool RecoverTraceAndGenerateNewFile(const std::string &ffrtFileName, std::ofstream &outFile); private: - using TypeFfrtPid = std::unordered_map>; - int ExtractProcessId(const std::string &log); + void Clear(); + using TypeFfrtPid = std::unordered_map>; + int ExtractProcessId(const size_t index); std::string ExtractTimeStr(const std::string &log); std::string ExtractCpuId(const std::string &log); - TypeFfrtPid ClassifyLogsForFfrtWorker(vector &results); - void FindFfrtProcessAndClassifyLogs(std::string &log, - size_t line, - std::unordered_map> &traceMap, - TypeFfrtPid &ffrtPidsMap); - void ClassifySchedSwitchLogs(std::string &log, - size_t line, - std::unordered_map> &traceMap, - FfrtConverter::TypeFfrtPid &ffrtPidsMap); - int FindTid(string &log); + void ClassifyContextForFfrtWorker(); + void FindFfrtProcessAndClassify(const size_t index, std::unordered_map> &traceMap); + void ClassifySchedSwitchData(const size_t index, std::unordered_map> &traceMap); + int FindIntNumberAfterStr(const size_t index, const string &str); + std::string FindSubStrAfterStr(const size_t index, const string &str); std::string GetLabel(const std::string &mark); - void ConvertFfrtThreadToFfrtTask(vector &results, TypeFfrtPid &ffrtPidsMap); - void ProcessMarkWithSchedSwitch(const int &tid, - int &prio, - const std::string &mark); - bool ProcessMarkWithFFRT(vector &results, - const int &line, - const std::string &threadName, - int &prio, - const int &tid, - const int &pid, - int32_t &gid, - std::unordered_map> &taskLabels, - const std::string &mark); - bool DeleteRedundance(bool &switchInFakeLog, - bool &switchOutFakeLog, - const std::string &mark, - const int &line, - vector &results); + void ConvertFfrtThreadToFfrtTask(); + void ProcessMarkWithSchedSwitch(const int tid, int &prio, const size_t index); + bool ProcessMarkWithFFRT(const int index, int &prio, int32_t &gid, const ThreadInfo &threadInfo); + bool DeleteRedundance(bool &switchInFakeLog, bool &switchOutFakeLog, const int index); std::string MakeBeginFakeLog(const std::string &mark, - const int pid, - const std::string &label, const long long gid, - const int tid, - const std::string &threadName, - const int prio); + const int prio, + const ThreadInfo &threadInfo); std::string MakeEndFakeLog(const std::string &mark, - const int pid, - const std::string &label, const long long gid, - const int tid, - const std::string &threadName, - const int prio); + const int prio, + const ThreadInfo &threadInfo); std::string ReplaceSchedSwitchLog(std::string &fakeLog, const std::string &mark, const int pid, - const std::string &label, const long long gid, const int tid); std::string ReplaceSchedWakeLog(std::string &fakeLog, const std::string &label, const int pid, const long long gid); @@ -108,20 +88,19 @@ private: const std::string &label, const int pid, const long long gid); - std::string ConvertWorkerLogToTask(const std::string &mark, - const int pid, - const std::string &label, - const long long gid, - const int tid); + std::string ConvertWorkerLogToTask(const std::string &mark, const int pid, const long long gid, const int tid); std::string GetTaskId(int pid, long long gid); bool IsDigit(const std::string &str); - void CheckTraceMarker(vector &lines); + void InitTracingMarkerKey(); private: const std::regex indexPattern_ = std::regex(R"(\(.+\)\s+\[\d)"); const std::regex matchPattern_ = std::regex(R"( \(.+\)\s+\[\d)"); const int uint32MaxLength_ = 10; std::string tracingMarkerKey_ = "tracing_mark_write: "; + std::vector context_ = {}; + TypeFfrtPid ffrtPidMap_ = {}; + std::unordered_map> taskLabels_ = {}; }; } // namespace TraceStreamer } // namespace SysTuning diff --git a/trace_streamer/src/rpc/rpc_server.cpp b/trace_streamer/src/rpc/rpc_server.cpp index 18558d87c..03721a561 100644 --- a/trace_streamer/src/rpc/rpc_server.cpp +++ b/trace_streamer/src/rpc/rpc_server.cpp @@ -39,7 +39,7 @@ namespace TraceStreamer { uint32_t g_fileLen = 0; FILE *g_importFileFd = nullptr; const size_t PACKET_HEADER_LENGTH = 1024; -const std::string VALUE = "{\"value\":["; +const std::string VALUE_STR = "{\"value\":["; const std::string OFFSET = "{\"offset\":"; const std::string SIZE = ",\"size\":"; const std::string TYPE = ",\"type\":"; @@ -278,13 +278,13 @@ bool RpcServer::SendBytraceSplitFileData(SplitFileCallBack splitFileCallBack, in if (lastPos >= mTraceDataBytrace.size()) { lastPos = mTraceDataBytrace.size() - 1; } - std::string result = VALUE; + std::string result = VALUE_STR; for (size_t index = firstPos; index <= lastPos; index++) { result += OFFSET + std::to_string(mTraceDataBytrace[index].first); result += SIZE + std::to_string(mTraceDataBytrace[index].second); result += "},"; } - if (result != VALUE && !ts_->GetPtreaderParser()->GetPtreaderSplitData().empty()) { + if (result != VALUE_STR && !ts_->GetPtreaderParser()->GetPtreaderSplitData().empty()) { result.pop_back(); result += "]}\r\n"; splitFileCallBack(result, (int32_t)SplitDataDataType::SPLIT_FILE_JSON, isFinish); @@ -300,7 +300,7 @@ bool RpcServer::SendRawtraceSplitFileData(SplitFileCallBack splitFileCallBack, i { const auto &mTraceRawCpuData = ts_->GetRawtraceData()->GetRawtraceCpuData(); const auto &mTraceRawCommData = ts_->GetRawtraceData()->GetRawtraceCommData(); - std::string result = VALUE; + std::string result = VALUE_STR; for (size_t commDataIndex = 0; commDataIndex < mTraceRawCommData.size(); commDataIndex++) { result += OFFSET + std::to_string(mTraceRawCommData.at(commDataIndex).splitDataOffset_); @@ -315,7 +315,7 @@ bool RpcServer::SendRawtraceSplitFileData(SplitFileCallBack splitFileCallBack, i result += TYPE + std::to_string(mTraceRawCpuData.at(cpuDataIndex).splitType_); result += "},"; } - if (result != VALUE && !ts_->GetRawtraceData()->GetRawtraceCommData().empty()) { + if (result != VALUE_STR && !ts_->GetRawtraceData()->GetRawtraceCommData().empty()) { result.pop_back(); result += "]}\r\n"; splitFileCallBack(result, (int32_t)SplitDataDataType::SPLIT_FILE_JSON, isFinish); @@ -374,7 +374,7 @@ bool RpcServer::ParseSplitFileData(const uint8_t *data, void RpcServer::ProcHtraceSplitResult(SplitFileCallBack splitFileCallBack) { uint64_t dataSize = 0; - std::string result = VALUE; + std::string result = VALUE_STR; #ifdef ENABLE_NATIVE_HOOK ts_->GetPbreaderParser()->ClearNativehookData(); #endif @@ -402,7 +402,7 @@ void RpcServer::ProcHtraceSplitResult(SplitFileCallBack splitFileCallBack) #ifdef ENABLE_NATIVE_HOOK ProcHookCommSplitResult(splitFileCallBack); #endif - if (result != VALUE && !ts_->GetPbreaderParser()->GetPbreaderSplitData().empty()) { + if (result != VALUE_STR && !ts_->GetPbreaderParser()->GetPbreaderSplitData().empty()) { result.pop_back(); result += "]}\r\n"; splitFileCallBack(result, (int32_t)SplitDataDataType::SPLIT_FILE_JSON, 0); @@ -438,24 +438,24 @@ void RpcServer::ProcHookCommSplitResult(SplitFileCallBack splitFileCallBack) void RpcServer::ProcEbpfSplitResult(SplitFileCallBack splitFileCallBack, bool isLast) { auto ebpfSplitResult = ts_->GetPbreaderParser()->GetEbpfDataParser()->GetEbpfSplitResult(); - std::string result = VALUE; + std::string result = VALUE_STR; for (auto ebpfIter = ebpfSplitResult.begin(); ebpfIter != ebpfSplitResult.end(); ++ebpfIter) { if (ebpfIter->type == (int32_t)SplitDataDataType::SPLIT_FILE_JSON) { result += OFFSET + std::to_string(ebpfIter->originSeg.offset); result += SIZE + std::to_string(ebpfIter->originSeg.size); result += "},"; } else { - if (result != VALUE) { + if (result != VALUE_STR) { result.pop_back(); result += "]}\r\n"; splitFileCallBack(result, (int32_t)SplitDataDataType::SPLIT_FILE_JSON, 0); - result = VALUE; + result = VALUE_STR; } std::string buffer(reinterpret_cast(ebpfIter->buffer.address), ebpfIter->buffer.size); splitFileCallBack(buffer, (int32_t)SplitDataDataType::SPLIT_FILE_DATA, 0); } } - if (result != VALUE) { + if (result != VALUE_STR) { result.pop_back(); result += "]}\r\n"; splitFileCallBack(result, (int32_t)SplitDataDataType::SPLIT_FILE_JSON, 0); @@ -466,25 +466,25 @@ void RpcServer::ProcEbpfSplitResult(SplitFileCallBack splitFileCallBack, bool is void RpcServer::ProcPerfSplitResult(SplitFileCallBack splitFileCallBack, bool isLast) { auto perfSplitResult = ts_->GetPbreaderParser()->GetPerfSplitResult(); - std::string result = VALUE; + std::string result = VALUE_STR; for (auto perfIter = perfSplitResult.begin(); perfIter != perfSplitResult.end(); ++perfIter) { if (perfIter->type == (int32_t)SplitDataDataType::SPLIT_FILE_JSON) { result += OFFSET + std::to_string(perfIter->originSeg.offset); result += SIZE + std::to_string(perfIter->originSeg.size); result += "},"; } else { - if (result != VALUE) { + if (result != VALUE_STR) { result.pop_back(); result += "]}\r\n"; splitFileCallBack(result, (int32_t)SplitDataDataType::SPLIT_FILE_JSON, 0); - result = VALUE; + result = VALUE_STR; } std::string buffer(reinterpret_cast(perfIter->buffer.address), perfIter->buffer.size); splitFileCallBack(buffer, (int32_t)SplitDataDataType::SPLIT_FILE_DATA, 0); } } - if (result != VALUE) { + if (result != VALUE_STR) { result.pop_back(); result += "]}\r\n"; splitFileCallBack(result, (int32_t)SplitDataDataType::SPLIT_FILE_JSON, 0); @@ -506,12 +506,12 @@ int32_t RpcServer::TraceStreamerInitThirdPartyConfig(const uint8_t *data, int32_ std::string thirdPartyConfig = reinterpret_cast(data); TS_LOGI("thirdPartyConfig = %s", thirdPartyConfig.c_str()); std::vector comPonentStr = SplitStringToVec(thirdPartyConfig, ";"); - const int32_t EVENT_COUNT_PAIR = 2; - if (comPonentStr.size() % EVENT_COUNT_PAIR != 0) { + const int32_t eventCountPair = 2; + if (comPonentStr.size() % eventCountPair != 0) { TS_LOGI("thirdPartyConfig is wrong!"); return -1; } - for (int32_t m = 0; m < comPonentStr.size(); m += EVENT_COUNT_PAIR) { + for (int32_t m = 0; m < comPonentStr.size(); m += eventCountPair) { int32_t componentId = std::stoi(comPonentStr.at(m)); std::string componentName = comPonentStr.at(m + 1); TS_LOGI("comPonentStr[m] = %d, comPonentStr[m + 1] = %s", componentId, componentName.c_str()); diff --git a/trace_streamer/src/table/ftrace/process_table.cpp b/trace_streamer/src/table/ftrace/process_table.cpp index ff0c2b0f6..48a4a65af 100644 --- a/trace_streamer/src/table/ftrace/process_table.cpp +++ b/trace_streamer/src/table/ftrace/process_table.cpp @@ -17,18 +17,7 @@ namespace SysTuning { namespace TraceStreamer { -enum class Index : int32_t { - ID = 0, - IPID, - PID, - NAME, - START_TS, - SWTICH_COUNT, - SWITCH_COUNT, - THREAD_COUNT, - SLICE_COUNT, - MEM_COUNT -}; +enum class Index : int32_t { ID = 0, IPID, PID, NAME, START_TS, SWITCH_COUNT, THREAD_COUNT, SLICE_COUNT, MEM_COUNT }; ProcessTable::ProcessTable(const TraceDataCache *dataCache) : TableBase(dataCache) { tableColumn_.push_back(TableBase::ColumnInfo("id", "INTEGER")); diff --git a/trace_streamer/src/trace_data/sqllite_prepar_cache_data.h b/trace_streamer/src/trace_data/sqllite_prepar_cache_data.h index cb7326dd2..801409cc4 100644 --- a/trace_streamer/src/trace_data/sqllite_prepar_cache_data.h +++ b/trace_streamer/src/trace_data/sqllite_prepar_cache_data.h @@ -34,7 +34,7 @@ public: SqllitePreparCacheData(const SqllitePreparCacheData &) = delete; SqllitePreparCacheData &operator=(const SqllitePreparCacheData &) = delete; std::map sphQueryFuncMap_; - static const uint8_t TYPE_SIZE = sizeof(uint32_t); + static const uint8_t typeSize_ = sizeof(uint32_t); private: void FillAndSendCpuDataProto(sqlite3_stmt *stmt, uint32_t type, TLVResultCallBack tLVResultCallBack); diff --git a/trace_streamer/src/trace_data/trace_data_db.cpp b/trace_streamer/src/trace_data/trace_data_db.cpp index f0bfaf037..fbb521dd9 100644 --- a/trace_streamer/src/trace_data/trace_data_db.cpp +++ b/trace_streamer/src/trace_data/trace_data_db.cpp @@ -414,10 +414,10 @@ int32_t TraceDataDB::OperateDatabase(const std::string &sql) int32_t TraceDataDB::SearchDatabaseToProto(const std::string &data, SqllitePreparCacheData::TLVResultCallBack resultCallBack) { - TS_CHECK_TRUE(data.size() > SqllitePreparCacheData::TYPE_SIZE && resultCallBack != nullptr, 1, + TS_CHECK_TRUE(data.size() > SqllitePreparCacheData::typeSize_ && resultCallBack != nullptr, 1, "data.size(%zu) <= sizeof(uint32_t) or resultCallBack is nullptr", data.size()); uint32_t type = INVALID_UINT32; - auto sqlItor = data.begin() + SqllitePreparCacheData::TYPE_SIZE; + auto sqlItor = data.begin() + SqllitePreparCacheData::typeSize_; std::copy(data.begin(), sqlItor, reinterpret_cast(&type)); std::string sql(sqlItor, data.end()); TS_LOGI("type(%u), sql(%s)", type, sql.data()); diff --git a/trace_streamer/src/trace_data/trace_stdtype/common_stdtype.cpp b/trace_streamer/src/trace_data/trace_stdtype/common_stdtype.cpp index a6348cdc0..db3f45947 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/common_stdtype.cpp +++ b/trace_streamer/src/trace_data/trace_stdtype/common_stdtype.cpp @@ -108,7 +108,7 @@ void DataDict::Finish() while ((pos = dataDict_[i].find("\"")) != std::string::npos) { dataDict_[i].replace(pos, 1, "\'"); } - while (!dataDict_[i].empty() && ((dataDict_[i].back() >= SPASCII_START && dataDict_[i].back() <= SPASCII_END) || + while (!dataDict_[i].empty() && ((dataDict_[i].back() >= spasciiStart_ && dataDict_[i].back() <= spasciiEnd_) || dataDict_[i].back() == '\r')) { dataDict_[i].pop_back(); } diff --git a/trace_streamer/src/trace_data/trace_stdtype/common_stdtype.h b/trace_streamer/src/trace_data/trace_stdtype/common_stdtype.h index cf1fe50c9..e95f96a2d 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/common_stdtype.h +++ b/trace_streamer/src/trace_data/trace_stdtype/common_stdtype.h @@ -80,8 +80,8 @@ public: private: std::hash hashFun; std::mutex mutex_; - const int8_t SPASCII_START = 0; - const int8_t SPASCII_END = 32; + const int8_t spasciiStart_ = 0; + const int8_t spasciiEnd_ = 32; }; class MetaData { diff --git a/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.cpp b/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.cpp index fd47cb78d..b3b74c40f 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.cpp +++ b/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.cpp @@ -16,20 +16,15 @@ namespace SysTuning { namespace TraceStdtype { -size_t PerfCallChain::AppendNewPerfCallChain(uint32_t callChainId, - uint32_t depth, - uint64_t ip, - uint64_t vaddrInFile, - uint64_t fileId, - uint64_t symbolId) +size_t PerfCallChain::AppendNewPerfCallChain(const PerfCallChainRow &context) { ids_.emplace_back(Size()); - callChainIds_.emplace_back(callChainId); - depths_.emplace_back(depth); - ips_.emplace_back(ip); - vaddrInFiles_.emplace_back(vaddrInFile); - fileIds_.emplace_back(fileId); - symbolIds_.emplace_back(symbolId); + callChainIds_.emplace_back(context.callChainId); + depths_.emplace_back(context.depth); + ips_.emplace_back(context.ip); + vaddrInFiles_.emplace_back(context.vaddrInFile); + fileIds_.emplace_back(context.fileId); + symbolIds_.emplace_back(context.symbolId); names_.emplace_back(INVALID_UINT64); return Size() - 1; } diff --git a/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.h b/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.h index 2709eadf1..d55417541 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.h +++ b/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.h @@ -19,14 +19,21 @@ namespace SysTuning { namespace TraceStdtype { + +struct PerfCallChainRow +{ + /* data */ + uint32_t callChainId = INVALID_UINT32; + uint32_t depth = INVALID_UINT32; + uint64_t ip = INVALID_UINT64; + uint64_t vaddrInFile = INVALID_UINT64; + uint64_t fileId = INVALID_UINT64; + uint64_t symbolId = INVALID_UINT64; +}; + class PerfCallChain : public CacheBase { public: - size_t AppendNewPerfCallChain(uint32_t callChainId, - uint32_t depth, - uint64_t ip, - uint64_t vaddrInFile, - uint64_t fileId, - uint64_t symbolId); + size_t AppendNewPerfCallChain(const PerfCallChainRow &context); const std::deque &CallChainIds() const; const std::deque &Depths() const; const std::deque &Ips() const; diff --git a/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.cpp b/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.cpp index e7fead522..6e0c38180 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.cpp +++ b/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.cpp @@ -32,21 +32,15 @@ const std::deque &HiSysEventSubkeys::SysEventSubkeyId() const return subkeyNameIds_; } -void HiSysEventMeasureData::AppendData(uint64_t serial, - uint64_t ts, - uint32_t nameId, - uint32_t keyId, - int32_t type, - double numericValue, - DataIndex stringValue) -{ - serial_.emplace_back(serial); - ts_.emplace_back(ts); - nameFilterIds_.emplace_back(nameId); - appKeyFilterIds_.emplace_back(keyId); - types_.emplace_back(type); - numValues_.emplace_back(numericValue); - stringValues_.emplace_back(stringValue); +void HiSysEventMeasureData::AppendData(const HiSysEventMeasureDataRow &context) +{ + serial_.emplace_back(context.serial); + ts_.emplace_back(context.ts); + nameFilterIds_.emplace_back(context.nameId); + appKeyFilterIds_.emplace_back(context.keyId); + types_.emplace_back(context.type); + numValues_.emplace_back(context.numericValue); + stringValues_.emplace_back(context.stringValue); ids_.emplace_back(rowCount_); rowCount_++; } @@ -78,47 +72,28 @@ const std::deque &HiSysEventMeasureData::StringValue() const { return stringValues_; } -void HiSysEventDeviceStateData::AppendNewData(int32_t brightness, - int32_t btState, - int32_t location, - int32_t wifi, - int32_t streamDefault, - int32_t voiceCall, - int32_t music, - int32_t streamRing, - int32_t media, - int32_t voiceAssistant, - int32_t system, - int32_t alarm, - int32_t notification, - int32_t btSco, - int32_t enforcedAudible, - int32_t streamDtmf, - int32_t streamTts, - int32_t accessibility, - int32_t recording, - int32_t streamAll) -{ - brightness_.emplace_back(brightness); - btStates_.emplace_back(btState); - locations_.emplace_back(location); - wifis_.emplace_back(wifi); - streamDefaults_.emplace_back(streamDefault); - voiceCalls_.emplace_back(voiceCall); - musics_.emplace_back(music); - streamRings_.emplace_back(streamRing); - medias_.emplace_back(media); - voiceAssistants_.emplace_back(voiceAssistant); - systems_.emplace_back(system); - alarms_.emplace_back(alarm); - notifications_.emplace_back(notification); - btScos_.emplace_back(btSco); - enforcedAudibles_.emplace_back(enforcedAudible); - streamDtmfs_.emplace_back(streamDtmf); - streamTts_.emplace_back(streamTts); - accessibilitys_.emplace_back(accessibility); - recordings_.emplace_back(recording); - streamAlls_.emplace_back(streamAll); +void HiSysEventDeviceStateData::AppendNewData(const HiSysEventDeviceStateDataRow &context) +{ + brightness_.emplace_back(context.brightness); + btStates_.emplace_back(context.btState); + locations_.emplace_back(context.location); + wifis_.emplace_back(context.wifi); + streamDefaults_.emplace_back(context.streamDefault); + voiceCalls_.emplace_back(context.voiceCall); + musics_.emplace_back(context.music); + streamRings_.emplace_back(context.streamRing); + medias_.emplace_back(context.media); + voiceAssistants_.emplace_back(context.voiceAssistant); + systems_.emplace_back(context.system); + alarms_.emplace_back(context.alarm); + notifications_.emplace_back(context.notification); + btScos_.emplace_back(context.btSco); + enforcedAudibles_.emplace_back(context.enforcedAudible); + streamDtmfs_.emplace_back(context.streamDtmf); + streamTts_.emplace_back(context.streamTts); + accessibilitys_.emplace_back(context.accessibility); + recordings_.emplace_back(context.recording); + streamAlls_.emplace_back(context.streamAll); ids_.emplace_back(rowCounts_); rowCounts_++; } diff --git a/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.h b/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.h index 2fc6f61ce..5c05a4503 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.h +++ b/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.h @@ -35,15 +35,22 @@ private: std::deque sysEventNameIds_ = {}; std::deque subkeyNameIds_ = {}; }; + +struct HiSysEventMeasureDataRow +{ + /* data */ + uint64_t serial = INVALID_UINT64; + uint64_t ts = INVALID_UINT64; + uint32_t nameId = INVALID_UINT32; + uint32_t keyId = INVALID_UINT32; + int32_t type = INVALID_UINT32; + double numericValue; + DataIndex stringValue = INVALID_DATAINDEX; +}; + class HiSysEventMeasureData : public CacheBase { public: - void AppendData(uint64_t serial, - uint64_t ts, - uint32_t nameId, - uint32_t keyId, - int32_t type, - double numericValue, - DataIndex stringValue); + void AppendData(const HiSysEventMeasureDataRow &context); const std::deque &Serial() const; const std::deque &Ts() const; const std::deque &NameFilterId() const; @@ -74,28 +81,34 @@ private: uint32_t rowCount_ = 0; }; +struct HiSysEventDeviceStateDataRow +{ + /* data */ + int32_t brightness = INVALID_UINT32; + int32_t btState = INVALID_UINT32; + int32_t location = INVALID_UINT32; + int32_t wifi = INVALID_UINT32; + int32_t streamDefault = INVALID_UINT32; + int32_t voiceCall = INVALID_UINT32; + int32_t music = INVALID_UINT32; + int32_t streamRing = INVALID_UINT32; + int32_t media = INVALID_UINT32; + int32_t voiceAssistant = INVALID_UINT32; + int32_t system = INVALID_UINT32; + int32_t alarm = INVALID_UINT32; + int32_t notification = INVALID_UINT32; + int32_t btSco = INVALID_UINT32; + int32_t enforcedAudible = INVALID_UINT32; + int32_t streamDtmf = INVALID_UINT32; + int32_t streamTts = INVALID_UINT32; + int32_t accessibility = INVALID_UINT32; + int32_t recording = INVALID_UINT32; + int32_t streamAll = INVALID_UINT32; +}; + class HiSysEventDeviceStateData : public CacheBase { public: - void AppendNewData(int32_t brightness, - int32_t btState, - int32_t location, - int32_t wifi, - int32_t streamDefault, - int32_t voiceCall, - int32_t music, - int32_t streamRing, - int32_t media, - int32_t voiceAssistant, - int32_t system, - int32_t alarm, - int32_t notification, - int32_t btSco, - int32_t enforcedAudible, - int32_t streamDtmf, - int32_t streamTts, - int32_t accessibility, - int32_t recording, - int32_t streamAll); + void AppendNewData(const HiSysEventDeviceStateDataRow &context); const std::deque &Brightness() const; const std::deque &BtState() const; const std::deque &Location() const; diff --git a/trace_streamer/src/trace_data/trace_stdtype/htrace/ebpf_stdtype.cpp b/trace_streamer/src/trace_data/trace_stdtype/htrace/ebpf_stdtype.cpp index 4a7dcb828..0e94f15b5 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/htrace/ebpf_stdtype.cpp +++ b/trace_streamer/src/trace_data/trace_stdtype/htrace/ebpf_stdtype.cpp @@ -16,39 +16,24 @@ namespace SysTuning { namespace TraceStdtype { -size_t FileSystemSample::AppendNewData(uint32_t callChainId, - uint16_t type, - uint32_t iPid, - uint32_t iTid, - uint64_t startTs, - uint64_t endTs, - uint64_t dur, - DataIndex retValue, - DataIndex errCode, - size_t size, - int32_t fd, - DataIndex fileId, - DataIndex firstArgument, - DataIndex secondArgument, - DataIndex thirdArgument, - DataIndex fourthArgument) -{ - callChainIds_.emplace_back(callChainId); - types_.emplace_back(type); - ipids_.emplace_back(iPid); - itids_.emplace_back(iTid); - startTs_.emplace_back(startTs); - endTs_.emplace_back(endTs); - durs_.emplace_back(dur); - returnValues_.emplace_back(retValue); - errorCodes_.emplace_back(errCode); - fds_.emplace_back(fd); - fileIds_.emplace_back(fileId); - Sizes_.emplace_back(size); - firstArguments_.emplace_back(firstArgument); - secondArguments_.emplace_back(secondArgument); - thirdArguments_.emplace_back(thirdArgument); - fourthArguments_.emplace_back(fourthArgument); +size_t FileSystemSample::AppendNewData(const FileSystemSampleRow &context) +{ + callChainIds_.emplace_back(context.callChainId); + types_.emplace_back(context.type); + ipids_.emplace_back(context.ipid); + itids_.emplace_back(context.itid); + startTs_.emplace_back(context.startTs); + endTs_.emplace_back(context.endTs); + durs_.emplace_back(context.dur); + returnValues_.emplace_back(context.returnValue); + errorCodes_.emplace_back(context.errorCode); + fds_.emplace_back(context.fd); + fileIds_.emplace_back(context.fileId); + Sizes_.emplace_back(context.size); + firstArguments_.emplace_back(context.firstArgument); + secondArguments_.emplace_back(context.secondArgument); + thirdArguments_.emplace_back(context.thirdArgument); + fourthArguments_.emplace_back(context.fourthArgument); ids_.emplace_back(Size()); return Size() - 1; } @@ -117,25 +102,17 @@ const std::deque &FileSystemSample::FourthArguments() const return fourthArguments_; } -size_t PagedMemorySampleData::AppendNewData(uint32_t callChainId, - uint16_t type, - uint32_t ipid, - uint64_t startTs, - uint64_t endTs, - uint64_t dur, - size_t size, - DataIndex addr, - uint32_t itid) -{ - callChainIds_.emplace_back(callChainId); - types_.emplace_back(type); - ipids_.emplace_back(ipid); - startTs_.emplace_back(startTs); - endTs_.emplace_back(endTs); - durs_.emplace_back(dur); - Sizes_.emplace_back(size); - addrs_.emplace_back(addr); - itids_.emplace_back(itid); +size_t PagedMemorySampleData::AppendNewData(const PagedMemorySampleDataRow &context) +{ + callChainIds_.emplace_back(context.callChainId); + types_.emplace_back(context.type); + ipids_.emplace_back(context.ipid); + startTs_.emplace_back(context.startTs); + endTs_.emplace_back(context.endTs); + durs_.emplace_back(context.dur); + Sizes_.emplace_back(context.size); + addrs_.emplace_back(context.addr); + itids_.emplace_back(context.itid); ids_.emplace_back(Size()); return Size() - 1; } @@ -176,31 +153,20 @@ const std::deque &PagedMemorySampleData::Addr() const return addrs_; } -void BioLatencySampleData::AppendNewData(uint32_t callChainId, - uint64_t type, - uint32_t ipid, - uint32_t itid, - uint64_t startTs, - uint64_t endTs, - uint64_t latencyDur, - uint32_t tier, - uint64_t size, - uint64_t blockNumber, - uint64_t filePathId, - uint64_t durPer4k) -{ - callChainIds_.emplace_back(callChainId); - types_.emplace_back(type); - ipids_.emplace_back(ipid); - itids_.emplace_back(itid); - startTs_.emplace_back(startTs); - endTs_.emplace_back(endTs); - latencyDurs_.emplace_back(latencyDur); - tiers_.emplace_back(tier); - sizes_.emplace_back(size); - blockNumbers_.emplace_back(blockNumber); - filePathIds_.emplace_back(filePathId); - durPer4ks_.emplace_back(durPer4k); +void BioLatencySampleData::AppendNewData(const BioLatencySampleDataRow &context) +{ + callChainIds_.emplace_back(context.callChainId); + types_.emplace_back(context.type); + ipids_.emplace_back(context.ipid); + itids_.emplace_back(context.itid); + startTs_.emplace_back(context.startTs); + endTs_.emplace_back(context.endTs); + latencyDurs_.emplace_back(context.latencyDur); + tiers_.emplace_back(context.tier); + sizes_.emplace_back(context.size); + blockNumbers_.emplace_back(context.blockNumber); + filePathIds_.emplace_back(context.filePathId); + durPer4ks_.emplace_back(context.durPer4k); ids_.emplace_back(rowCount_); rowCount_++; } @@ -253,19 +219,14 @@ const std::deque &BioLatencySampleData::DurPer4k() const return durPer4ks_; } -size_t EbpfCallStackData::AppendNewData(uint32_t callChainId, - uint32_t depth, - DataIndex ip, - DataIndex symbolId, - DataIndex filePathId, - uint64_t vaddr) -{ - callChainIds_.emplace_back(callChainId); - depths_.emplace_back(depth); - ips_.emplace_back(ip); - symbolIds_.emplace_back(symbolId); - filePathIds_.emplace_back(filePathId); - vaddrs_.emplace_back(vaddr); +size_t EbpfCallStackData::AppendNewData(const EbpfCallStackDataRow &context) +{ + callChainIds_.emplace_back(context.callChainId); + depths_.emplace_back(context.depth); + ips_.emplace_back(context.ip); + symbolIds_.emplace_back(context.symbolId); + filePathIds_.emplace_back(context.filePathId); + vaddrs_.emplace_back(context.vaddr); ids_.emplace_back(Size()); return Size() - 1; } diff --git a/trace_streamer/src/trace_data/trace_stdtype/htrace/ebpf_stdtype.h b/trace_streamer/src/trace_data/trace_stdtype/htrace/ebpf_stdtype.h index 999c40bbe..dd81e5376 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/htrace/ebpf_stdtype.h +++ b/trace_streamer/src/trace_data/trace_stdtype/htrace/ebpf_stdtype.h @@ -19,24 +19,31 @@ namespace SysTuning { namespace TraceStdtype { + +struct FileSystemSampleRow +{ + /* data */ + uint32_t callChainId = INVALID_UINT32; + uint16_t type = INVALID_UINT16; + uint32_t ipid = INVALID_UINT32; + uint32_t itid = INVALID_UINT32; + uint64_t startTs = INVALID_UINT64; + uint64_t endTs = INVALID_UINT64; + uint64_t dur = INVALID_UINT64; + DataIndex returnValue = INVALID_DATAINDEX; + DataIndex errorCode = INVALID_DATAINDEX; + size_t size; + int32_t fd = INVALID_UINT32; + DataIndex fileId = INVALID_DATAINDEX; + DataIndex firstArgument = INVALID_DATAINDEX; + DataIndex secondArgument = INVALID_DATAINDEX; + DataIndex thirdArgument = INVALID_DATAINDEX; + DataIndex fourthArgument = INVALID_DATAINDEX; +}; + class FileSystemSample : public CacheBase { public: - size_t AppendNewData(uint32_t callChainId, - uint16_t type, - uint32_t ipid, - uint32_t itid, - uint64_t startTs, - uint64_t endTs, - uint64_t dur, - DataIndex returnValue, - DataIndex errorCode, - size_t size, - int32_t fd, - DataIndex fileId, - DataIndex firstArgument, - DataIndex secondArgument, - DataIndex thirdArgument, - DataIndex fourthArgument); + size_t AppendNewData(const FileSystemSampleRow &context); const std::deque &CallChainIds() const; const std::deque &Types() const; const std::deque &Ipids() const; @@ -92,17 +99,23 @@ private: std::deque fourthArguments_ = {}; }; +struct PagedMemorySampleDataRow +{ + /* data */ + uint32_t callChainId = INVALID_UINT32; + uint16_t type = INVALID_UINT16; + uint32_t ipid = INVALID_UINT32; + uint64_t startTs = INVALID_UINT64; + uint64_t endTs = INVALID_UINT64; + uint64_t dur = INVALID_UINT64; + size_t size; + DataIndex addr = INVALID_DATAINDEX; + uint32_t itid = INVALID_UINT32; +}; + class PagedMemorySampleData : public CacheBase { public: - size_t AppendNewData(uint32_t callChainId, - uint16_t type, - uint32_t ipid, - uint64_t startTs, - uint64_t endTs, - uint64_t dur, - size_t size, - DataIndex addr, - uint32_t itid); + size_t AppendNewData(const PagedMemorySampleDataRow &context); const std::deque &CallChainIds() const; const std::deque &Types() const; const std::deque &Ipids() const; @@ -137,20 +150,27 @@ private: std::deque addrs_ = {}; std::deque itids_ = {}; }; + +struct BioLatencySampleDataRow +{ + /* data */ + uint32_t callChainId = INVALID_UINT32; + uint64_t type = INVALID_UINT64; + uint32_t ipid = INVALID_UINT32; + uint32_t itid = INVALID_UINT32; + uint64_t startTs = INVALID_UINT64; + uint64_t endTs = INVALID_UINT64; + uint64_t latencyDur = INVALID_UINT64; + uint32_t tier = INVALID_UINT32; + uint64_t size = INVALID_UINT64; + uint64_t blockNumber = INVALID_UINT64; + uint64_t filePathId = INVALID_UINT64; + uint64_t durPer4k = INVALID_UINT64; +}; + class BioLatencySampleData : public CacheBase { public: - void AppendNewData(uint32_t callChainId, - uint64_t type, - uint32_t ipid, - uint32_t itid, - uint64_t startTs, - uint64_t endTs, - uint64_t latencyDur, - uint32_t tier, - uint64_t size, - uint64_t blockNumber, - uint64_t filePathId, - uint64_t durPer4k); + void AppendNewData(const BioLatencySampleDataRow &context); const std::deque &CallChainIds() const; const std::deque &Types() const; const std::deque &Ipids() const; @@ -195,14 +215,21 @@ private: std::deque durPer4ks_ = {}; uint32_t rowCount_ = 0; }; + +struct EbpfCallStackDataRow +{ + /* data */ + uint32_t callChainId = INVALID_UINT32; + uint32_t depth = INVALID_UINT32; + DataIndex ip = INVALID_DATAINDEX; + DataIndex symbolId = INVALID_DATAINDEX; + DataIndex filePathId = INVALID_DATAINDEX; + uint64_t vaddr = INVALID_UINT64; +}; + class EbpfCallStackData : public CacheBase { public: - size_t AppendNewData(uint32_t callChainId, - uint32_t depth, - DataIndex ip, - DataIndex symbolId, - DataIndex filePathId, - uint64_t vaddr); + size_t AppendNewData(const EbpfCallStackDataRow &context); void UpdateEbpfSymbolInfo(size_t row, DataIndex symbolId); const std::deque &CallChainIds() const; const std::deque &Depths() const; diff --git a/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.cpp b/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.cpp index d35b97163..c85693db6 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.cpp +++ b/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.cpp @@ -70,35 +70,26 @@ void NativeHookSampleBase::UpdateLastCallerPathAndSymbolIndexs( } } } -size_t NativeHook::AppendNewNativeHookData(uint32_t callChainId, - uint32_t ipid, - uint32_t itid, - std::string eventType, - DataIndex subType, - uint64_t timeStamp, - uint64_t endTimeStamp, - uint64_t duration, - uint64_t addr, - int64_t memSize) -{ - AppendNativeHookSampleBase(callChainId, ipid, itid, timeStamp); - eventTypes_.emplace_back(eventType); - subTypes_.emplace_back(subType); - endTimeStamps_.emplace_back(endTimeStamp); - durations_.emplace_back(duration); - addrs_.emplace_back(addr); - memSizes_.emplace_back(memSize); - if (eventType == ALLOC_EVET) { - countHeapSizes_ += memSize; +size_t NativeHook::AppendNewNativeHookData(const NativeHookRow &context) +{ + AppendNativeHookSampleBase(context.callChainId, context.ipid, context.itid, context.timeStamp); + eventTypes_.emplace_back(context.eventType); + subTypes_.emplace_back(context.subType); + endTimeStamps_.emplace_back(context.endTimeStamp); + durations_.emplace_back(context.duration); + addrs_.emplace_back(context.addr); + memSizes_.emplace_back(context.memSize); + if (context.eventType == ALLOC_EVET) { + countHeapSizes_ += context.memSize; allMemSizes_.emplace_back(countHeapSizes_); - } else if (eventType == FREE_EVENT) { - countHeapSizes_ -= memSize; + } else if (context.eventType == FREE_EVENT) { + countHeapSizes_ -= context.memSize; allMemSizes_.emplace_back(countHeapSizes_); - } else if (eventType == MMAP_EVENT) { - countMmapSizes_ += memSize; + } else if (context.eventType == MMAP_EVENT) { + countMmapSizes_ += context.memSize; allMemSizes_.emplace_back(countMmapSizes_); - } else if (eventType == MUNMAP_EVENT) { - countMmapSizes_ -= memSize; + } else if (context.eventType == MUNMAP_EVENT) { + countMmapSizes_ -= context.memSize; allMemSizes_.emplace_back(countMmapSizes_); } currentSizeDurs_.emplace_back(0); @@ -161,40 +152,27 @@ const std::deque &NativeHook::CurrentSizeDurs() const { return currentSizeDurs_; } -size_t NativeHookFrame::AppendNewNativeHookFrame(uint32_t callChainId, - uint16_t depth, - uint64_t ip, - DataIndex symbolName, - DataIndex filePath, - uint64_t offset, - uint64_t symbolOffset, - const std::string &vaddr) +size_t NativeHookFrame::AppendNewNativeHookFrame(const NativeHookFrameVaddrRow &context) { - callChainIds_.emplace_back(callChainId); - ips_.emplace_back(ip); - depths_.emplace_back(depth); - symbolNames_.emplace_back(symbolName); - filePaths_.emplace_back(filePath); - offsets_.emplace_back(offset); - symbolOffsets_.emplace_back(symbolOffset); - vaddrs_.emplace_back(vaddr); + callChainIds_.emplace_back(context.callChainId); + ips_.emplace_back(context.ip); + depths_.emplace_back(context.depth); + symbolNames_.emplace_back(context.symbolName); + filePaths_.emplace_back(context.filePath); + offsets_.emplace_back(context.offset); + symbolOffsets_.emplace_back(context.symbolOffset); + vaddrs_.emplace_back(context.vaddr); return Size() - 1; } -size_t NativeHookFrame::AppendNewNativeHookFrame(uint32_t callChainId, - uint16_t depth, - uint64_t ip, - DataIndex symbolName, - DataIndex filePath, - uint64_t offset, - uint64_t symbolOffset) +size_t NativeHookFrame::AppendNewNativeHookFrame(const NativeHookFrameRow &context) { - callChainIds_.emplace_back(callChainId); - ips_.emplace_back(ip); - depths_.emplace_back(depth); - symbolNames_.emplace_back(symbolName); - filePaths_.emplace_back(filePath); - offsets_.emplace_back(offset); - symbolOffsets_.emplace_back(symbolOffset); + callChainIds_.emplace_back(context.callChainId); + ips_.emplace_back(context.ip); + depths_.emplace_back(context.depth); + symbolNames_.emplace_back(context.symbolName); + filePaths_.emplace_back(context.filePath); + offsets_.emplace_back(context.offset); + symbolOffsets_.emplace_back(context.symbolOffset); return Size() - 1; } void NativeHookFrame::UpdateSymbolIdToNameMap(uint64_t originSymbolId, uint64_t symbolId) diff --git a/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.h b/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.h index 27469d5fa..599d04d26 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.h +++ b/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.h @@ -45,18 +45,23 @@ public: std::deque lastCallerPathIndexs_ = {}; std::deque lastSymbolIndexs_ = {}; }; + + +struct NativeHookRow{ + uint32_t callChainId = INVALID_UINT32; + uint32_t ipid = INVALID_UINT32; + uint32_t itid = INVALID_UINT32; + std::string eventType; + DataIndex subType = INVALID_DATAINDEX; + uint64_t timeStamp = INVALID_UINT64; + uint64_t endTimeStamp = INVALID_UINT64; + uint64_t duration = INVALID_UINT64; + uint64_t addr = INVALID_UINT64; + int64_t memSize = INVALID_UINT64; +}; class NativeHook : public NativeHookSampleBase { public: - size_t AppendNewNativeHookData(uint32_t callChainId, - uint32_t ipid, - uint32_t itid, - std::string eventType, - DataIndex subType, - uint64_t timeStamp, - uint64_t endTimeStamp, - uint64_t duration, - uint64_t addr, - int64_t memSize); + size_t AppendNewNativeHookData(const NativeHookRow &context); void UpdateCallChainId(size_t row, uint32_t callChainId); void UpdateEndTimeStampAndDuration(size_t row, uint64_t endTimeStamp); void UpdateCurrentSizeDur(size_t row, uint64_t timeStamp); @@ -119,23 +124,35 @@ private: uint64_t lastMmapEventRaw_ = INVALID_UINT64; }; +struct NativeHookFrameRow +{ + /* data */ + uint32_t callChainId = INVALID_UINT32; + uint16_t depth = INVALID_UINT16; + uint64_t ip = INVALID_UINT64; + DataIndex symbolName = INVALID_DATAINDEX; + DataIndex filePath = INVALID_DATAINDEX; + uint64_t offset = INVALID_UINT64; + uint64_t symbolOffset = INVALID_UINT64; +}; + +struct NativeHookFrameVaddrRow +{ + /* data */ + uint32_t callChainId = INVALID_UINT32; + uint16_t depth = INVALID_UINT16; + uint64_t ip = INVALID_UINT64; + DataIndex symbolName = INVALID_DATAINDEX; + DataIndex filePath = INVALID_DATAINDEX; + uint64_t offset = INVALID_UINT64; + uint64_t symbolOffset = INVALID_UINT64; + const std::string &vaddr; +}; + class NativeHookFrame { public: - size_t AppendNewNativeHookFrame(uint32_t callChainId, - uint16_t depth, - uint64_t ip, - DataIndex symbolName, - DataIndex filePath, - uint64_t offset, - uint64_t symbolOffset); - size_t AppendNewNativeHookFrame(uint32_t callChainId, - uint16_t depth, - uint64_t ip, - DataIndex symbolName, - DataIndex filePath, - uint64_t offset, - uint64_t symbolOffset, - const std::string &vaddr); + size_t AppendNewNativeHookFrame(const NativeHookFrameRow &context); + size_t AppendNewNativeHookFrame(const NativeHookFrameVaddrRow &context); void UpdateFrameInfo(size_t row, DataIndex symbolIndex, DataIndex filePathIndex, diff --git a/trace_streamer/test/unittest/pbreader_parser/pbreader_mem_parser_test.cpp b/trace_streamer/test/unittest/pbreader_parser/pbreader_mem_parser_test.cpp index 77fc13dd6..a976d1106 100644 --- a/trace_streamer/test/unittest/pbreader_parser/pbreader_mem_parser_test.cpp +++ b/trace_streamer/test/unittest/pbreader_parser/pbreader_mem_parser_test.cpp @@ -446,10 +446,8 @@ HWTEST_F(HtraceMemParserTest, AshMemDeduplicateTest, TestSize.Level1) vector stubVars = { {1616439852302, 1, "aaa", 1, 1}, {1616439852302, 1, "aaa", 1, 1}, {1616439852302, 1, "aaa", 2, 2}, {1616439852302, 2, "bbb", 1, 1}, {1616439852302, 2, "bbb", 2, 2}, {1616439852302, 3, "ccc", 1, 1}, - {1616439852302, 3, "ccc", 2, 2}, {1616439852302, 3, "ccc", 2, 2}, - - {1616439855302, 1, "aaa", 1, 1}, {1616439855302, 1, "aaa", 1, 1}, {1616439855302, 2, "bbb", 2, 2}, - {1616439855302, 3, "ccc", 2, 2}, + {1616439852302, 3, "ccc", 2, 2}, {1616439852302, 3, "ccc", 2, 2}, {1616439855302, 1, "aaa", 1, 1}, + {1616439855302, 1, "aaa", 1, 1}, {1616439855302, 2, "bbb", 2, 2}, {1616439855302, 3, "ccc", 2, 2}, }; for (auto &m : stubVars) { row.ts = m.timeStamp; @@ -506,11 +504,6 @@ HWTEST_F(HtraceMemParserTest, DmaMemDeduplicateTest, TestSize.Level1) {1616439852302, 2, "app", 2}, {1616439852302, 3, "composer_host", 1}, {1616439852302, 3, "composer_host", 2}, - {1616439852302, 3, "composer_host", 2}, - {1616439855302, 1, "render_service", 1}, - {1616439855302, 1, "render_service", 2}, - {1616439855302, 3, "composer_host", 2}, - {1616439855302, 3, "composer_host", 2}, }; DmaMemRow row; for (auto &m : stubVars) { @@ -535,11 +528,6 @@ HWTEST_F(HtraceMemParserTest, DmaMemDeduplicateTest, TestSize.Level1) EXPECT_EQ(DmaData.Flags()[4], 0); EXPECT_EQ(DmaData.Flags()[5], 2); EXPECT_EQ(DmaData.Flags()[6], 2); - EXPECT_EQ(DmaData.Flags()[7], 1); - EXPECT_EQ(DmaData.Flags()[8], 0); - EXPECT_EQ(DmaData.Flags()[9], 0); - EXPECT_EQ(DmaData.Flags()[10], 2); - EXPECT_EQ(DmaData.Flags()[11], 1); } } // namespace TraceStreamer diff --git a/trace_streamer/test/unittest/ptreader_parser/event_parser_test.cpp b/trace_streamer/test/unittest/ptreader_parser/event_parser_test.cpp index 2c5d4a96e..3f3f8a623 100644 --- a/trace_streamer/test/unittest/ptreader_parser/event_parser_test.cpp +++ b/trace_streamer/test/unittest/ptreader_parser/event_parser_test.cpp @@ -212,8 +212,8 @@ HWTEST_F(EventParserTest, ParseTracingMarkWriteBE, TestSize.Level1) { TS_LOGI("test5-7"); const uint8_t str[] = - "system-1298 ( 1298) [001] ...1 174330.287420: tracing_mark_write: B|1298|Choreographer#doFrame\n \ - system-1298 ( 1298) [001] ...1 174330.287622: tracing_mark_write: E|1298\n"; + "system-1298 ( 1298) [001] ...1 174330.287420: tracing_mark_write: B|1298|Choreographer#doFrame\n" + "system-1298 ( 1298) [001] ...1 174330.287622: tracing_mark_write: E|1298\n"; auto buf = std::make_unique(G_BUF_SIZE); if (memcpy_s(buf.get(), G_BUF_SIZE, str, sizeof(str))) { EXPECT_TRUE(false); @@ -238,8 +238,8 @@ HWTEST_F(EventParserTest, ParseTracingMarkWriteSF, TestSize.Level1) TS_LOGI("test5-8"); const uint8_t str[] = - "system-1298 ( 1298) [001] ...1 174330.287478: tracing_mark_write: S|1298|animator:translateX|18888109\n\ - system-1298 ( 1298) [001] ...1 174330.287514: tracing_mark_write: F|1298|animator:translateX|18888109\n"; + "system-1298 ( 1298) [001] ...1 174330.287478: tracing_mark_write: S|1298|animator:translateX|18888109\n" + "system-1298 ( 1298) [001] ...1 174330.287514: tracing_mark_write: F|1298|animator:translateX|18888109\n"; auto buf = std::make_unique(G_BUF_SIZE); if (memcpy_s(buf.get(), G_BUF_SIZE, str, sizeof(str))) { EXPECT_TRUE(false); @@ -331,8 +331,8 @@ HWTEST_F(EventParserTest, ParseIrqHandlerExit, TestSize.Level1) { TS_LOGI("test5-12"); const uint8_t str[] = - "ACCS0-2716 ( 2519) [000] d.h1 174330.280362: irq_handler_entry: irq=19 name=408000.qcom,cpu-bwmon\n \ - ACCS0-2716 ( 2519) [000] d.h1 174330.280382: irq_handler_exit: irq=19 ret=handled\n"; + "ACCS0-2716 ( 2519) [000] d.h1 174330.280362: irq_handler_entry: irq=19 name=408000.qcom,cpu-bwmon\n" + "ACCS0-2716 ( 2519) [000] d.h1 174330.280382: irq_handler_exit: irq=19 ret=handled\n"; auto buf = std::make_unique(G_BUF_SIZE); if (memcpy_s(buf.get(), G_BUF_SIZE, str, sizeof(str))) { EXPECT_TRUE(false); diff --git a/trace_streamer/test/unittest/table/table_test.cpp b/trace_streamer/test/unittest/table/table_test.cpp index 50501a1ad..9c3bb288d 100644 --- a/trace_streamer/test/unittest/table/table_test.cpp +++ b/trace_streamer/test/unittest/table/table_test.cpp @@ -391,8 +391,10 @@ HWTEST_F(TableTest, EbpfCallstackTableTest, TestSize.Level1) stream_.traceDataCache_->GetHidumpData()->AppendNewHidumpInfo(timestamp1, FPS1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect6, false), 2); - stream_.traceDataCache_->GetEbpfCallStack()->AppendNewData(CALLCHAIN_ID, depth, ip, symbolId, filePathId, 0); - stream_.traceDataCache_->GetEbpfCallStack()->AppendNewData(CALLCHAIN_ID1, depth1, ip1, symbolId1, filePathId1, 0); + EbpfCallStackDataRow ebpfCallStackDataRow = {CALLCHAIN_ID, depth, ip, symbolId, filePathId, 0}; + stream_.traceDataCache_->GetEbpfCallStack()->AppendNewData(ebpfCallStackDataRow); + ebpfCallStackDataRow = {CALLCHAIN_ID1, depth1, ip1, symbolId1, filePathId1, 0}; + stream_.traceDataCache_->GetEbpfCallStack()->AppendNewData(ebpfCallStackDataRow); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect, false), 2); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect1, false), 1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect2, false), 0); @@ -436,12 +438,12 @@ HWTEST_F(TableTest, FileSystemSampleTableTest, TestSize.Level1) EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect4, false), 1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect5, false), 0); - stream_.traceDataCache_->GetFileSystemSample()->AppendNewData( - CALLCHAIN_ID, TYPE, IPID, ITID, START_TS, END_TS, DUR, returnValue, errorCode, SIZE, FD, fileId, firstArgument, - secondArgument, thirdArgument, fourthArgument); - stream_.traceDataCache_->GetFileSystemSample()->AppendNewData( - CALLCHAIN_ID1, TYPE1, IPID1, ITID1, START_TS1, END_TS1, DUR1, returnValue1, errorCode1, SIZE1, FD1, fileId1, - firstArgument1, secondArgument1, thirdArgument1, fourthArgument1); + FileSystemSampleRow fileSystemSampleRow = {CALLCHAIN_ID, TYPE, IPID, ITID, START_TS, END_TS, DUR, returnValue, errorCode, SIZE, FD, fileId, firstArgument, + secondArgument, thirdArgument, fourthArgument}; + stream_.traceDataCache_->GetFileSystemSample()->AppendNewData(fileSystemSampleRow); + fileSystemSampleRow = {CALLCHAIN_ID1, TYPE1, IPID1, ITID1, START_TS1, END_TS1, DUR1, returnValue1, errorCode1, SIZE1, FD1, fileId1, + firstArgument1, secondArgument1, thirdArgument1, fourthArgument1}; + stream_.traceDataCache_->GetFileSystemSample()->AppendNewData(fileSystemSampleRow); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect, false), 2); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect1, false), 1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect2, false), 1); @@ -477,9 +479,9 @@ HWTEST_F(TableTest, HisysEventMeasureTableTest, TestSize.Level1) int32_t type = 1; double numericValue = 0; DataIndex stringValue = stream_.traceDataCache_->GetDataIndex("stringValue"); - - stream_.traceDataCache_->GetHiSysEventMeasureData()->AppendData(ts, nameId, keyId, type, numericValue, stringValue, - serial); + HiSysEventMeasureDataRow hiSysEventMeasureDataRow = {ts, nameId, keyId, type, numericValue, stringValue, + serial}; + stream_.traceDataCache_->GetHiSysEventMeasureData()->AppendData(hiSysEventMeasureDataRow); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect, false), 1); } /** @@ -571,11 +573,10 @@ HWTEST_F(TableTest, IoLatencySampleTableTest, TestSize.Level1) stream_.traceDataCache_->GetHidumpData()->AppendNewHidumpInfo(timestamp1, fps1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect1, false), 2); - stream_.traceDataCache_->GetBioLatencySampleData()->AppendNewData( - CALLCHAIN_ID, TYPE, IPID, ITID, startTs, endTs, latencyDur, tier, size, blockNumber, filePathId, durPer4k); - stream_.traceDataCache_->GetBioLatencySampleData()->AppendNewData(callChainId1, type1, ipid1, itid1, startTs1, - endTs1, latencyDur1, tier1, size1, blockNumber1, - filePathId1, durPer4k1); + GetBioLatencySampleDataRow bioLatencySampleDataRow = {CALLCHAIN_ID, TYPE, IPID, ITID, startTs, endTs, latencyDur, tier, size, blockNumber, filePathId, durPer4k}; + stream_.traceDataCache_->GetBioLatencySampleData()->AppendNewData(bioLatencySampleDataRow); + bioLatencySampleDataRow = {callChainId1, type1, ipid1, itid1, startTs1, endTs1, latencyDur1, tier1, size1, blockNumber1, filePathId1, durPer4k1}; + stream_.traceDataCache_->GetBioLatencySampleData()->AppendNewData(bioLatencySampleDataRow); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect, false), 2); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect2, false), 1); } @@ -753,10 +754,10 @@ HWTEST_F(TableTest, NativeHookTableTest, TestSize.Level1) int64_t memSize1 = 2; int64_t curMemSize1 = 2; - stream_.traceDataCache_->GetNativeHookData()->AppendNewNativeHookData( - CALLCHAIN_ID, IPID, ITID, eventType, subType, timeStamp, endTimestamp, duration, addr, memSize); - stream_.traceDataCache_->GetNativeHookData()->AppendNewNativeHookData( - callChainId1, ipid1, itid1, eventType1, subType1, timestamp1, endTimestamp1, duration1, addr1, memSize1); + NativeHookRow nativeHookRow = {CALLCHAIN_ID, IPID, ITID, eventType, subType, timeStamp, endTimestamp, duration, addr, memSize}; + stream_.traceDataCache_->GetNativeHookData()->AppendNewNativeHookData(nativeHookRow); + nativeHookRow = {callChainId1, ipid1, itid1, eventType1, subType1, timestamp1, endTimestamp1, duration1, addr1, memSize1}; + stream_.traceDataCache_->GetNativeHookData()->AppendNewNativeHookData(nativeHookRow); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect, false), 2); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect1, false), 1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect2, false), 1); @@ -791,11 +792,11 @@ HWTEST_F(TableTest, NativeHookFrameTableTest, TestSize.Level1) uint64_t offset1 = 2; uint64_t symbolOffset1 = 2; const std::string vaddr1 = "addr1"; - - stream_.traceDataCache_->GetNativeHookFrameData()->AppendNewNativeHookFrame(CALLCHAIN_ID, depth, ip, symbolName, - filePath, offset, symbolOffset, vaddr); - stream_.traceDataCache_->GetNativeHookFrameData()->AppendNewNativeHookFrame( - CALLCHAIN_ID1, depth1, ip1, symbolName1, filePath1, offset1, symbolOffset1, vaddr1); + NativeHookFrameVaddrRow nativeHookFrameVaddrRow = {CALLCHAIN_ID, depth, ip, symbolName, + filePath, offset, symbolOffset, vaddr}; + stream_.traceDataCache_->GetNativeHookFrameData()->AppendNewNativeHookFrame(nativeHookFrameVaddrRow); + nativeHookFrameVaddrRow = {CALLCHAIN_ID1, depth1, ip1, symbolName1, filePath1, offset1, symbolOffset1, vaddr1}; + stream_.traceDataCache_->GetNativeHookFrameData()->AppendNewNativeHookFrame(nativeHookFrameVaddrRow); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect, false), 2); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect1, false), 1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect2, false), 1); @@ -856,12 +857,10 @@ HWTEST_F(TableTest, PerfCallchainTableTest, TestSize.Level1) uint64_t vaddrInFile1 = 2; uint64_t fileId1 = stream_.traceDataCache_->GetDataIndex("file1"); uint64_t symbolId1 = stream_.traceDataCache_->GetDataIndex("symbolId1"); - - stream_.traceDataCache_->GetPerfCallChainData()->AppendNewPerfCallChain(callChainId, depth, vaddrInFile, ip, fileId, - symbolId); - - stream_.traceDataCache_->GetPerfCallChainData()->AppendNewPerfCallChain(callChainId1, depth1, vaddrInFile1, ip1, - fileId1, symbolId1); + PerfCallChainRow perfCallChainRow = {callChainId, depth, vaddrInFile, ip, fileId, symbolId}; + stream_.traceDataCache_->GetPerfCallChainData()->AppendNewPerfCallChain(perfCallChainRow); + perfCallChainRow = {callChainId1, depth1, vaddrInFile1, ip1, fileId1, symbolId1}; + stream_.traceDataCache_->GetPerfCallChainData()->AppendNewPerfCallChain(perfCallChainRow); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect, false), 2); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect1, false), 1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect2, false), 2); -- Gitee From e8fff66cd541efdeefee82c6f679f16c7fcb0819 Mon Sep 17 00:00:00 2001 From: zhang-zepeng1 Date: Wed, 24 Apr 2024 18:42:14 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E2=80=98codecheck=E6=B8=85=E7=90=86?= =?UTF-8?q?=E2=80=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang-zepeng1 --- .../src/filter/app_start_filter.cpp | 29 ++++++++--- trace_streamer/src/filter/cpu_filter.cpp | 3 +- trace_streamer/src/filter/frame_filter.cpp | 4 +- .../hi_sysevent_measure_filter.cpp | 9 ++-- .../filter/hook_filter/native_hook_filter.cpp | 6 +-- trace_streamer/src/filter/slice_filter.cpp | 24 +++++---- .../parser/hiperf_parser/perf_data_parser.cpp | 5 +- .../hilog_parser/pbreader_hilog_parser.cpp | 5 +- .../src/parser/print_event_parser.cpp | 5 +- .../hilog_parser/ptreader_hilog_parser.cpp | 5 +- .../ftrace/callstack_stdtype.cpp | 52 ++++++++++--------- .../trace_stdtype/ftrace/callstack_stdtype.h | 24 +++------ .../ftrace/render_service_stdtype.cpp | 18 +++---- .../ftrace/render_service_stdtype.h | 17 +++--- .../trace_stdtype/ftrace/sched_stdtype.cpp | 19 +++---- .../trace_stdtype/ftrace/sched_stdtype.h | 17 +++--- .../ftrace/template/app_startup_stdtype.cpp | 48 +++++++---------- .../ftrace/template/app_startup_stdtype.h | 35 +++++++------ .../trace_stdtype/hilog/hilog_stdtype.cpp | 27 ++++------ .../trace_stdtype/hilog/hilog_stdtype.h | 19 ++++--- .../trace_stdtype/hiperf/hiperf_stdtype.cpp | 25 ++++----- .../trace_stdtype/hiperf/hiperf_stdtype.h | 20 +++---- .../hisysevent/hisysevent_stdtype.cpp | 45 ++++++---------- .../hisysevent/hisysevent_stdtype.h | 32 ++++++------ .../htrace/native_memory_stdtype.cpp | 26 ++++------ .../htrace/native_memory_stdtype.h | 22 ++++---- .../unittest/filter/animation_filter_test.cpp | 18 ++++--- .../test/unittest/table/table_test.cpp | 34 ++++++------ 28 files changed, 288 insertions(+), 305 deletions(-) diff --git a/trace_streamer/src/filter/app_start_filter.cpp b/trace_streamer/src/filter/app_start_filter.cpp index 095e3cfc8..01e3a6702 100644 --- a/trace_streamer/src/filter/app_start_filter.cpp +++ b/trace_streamer/src/filter/app_start_filter.cpp @@ -114,9 +114,10 @@ void APPStartupFilter::AppendAssociatedData(DataIndex packedNameIndex, } else { endTime = itorSecond->second->endTime_; } - traceDataCache_->GetAppStartupData()->AppendNewData(itorSecond->second->ipid_, itorSecond->second->tid_, - itorSecond->second->callid_, itorSecond->second->startTime_, - endTime, itorSecond->first, packedNameIndex); + AppStartupRow appStartupRow = {itorSecond->second->ipid_, itorSecond->second->tid_, + itorSecond->second->callid_, itorSecond->second->startTime_, + endTime, itorSecond->first, packedNameIndex}; + traceDataCache_->GetAppStartupData()->AppendNewData(appStartupRow); } } @@ -274,16 +275,28 @@ void APPStartupFilter::ParserSoInitalization() auto pid = threadData[callId].internalPid_; auto tid = threadData[callId].tid_; auto it = mMaxTimeAndDepthWithPid.find(pid); + SoStaticInitalizationRow soStaticInitalizationRow; if (it == mMaxTimeAndDepthWithPid.end()) { mMaxTimeAndDepthWithPid.insert(std::make_pair(pid, std::map{{endTime, 0}})); - traceDataCache_->GetSoStaticInitalizationData()->AppendNewData(pid, tid, callId, startTime, endTime, - sliceData.NamesData()[i], depth); + soStaticInitalizationRow.ipid = pid; + soStaticInitalizationRow.tid = tid; + soStaticInitalizationRow.callId = callId; + soStaticInitalizationRow.startTime = startTime; + soStaticInitalizationRow.endTime = endTime; + soStaticInitalizationRow.soName = sliceData.NamesData()[i]; + soStaticInitalizationRow.depth = depth; + traceDataCache_->GetSoStaticInitalizationData()->AppendNewData(soStaticInitalizationRow); continue; } else { CalcDepthByTimeStamp(it, depth, endTime, startTime); - traceDataCache_->GetSoStaticInitalizationData()->AppendNewData( - threadData[callId].internalPid_, threadData[callId].tid_, callId, startTime, endTime, - sliceData.NamesData()[i], depth); + soStaticInitalizationRow.ipid = threadData[callId].internalPid_; + soStaticInitalizationRow.tid = threadData[callId].tid_; + soStaticInitalizationRow.callId = callId; + soStaticInitalizationRow.startTime = startTime; + soStaticInitalizationRow.endTime = endTime; + soStaticInitalizationRow.soName = sliceData.NamesData()[i]; + soStaticInitalizationRow.depth = depth; + traceDataCache_->GetSoStaticInitalizationData()->AppendNewData(soStaticInitalizationRow); } } } diff --git a/trace_streamer/src/filter/cpu_filter.cpp b/trace_streamer/src/filter/cpu_filter.cpp index 35e218a61..8714824af 100644 --- a/trace_streamer/src/filter/cpu_filter.cpp +++ b/trace_streamer/src/filter/cpu_filter.cpp @@ -108,7 +108,8 @@ void CpuFilter::InsertSwitchEvent(uint64_t ts, DataIndex nextInfo) { BinderTransactionInfo btInfo = {prevPid, nextPid, INVALID_UINT64, INVALID_UINT64}; - auto index = traceDataCache_->GetSchedSliceData()->AppendSchedSlice(ts, INVALID_UINT64, cpu, nextPid, 0, nextPrio); + SchedSliceRow schedSliceRow = {ts,INVALID_UINT64,cpu,nextPid,0,nextPrio}; + auto index = traceDataCache_->GetSchedSliceData()->AppendSchedSlice(schedSliceRow); auto prevTidOnCpu = cpuToRowSched_.find(cpu); if (prevTidOnCpu != cpuToRowSched_.end()) { traceDataCache_->GetSchedSliceData()->Update(prevTidOnCpu->second.row, ts, prevState); diff --git a/trace_streamer/src/filter/frame_filter.cpp b/trace_streamer/src/filter/frame_filter.cpp index e0af3fccf..adef0c611 100644 --- a/trace_streamer/src/filter/frame_filter.cpp +++ b/trace_streamer/src/filter/frame_filter.cpp @@ -40,8 +40,8 @@ void FrameFilter::BeginVsyncEvent(uint64_t ts, frame->vsyncId_ = vsyncId; frame->frameSliceRow_ = traceDataCache_->GetFrameSliceData()->AppendFrame(ts, ipid, itid, vsyncId, callStackSliceId); - frame->frameExpectedSliceRow_ = traceDataCache_->GetFrameSliceData()->AppendFrame( - expectStart, ipid, itid, vsyncId, callStackSliceId, expectEnd, (uint8_t)TraceStdtype::FrameSlice::EXPECT_SLICE); + FrameSliceRow frameSliceRow = {expectStart, ipid, itid, vsyncId, callStackSliceId, expectEnd, (uint8_t)TraceStdtype::FrameSlice::EXPECT_SLICE}; + frame->frameExpectedSliceRow_ = traceDataCache_->GetFrameSliceData()->AppendFrame(frameSliceRow); if (vsyncRenderSlice_.count(itid)) { vsyncRenderSlice_[itid].push_back(frame); } else { diff --git a/trace_streamer/src/filter/hi_sysevent_filter/hi_sysevent_measure_filter.cpp b/trace_streamer/src/filter/hi_sysevent_filter/hi_sysevent_measure_filter.cpp index 362ce6922..06ddb26db 100644 --- a/trace_streamer/src/filter/hi_sysevent_filter/hi_sysevent_measure_filter.cpp +++ b/trace_streamer/src/filter/hi_sysevent_filter/hi_sysevent_measure_filter.cpp @@ -150,10 +150,11 @@ bool HiSysEventMeasureFilter::SaveAllHiSysEvent(json jMessage, bool &haveSplitSe } void HiSysEventMeasureFilter::UpdataAllHiSysEvent(const JsonMessage &jsMessage, uint64_t newTimeStamp) { - traceDataCache_->GetHiSysEventAllEventData()->AppendHiSysEventData( - jsMessage.domainId, jsMessage.eventNameId, newTimeStamp, jsMessage.type, jsMessage.timeZone, jsMessage.pid, - jsMessage.tid, jsMessage.uid, jsMessage.level, jsMessage.tag, jsMessage.eventId, jsMessage.seq, jsMessage.info, - jsMessage.content.dump()); + HiSysEventAllEventDataRow hiSysEventAllEventDataRow = {jsMessage.domainId, jsMessage.eventNameId, newTimeStamp, + jsMessage.type, jsMessage.timeZone, jsMessage.pid, + jsMessage.tid, jsMessage.uid, jsMessage.level, jsMessage.tag, + jsMessage.eventId, jsMessage.seq, jsMessage.info,jsMessage.content.dump()}; + traceDataCache_->GetHiSysEventAllEventData()->AppendHiSysEventData(hiSysEventAllEventDataRow); } bool HiSysEventMeasureFilter::JGetData(const json &jMessage, JsonData &jData, diff --git a/trace_streamer/src/filter/hook_filter/native_hook_filter.cpp b/trace_streamer/src/filter/hook_filter/native_hook_filter.cpp index 3d62c26ca..7db93bdb0 100644 --- a/trace_streamer/src/filter/hook_filter/native_hook_filter.cpp +++ b/trace_streamer/src/filter/hook_filter/native_hook_filter.cpp @@ -225,9 +225,9 @@ void NativeHookFilter::ParseStatisticEvent(uint64_t timeStamp, const ProtoReader if (reader.has_tag_name()) { memSubType = traceDataCache_->GetDataIndex(reader.tag_name().ToStdString()); } - traceDataCache_->GetNativeHookStatisticsData()->AppendNewNativeHookStatistic( - ipid, timeStamp, callChainId, reader.type(), memSubType, reader.apply_count(), reader.release_count(), - reader.apply_size(), reader.release_size()); + NativeHookStatisticRow nativeHookStatisticRow = {ipid, timeStamp, callChainId, static_cast(reader.type()), memSubType, reader.apply_count(), + reader.release_count(),reader.apply_size(), reader.release_size()}; + traceDataCache_->GetNativeHookStatisticsData()->AppendNewNativeHookStatistic(nativeHookStatisticRow); } void NativeHookFilter::ParseAllocEvent(uint64_t timeStamp, const ProtoReader::BytesView &bytesView) { diff --git a/trace_streamer/src/filter/slice_filter.cpp b/trace_streamer/src/filter/slice_filter.cpp index 227b3e0d8..11191541a 100644 --- a/trace_streamer/src/filter/slice_filter.cpp +++ b/trace_streamer/src/filter/slice_filter.cpp @@ -61,8 +61,9 @@ void SliceFilter::IrqHandlerEntry(uint64_t timeStamp, uint32_t cpu, DataIndex ca irqDataLinker_.erase(cpu); SliceData sliceData = {timeStamp, 0, cpu, catalog, nameIndex}; auto slices = traceDataCache_->GetIrqData(); - size_t index = slices->AppendInternalSlice(sliceData.timeStamp, sliceData.duration, sliceData.internalTid, - sliceData.cat, sliceData.name, 0, std::nullopt); + CallStackInternalRow callStackInternalRow = {sliceData.timeStamp,static_cast(sliceData.duration), sliceData.internalTid, + sliceData.cat, sliceData.name, 0}; + size_t index = slices->AppendInternalSlice(callStackInternalRow,std::nullopt); if (irqEventMap_.count(cpu)) { // not match streamFilters_->statFilter_->IncreaseStat(TRACE_EVENT_IRQ_HANDLER_ENTRY, STAT_EVENT_DATA_LOST); @@ -101,8 +102,9 @@ void SliceFilter::IpiHandlerEntry(uint64_t timeStamp, uint32_t cpu, DataIndex ca irqDataLinker_.erase(cpu); SliceData sliceData = {timeStamp, 0, cpu, catalog, nameIndex}; auto slices = traceDataCache_->GetIrqData(); - size_t index = slices->AppendInternalSlice(sliceData.timeStamp, sliceData.duration, sliceData.internalTid, - sliceData.cat, sliceData.name, 0, std::nullopt); + CallStackInternalRow callStackInternalRow = {sliceData.timeStamp, static_cast(sliceData.duration), sliceData.internalTid, + sliceData.cat, sliceData.name, 0}; + size_t index = slices->AppendInternalSlice(callStackInternalRow, std::nullopt); if (ipiEventMap_.count(cpu)) { // not match streamFilters_->statFilter_->IncreaseStat(TRACE_EVENT_IRQ_HANDLER_ENTRY, STAT_EVENT_DATA_LOST); @@ -128,8 +130,9 @@ void SliceFilter::SoftIrqEntry(uint64_t timeStamp, uint32_t cpu, DataIndex catal { SliceData sliceData = {timeStamp, 0, cpu, catalog, nameIndex}; auto slices = traceDataCache_->GetIrqData(); - size_t index = slices->AppendInternalSlice(sliceData.timeStamp, sliceData.duration, sliceData.internalTid, - sliceData.cat, sliceData.name, 0, std::nullopt); + CallStackInternalRow callStackInternalRow = {sliceData.timeStamp, static_cast(sliceData.duration), sliceData.internalTid, + sliceData.cat, sliceData.name, 0}; + size_t index = slices->AppendInternalSlice(callStackInternalRow, std::nullopt); if (softIrqEventMap_.count(cpu)) { // not match streamFilters_->statFilter_->IncreaseStat(TRACE_EVENT_SOFTIRQ_ENTRY, STAT_EVENT_DATA_LOST); @@ -307,8 +310,9 @@ size_t SliceFilter::StartSlice(uint64_t timeStamp, uint32_t depth = stack.size(); auto slices = traceDataCache_->GetInternalSlicesData(); uint32_t parentId = depth == 0 ? INVALID_UINT32 : slices->IdsData()[stack.back().index]; - size_t index = slices->AppendInternalSlice(sliceData.timeStamp, sliceData.duration, internalTid, sliceData.cat, - sliceData.name, 0, parentId); + CallStackInternalRow callStackInternalRow = {sliceData.timeStamp, static_cast(sliceData.duration), sliceData.internalTid, + sliceData.cat, sliceData.name, 0}; + size_t index = slices->AppendInternalSlice(callStackInternalRow, std::nullopt); if (depth >= std::numeric_limits::max()) { return SIZE_MAX; } @@ -439,8 +443,8 @@ uint64_t SliceFilter::StartAsyncSlice(uint64_t timeStamp, // the IDE need a depth to paint call slice in different position of the canvas, the depth of async call // do not mean the parent-to-child relationship, it is different from no-async call uint8_t depth = 0; - size_t index = slices->AppendInternalAsyncSlice(timeStamp, -1, internalTid, INVALID_UINT64, nameIndex, depth, - cookie, std::nullopt); + CallStackInternalRow callStackInternalRow = {timeStamp, static_cast(-1), internalTid, INVALID_UINT64, nameIndex, depth}; + size_t index = slices->AppendInternalAsyncSlice(callStackInternalRow,cookie, std::nullopt); asyncEventFilterMap_.insert(std::make_pair(asyncEventSize_, AsyncEvent{timeStamp, index})); return index; } diff --git a/trace_streamer/src/parser/hiperf_parser/perf_data_parser.cpp b/trace_streamer/src/parser/hiperf_parser/perf_data_parser.cpp index 439bb7dab..b52527f6f 100644 --- a/trace_streamer/src/parser/hiperf_parser/perf_data_parser.cpp +++ b/trace_streamer/src/parser/hiperf_parser/perf_data_parser.cpp @@ -655,8 +655,9 @@ void PerfDataParser::UpdatePerfSampleData(uint32_t callChainId, std::unique_ptr< threadStatIndex = suspendStatIndex_; } auto configIndex = report_->GetConfigIndex(sample->data_.id); - perfSampleData->AppendNewPerfSample(callChainId, sample->data_.time, sample->data_.tid, sample->data_.period, - configIndex, newTimeStamp, sample->data_.cpu, threadStatIndex); + PerfSampleRow perfSampleRow = {callChainId, sample->data_.time, sample->data_.tid, sample->data_.period, + configIndex, newTimeStamp, sample->data_.cpu, threadStatIndex}; + perfSampleData->AppendNewPerfSample(perfSampleRow); } void PerfDataParser::Finish() diff --git a/trace_streamer/src/parser/pbreader_parser/hilog_parser/pbreader_hilog_parser.cpp b/trace_streamer/src/parser/pbreader_parser/hilog_parser/pbreader_hilog_parser.cpp index 48fb77e77..4d5e9a58b 100644 --- a/trace_streamer/src/parser/pbreader_parser/hilog_parser/pbreader_hilog_parser.cpp +++ b/trace_streamer/src/parser/pbreader_parser/hilog_parser/pbreader_hilog_parser.cpp @@ -68,8 +68,9 @@ void PbreaderHiLogParser::Parse(ProtoReader::BytesView tracePacket, bool &haveSp } DataIndex levelData = traceDataCache_->dataDict_.GetStringIndex(iter->second.c_str()); DataIndex logTag = traceDataCache_->dataDict_.GetStringIndex(logDetails.tag().ToStdString()); - traceDataCache_->GetHilogData()->AppendNewLogInfo(curLineSeq, newTimeStamp, logDetails.pid(), logDetails.tid(), - levelData, logTag, logData, timeStamp); + LogInfoRow logInfoRow = {curLineSeq, newTimeStamp, logDetails.pid(), logDetails.tid(), + levelData, logTag, logData, timeStamp}; + traceDataCache_->GetHilogData()->AppendNewLogInfo(logInfoRow); } } void PbreaderHiLogParser::Finish() diff --git a/trace_streamer/src/parser/print_event_parser.cpp b/trace_streamer/src/parser/print_event_parser.cpp index a9f7c5f8b..3b38dad4c 100644 --- a/trace_streamer/src/parser/print_event_parser.cpp +++ b/trace_streamer/src/parser/print_event_parser.cpp @@ -92,8 +92,9 @@ void PrintEventParser::ParseBeginEvent(const std::string &comm, traceDataCache_->GetDataIndex(point.name_)); if (index != INVALID_UINT32) { // add distributed data - traceDataCache_->GetInternalSlicesData()->SetDistributeInfo(index, point.chainId_, point.spanId_, - point.parentSpanId_, point.flag_); + CallStackDistributeInfoRow callStackDistributeInfoRow = {point.chainId_, point.spanId_, + point.parentSpanId_, point.flag_, point.args_}; + traceDataCache_->GetInternalSlicesData()->SetDistributeInfo(index,callStackDistributeInfoRow); if (pid == point.tgid_) { if (HandleFrameSliceBeginEvent(point.funcPrefixId_, index, point.funcArgs_, line)) { return; diff --git a/trace_streamer/src/parser/ptreader_parser/hilog_parser/ptreader_hilog_parser.cpp b/trace_streamer/src/parser/ptreader_parser/hilog_parser/ptreader_hilog_parser.cpp index 514709b5b..b0ec9c7dc 100644 --- a/trace_streamer/src/parser/ptreader_parser/hilog_parser/ptreader_hilog_parser.cpp +++ b/trace_streamer/src/parser/ptreader_parser/hilog_parser/ptreader_hilog_parser.cpp @@ -152,8 +152,9 @@ void PtreaderHilogParser::BeginFilterHilogData(HilogLine *hilogData) auto levelData = traceDataCache_->dataDict_.GetStringIndex(hilogData->level); auto logTag = traceDataCache_->dataDict_.GetStringIndex(hilogData->tag); auto logData = traceDataCache_->dataDict_.GetStringIndex(hilogData->context); - traceDataCache_->GetHilogData()->AppendNewLogInfo(curLineSeq, newTimeStamp, hilogData->pid, hilogData->tid, - levelData, logTag, logData, hilogData->timeStamp); + LogInfoRow logInfoRow = {curLineSeq, newTimeStamp, hilogData->pid, hilogData->tid, + levelData, logTag, logData, hilogData->timeStamp}; + traceDataCache_->GetHilogData()->AppendNewLogInfo(logInfoRow); return; } } // namespace TraceStreamer diff --git a/trace_streamer/src/trace_data/trace_stdtype/ftrace/callstack_stdtype.cpp b/trace_streamer/src/trace_data/trace_stdtype/ftrace/callstack_stdtype.cpp index c52b4edc6..e52699334 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/ftrace/callstack_stdtype.cpp +++ b/trace_streamer/src/trace_data/trace_stdtype/ftrace/callstack_stdtype.cpp @@ -16,32 +16,37 @@ namespace SysTuning { namespace TraceStdtype { -size_t CallStack::AppendInternalAsyncSlice(uint64_t startT, - uint64_t durationNs, - InternalTid internalTid, - DataIndex cat, - DataIndex name, - uint8_t depth, +struct CallStackInternalRow { + uint64_t startT = INVALID_UINT64; + uint64_t durationNs = INVALID_UINT64; + InternalTid internalTid = INVALID_UINT32; + DataIndex cat = INVALID_UINT64; + DataIndex name = INVALID_UINT64; + uint8_t depth = INVALID_UINT8; +}; +struct CallStackDistributeInfoRow { + std::string chainId; + std::string spanId; + std::string parentSpanId; + std::string flag; + std::string args; +}; +size_t CallStack::AppendInternalAsyncSlice(const CallStackInternalRow &callStackInternalRow, int64_t cookid, const std::optional &parentId) { - AppendCommonInfo(startT, durationNs, internalTid); - AppendCallStack(cat, name, depth, parentId); + AppendCommonInfo(callStackInternalRow.startT, callStackInternalRow.durationNs,callStackInternalRow.internalTid); + AppendCallStack(callStackInternalRow.cat, callStackInternalRow.name,callStackInternalRow.depth, parentId); AppendDistributeInfo(); cookies_.emplace_back(cookid); ids_.emplace_back(id_++); return Size() - 1; } -size_t CallStack::AppendInternalSlice(uint64_t startT, - uint64_t durationNs, - InternalTid internalTid, - DataIndex cat, - DataIndex name, - uint8_t depth, +size_t CallStack::AppendInternalSlice(const CallStackInternalRow &callStackInternalRow, const std::optional &parentId) { - AppendCommonInfo(startT, durationNs, internalTid); - AppendCallStack(cat, name, depth, parentId); + AppendCommonInfo(callStackInternalRow.startT,callStackInternalRow.durationNs, callStackInternalRow.internalTid); + AppendCallStack(callStackInternalRow.cat, callStackInternalRow.name, callStackInternalRow.depth, parentId); ids_.emplace_back(id_++); cookies_.emplace_back(INVALID_INT64); AppendDistributeInfo(); @@ -61,16 +66,13 @@ void CallStack::AppendCallStack(DataIndex cat, DataIndex name, uint8_t depth, st names_.emplace_back(name); depths_.emplace_back(depth); } -void CallStack::SetDistributeInfo(size_t index, - const std::string &chainId, - const std::string &spanId, - const std::string &parentSpanId, - const std::string &flag) +void CallStack::SetDistributeInfo(size_t index,const CallStackDistributeInfoRow &callStackDistributeInfoRow) { - chainIds_[index] = chainId; - spanIds_[index] = spanId; - parentSpanIds_[index] = parentSpanId; - flags_[index] = flag; + chainIds_[index] = callStackDistributeInfoRow.chainId; + spanIds_[index] = callStackDistributeInfoRow.spanId; + parentSpanIds_[index] = callStackDistributeInfoRow.parentSpanId; + flags_[index] = callStackDistributeInfoRow.flag; + args_[index] = callStackDistributeInfoRow.args; argSet_[index] = INVALID_UINT32; } void CallStack::AppendDistributeInfo() diff --git a/trace_streamer/src/trace_data/trace_stdtype/ftrace/callstack_stdtype.h b/trace_streamer/src/trace_data/trace_stdtype/ftrace/callstack_stdtype.h index 65232931f..7da86ea65 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/ftrace/callstack_stdtype.h +++ b/trace_streamer/src/trace_data/trace_stdtype/ftrace/callstack_stdtype.h @@ -22,26 +22,18 @@ namespace SysTuning { namespace TraceStdtype { class CallStack : public CacheBase, public CpuCacheBase, public BatchCacheBase { public: - size_t AppendInternalAsyncSlice(uint64_t startT, - uint64_t durationNs, - InternalTid internalTid, - DataIndex cat, - DataIndex name, - uint8_t depth, + size_t AppendInternalAsyncSlice(const CallStackInternalRow &callStackInternalRow, int64_t cookid, const std::optional &parentId); - size_t AppendInternalSlice(uint64_t startT, - uint64_t durationNs, - InternalTid internalTid, - DataIndex cat, - DataIndex name, - uint8_t depth, + size_t AppendInternalSlice(const CallStackInternalRow &callStackInternalRow, const std::optional &parentId); void SetDistributeInfo(size_t index, - const std::string &chainId, - const std::string &spanId, - const std::string &parentSpanId, - const std::string &flag); + const CallStackDistributeInfoRow &callStackDistributeInfoRow); + void AppendDistributeInfo(const std::string &chainId, + const std::string &spanId, + const std::string &parentSpanId, + const std::string &flag, + const std::string &args); void AppendDistributeInfo(); void SetDuration(size_t index, uint64_t timeStamp); void SetDurationWithFlag(size_t index, uint64_t timeStamp); diff --git a/trace_streamer/src/trace_data/trace_stdtype/ftrace/render_service_stdtype.cpp b/trace_streamer/src/trace_data/trace_stdtype/ftrace/render_service_stdtype.cpp index 9f5a3ce26..a42e103b1 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/ftrace/render_service_stdtype.cpp +++ b/trace_streamer/src/trace_data/trace_stdtype/ftrace/render_service_stdtype.cpp @@ -34,20 +34,14 @@ size_t FrameSlice::AppendFrame(uint64_t ts, uint32_t ipid, uint32_t itid, uint32 frameNos_.emplace_back(0); return Size() - 1; } -size_t FrameSlice::AppendFrame(uint64_t ts, - uint32_t ipid, - uint32_t itid, - uint32_t vsyncId, - uint64_t callStackSliceId, - uint64_t end, - uint8_t type) -{ - auto row = AppendFrame(ts, ipid, itid, vsyncId, callStackSliceId); - SetEndTime(row, end); - SetType(row, type); +size_t FrameSlice::AppendFrame(const FrameSliceRow &frameSliceRow) +{ + auto row = AppendFrame(frameSliceRow.ts, frameSliceRow.ipid, frameSliceRow.itid, frameSliceRow.vsyncId, frameSliceRow.callStackSliceId); + SetEndTime(row, frameSliceRow.end); + SetType(row, frameSliceRow.type); depths_.emplace_back(0); frameNos_.emplace_back(0); - durs_[row] = end - ts; + durs_[row] =frameSliceRow.end - frameSliceRow.ts; return row; } diff --git a/trace_streamer/src/trace_data/trace_stdtype/ftrace/render_service_stdtype.h b/trace_streamer/src/trace_data/trace_stdtype/ftrace/render_service_stdtype.h index cd11426e9..f19706bd3 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/ftrace/render_service_stdtype.h +++ b/trace_streamer/src/trace_data/trace_stdtype/ftrace/render_service_stdtype.h @@ -23,16 +23,19 @@ namespace SysTuning { namespace TraceStdtype { using namespace SysTuning::TraceStreamer; +struct FrameSliceRow { + uint64_t ts = INVALID_UINT64; + uint32_t ipid = INVALID_UINT32; + uint32_t itid = INVALID_UINT32; + uint32_t vsyncId = INVALID_UINT32; + uint64_t callStackSliceId = INVALID_UINT64; + uint64_t end = INVALID_UINT64; + uint8_t type = INVALID_UINT8; +}; class FrameSlice : public CacheBase, public BatchCacheBase { public: size_t AppendFrame(uint64_t ts, uint32_t ipid, uint32_t itid, uint32_t vsyncId, uint64_t callStackSliceId); - size_t AppendFrame(uint64_t ts, - uint32_t ipid, - uint32_t itid, - uint32_t vsyncId, - uint64_t callStackSliceId, - uint64_t end, - uint8_t type); + size_t AppendFrame(const FrameSliceRow &frameSliceRow); void SetEndTime(uint64_t row, uint64_t end); void SetType(uint64_t row, uint8_t type); void SetDst(uint64_t row, uint64_t dst); diff --git a/trace_streamer/src/trace_data/trace_stdtype/ftrace/sched_stdtype.cpp b/trace_streamer/src/trace_data/trace_stdtype/ftrace/sched_stdtype.cpp index 7b00e16cf..6c5bb1e04 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/ftrace/sched_stdtype.cpp +++ b/trace_streamer/src/trace_data/trace_stdtype/ftrace/sched_stdtype.cpp @@ -118,21 +118,16 @@ TableRowId ThreadStateData::UpdateDuration(TableRowId index, InternalTime ts, In return itids_[index]; } -size_t SchedSlice::AppendSchedSlice(uint64_t ts, - uint64_t dur, - uint64_t cpu, - uint32_t internalTid, - uint64_t endState, - int32_t priority) +size_t SchedSlice::AppendSchedSlice(const SchedSliceRow &schedSliceRow) { ids_.emplace_back(id_++); - timeStamps_.emplace_back(ts); - durs_.emplace_back(dur); - cpus_.emplace_back(cpu); + timeStamps_.emplace_back(schedSliceRow.ts); + durs_.emplace_back(schedSliceRow.dur); + cpus_.emplace_back(schedSliceRow.cpu); tsEnds_.emplace_back(0); - internalTids_.emplace_back(internalTid); - endStates_.emplace_back(endState); - priority_.emplace_back(priority); + internalTids_.emplace_back(schedSliceRow.internalTid); + endStates_.emplace_back(schedSliceRow.endState); + priority_.emplace_back(schedSliceRow.priority); argSets_.emplace_back(INVALID_UINT32); internalPids_.emplace_back(INVALID_UINT32); return Size() - 1; diff --git a/trace_streamer/src/trace_data/trace_stdtype/ftrace/sched_stdtype.h b/trace_streamer/src/trace_data/trace_stdtype/ftrace/sched_stdtype.h index cefe07071..9136599c0 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/ftrace/sched_stdtype.h +++ b/trace_streamer/src/trace_data/trace_stdtype/ftrace/sched_stdtype.h @@ -87,15 +87,18 @@ private: std::deque cpus_; std::deque argSetIds_; }; - +struct SchedSliceRow +{ + uint64_t ts = INVALID_UINT64; + uint64_t dur = INVALID_UINT64; + uint64_t cpu = INVALID_UINT64; + uint32_t internalTid = INVALID_UINT32; + uint64_t endState = INVALID_UINT64; + int32_t priority = INVALID_INT32; +}; class SchedSlice : public CacheBase, public CpuCacheBase, public BatchCacheBase { public: - size_t AppendSchedSlice(uint64_t ts, - uint64_t dur, - uint64_t cpu, - uint32_t internalTid, - uint64_t endState, - int32_t priority); + size_t AppendSchedSlice(const SchedSliceRow &schedSliceRow); void SetDuration(size_t index, uint64_t duration); void Update(uint64_t index, uint64_t ts, uint64_t state); void UpdateEndState(uint64_t index, uint64_t state); diff --git a/trace_streamer/src/trace_data/trace_stdtype/ftrace/template/app_startup_stdtype.cpp b/trace_streamer/src/trace_data/trace_stdtype/ftrace/template/app_startup_stdtype.cpp index 97dcf0f81..72e73c708 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/ftrace/template/app_startup_stdtype.cpp +++ b/trace_streamer/src/trace_data/trace_stdtype/ftrace/template/app_startup_stdtype.cpp @@ -16,21 +16,15 @@ namespace SysTuning { namespace TraceStdtype { -size_t AppStartup::AppendNewData(uint32_t ipid, - uint32_t tid, - uint32_t callId, - uint64_t startTime, - uint64_t endTime, - uint32_t startName, - DataIndex packedName) -{ - ipids_.emplace_back(ipid); - tids_.emplace_back(tid); - callIds_.emplace_back(callId); - startTimes_.emplace_back(startTime); - endTimes_.emplace_back(endTime); - startNames_.emplace_back(startName); - packedNames_.emplace_back(packedName); +size_t AppStartup::AppendNewData(const AppStartupRow &appStartupRow) +{ + ipids_.emplace_back(appStartupRow.ipid); + tids_.emplace_back(appStartupRow.tid); + callIds_.emplace_back(appStartupRow.callId); + startTimes_.emplace_back(appStartupRow.startTime); + endTimes_.emplace_back(appStartupRow.endTime); + startNames_.emplace_back(appStartupRow.startName); + packedNames_.emplace_back(appStartupRow.packedName); ids_.emplace_back(Size()); return Size() - 1; } @@ -63,21 +57,15 @@ const std::deque &AppStartup::PackedNames() const return packedNames_; } -size_t SoStaticInitalization::AppendNewData(uint32_t ipid, - uint32_t tid, - uint32_t callId, - uint64_t startTime, - uint64_t endTime, - DataIndex soName, - uint32_t depth) -{ - ipids_.emplace_back(ipid); - tids_.emplace_back(tid); - callIds_.emplace_back(callId); - startTimes_.emplace_back(startTime); - endTimes_.emplace_back(endTime); - soNames_.emplace_back(soName); - depths_.emplace_back(depth); +size_t SoStaticInitalization::AppendNewData(const SoStaticInitalizationRow &soStaticInitalizationRow) +{ + ipids_.emplace_back(soStaticInitalizationRow.ipid); + tids_.emplace_back(soStaticInitalizationRow.tid); + callIds_.emplace_back(soStaticInitalizationRow.callId); + startTimes_.emplace_back(soStaticInitalizationRow.startTime); + endTimes_.emplace_back(soStaticInitalizationRow.endTime); + soNames_.emplace_back(soStaticInitalizationRow.soName); + depths_.emplace_back(soStaticInitalizationRow.depth); ids_.emplace_back(Size()); return Size() - 1; } diff --git a/trace_streamer/src/trace_data/trace_stdtype/ftrace/template/app_startup_stdtype.h b/trace_streamer/src/trace_data/trace_stdtype/ftrace/template/app_startup_stdtype.h index bb9a3718b..01d067e11 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/ftrace/template/app_startup_stdtype.h +++ b/trace_streamer/src/trace_data/trace_stdtype/ftrace/template/app_startup_stdtype.h @@ -19,15 +19,18 @@ namespace SysTuning { namespace TraceStdtype { +struct AppStartupRow { + uint32_t ipid = INVALID_UINT32; + uint32_t tid = INVALID_UINT32; + uint32_t callId = INVALID_UINT32; + uint64_t startTime = INVALID_UINT64; + uint64_t endTime = INVALID_UINT64; + uint32_t startName = INVALID_UINT32; + DataIndex packedName = INVALID_UINT64; +}; class AppStartup : public CacheBase { public: - size_t AppendNewData(uint32_t ipid, - uint32_t tid, - uint32_t callId, - uint64_t startTime, - uint64_t endTime, - uint32_t startName, - DataIndex packedName); + size_t AppendNewData(const AppStartupRow &appStartupRow); const std::deque &Pids() const; const std::deque &Tids() const; const std::deque &CallIds() const; @@ -57,16 +60,18 @@ private: std::deque startNames_ = {}; std::deque packedNames_ = {}; }; - +struct SoStaticInitalizationRow { + uint32_t ipid = INVALID_UINT32; + uint32_t tid = INVALID_UINT32; + uint32_t callId = INVALID_UINT32; + uint64_t startTime = INVALID_UINT64; + uint64_t endTime = INVALID_UINT64; + DataIndex soName = INVALID_UINT64; + uint32_t depth = INVALID_UINT32; +}; class SoStaticInitalization : public CacheBase { public: - size_t AppendNewData(uint32_t ipid, - uint32_t tid, - uint32_t callId, - uint64_t startTime, - uint64_t endTime, - DataIndex soName, - uint32_t depth); + size_t AppendNewData(const SoStaticInitalizationRow &soStaticInitalizationRow); const std::deque &Pids() const; const std::deque &Tids() const; const std::deque &CallIds() const; diff --git a/trace_streamer/src/trace_data/trace_stdtype/hilog/hilog_stdtype.cpp b/trace_streamer/src/trace_data/trace_stdtype/hilog/hilog_stdtype.cpp index afa357139..b7d53800c 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/hilog/hilog_stdtype.cpp +++ b/trace_streamer/src/trace_data/trace_stdtype/hilog/hilog_stdtype.cpp @@ -16,23 +16,16 @@ namespace SysTuning { namespace TraceStdtype { -size_t LogInfo::AppendNewLogInfo(uint64_t seq, - uint64_t timeStamp, - uint32_t pid, - uint32_t tid, - DataIndex level, - DataIndex tag, - DataIndex context, - uint64_t originTs) -{ - hilogLineSeqs_.emplace_back(seq); - timeStamps_.emplace_back(timeStamp); - pids_.emplace_back(pid); - tids_.emplace_back(tid); - levels_.emplace_back(level); - tags_.emplace_back(tag); - contexts_.emplace_back(context); - originTs_.emplace_back(originTs); +size_t LogInfo::AppendNewLogInfo(const LogInfoRow &logInfoRow) +{ + hilogLineSeqs_.emplace_back(logInfoRow.seq); + timeStamps_.emplace_back(logInfoRow.timeStamp); + pids_.emplace_back(logInfoRow.pid); + tids_.emplace_back(logInfoRow.tid); + levels_.emplace_back(logInfoRow.level); + tags_.emplace_back(logInfoRow.tag); + contexts_.emplace_back(logInfoRow.context); + originTs_.emplace_back(logInfoRow.originTs); return Size() - 1; } const std::deque &LogInfo::HilogLineSeqs() const diff --git a/trace_streamer/src/trace_data/trace_stdtype/hilog/hilog_stdtype.h b/trace_streamer/src/trace_data/trace_stdtype/hilog/hilog_stdtype.h index 4af04b93b..559af2b4b 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/hilog/hilog_stdtype.h +++ b/trace_streamer/src/trace_data/trace_stdtype/hilog/hilog_stdtype.h @@ -19,16 +19,19 @@ namespace SysTuning { namespace TraceStdtype { + struct LogInfoRow { + uint64_t seq = INVALID_UINT64; + uint64_t timeStamp = INVALID_UINT64; + uint32_t pid = INVALID_UINT32; + uint32_t tid = INVALID_UINT32; + DataIndex level = INVALID_UINT64; + DataIndex tag = INVALID_UINT64; + DataIndex context = INVALID_UINT64; + uint64_t originTs = INVALID_UINT64; +}; class LogInfo : public CacheBase { public: - size_t AppendNewLogInfo(uint64_t seq, - uint64_t timeStamp, - uint32_t pid, - uint32_t tid, - DataIndex level, - DataIndex tag, - DataIndex context, - uint64_t originTs); + size_t AppendNewLogInfo(const LogInfoRow &logInfoRow); const std::deque &HilogLineSeqs() const; const std::deque &Pids() const; const std::deque &Tids() const; diff --git a/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.cpp b/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.cpp index b3b74c40f..22555340d 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.cpp +++ b/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.cpp @@ -114,24 +114,17 @@ void PerfFiles::Clear() filePaths_.clear(); } -size_t PerfSample::AppendNewPerfSample(uint32_t sampleId, - uint64_t timeStamp, - uint32_t tid, - uint64_t eventCount, - uint64_t eventTypeId, - uint64_t timestampTrace, - uint64_t cpuId, - uint64_t threadState) +size_t PerfSample::AppendNewPerfSample(const PerfSampleRow &perfSampleRow) { ids_.emplace_back(Size()); - sampleIds_.emplace_back(sampleId); - timeStamps_.emplace_back(timeStamp); - tids_.emplace_back(tid); - eventCounts_.emplace_back(eventCount); - eventTypeIds_.emplace_back(eventTypeId); - timestampTraces_.emplace_back(timestampTrace); - cpuIds_.emplace_back(cpuId); - threadStates_.emplace_back(threadState); + sampleIds_.emplace_back(perfSampleRow.sampleId); + timeStamps_.emplace_back(perfSampleRow.timeStamp); + tids_.emplace_back(perfSampleRow.tid); + eventCounts_.emplace_back(perfSampleRow.eventCount); + eventTypeIds_.emplace_back(perfSampleRow.eventTypeId); + timestampTraces_.emplace_back(perfSampleRow.timestampTrace); + cpuIds_.emplace_back(perfSampleRow.cpuId); + threadStates_.emplace_back(perfSampleRow.threadState); return Size() - 1; } const std::deque &PerfSample::SampleIds() const diff --git a/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.h b/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.h index d55417541..5416ff769 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.h +++ b/trace_streamer/src/trace_data/trace_stdtype/hiperf/hiperf_stdtype.h @@ -70,17 +70,19 @@ private: std::deque symbols_ = {}; std::deque filePaths_ = {}; }; - +struct PerfSampleRow { + uint32_t sampleId = INVALID_UINT32; + uint64_t timeStamp = INVALID_UINT64; + uint32_t tid = INVALID_UINT32; + uint64_t eventCount = INVALID_UINT64; + uint64_t eventTypeId = INVALID_UINT64; + uint64_t timestampTrace = INVALID_UINT64; + uint64_t cpuId = INVALID_UINT64; + uint64_t threadState = INVALID_UINT64; +}; class PerfSample : public CacheBase { public: - size_t AppendNewPerfSample(uint32_t sampleId, - uint64_t timeStamp, - uint32_t tid, - uint64_t eventCount, - uint64_t eventTypeId, - uint64_t timestampTrace, - uint64_t cpuId, - uint64_t threadState); + size_t AppendNewPerfSample(const PerfSampleRow &perfSampleRow); const std::deque &SampleIds() const; const std::deque &Tids() const; const std::deque &EventCounts() const; diff --git a/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.cpp b/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.cpp index 6e0c38180..1bdf5b73a 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.cpp +++ b/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.cpp @@ -178,35 +178,22 @@ const std::deque &HiSysEventDeviceStateData::StreamAll() const return streamAlls_; } -uint32_t HiSysEventAllEventData::AppendHiSysEventData(DataIndex domainId, - DataIndex eventNameId, - uint64_t timeStamp, - uint32_t type, - const std::string &timeZone, - uint32_t pid, - uint32_t tid, - uint32_t uid, - const std::string &level, - const std::string &tag, - const std::string &eventId, - uint64_t seq, - const std::string &info, - const std::string &content) -{ - domainIds_.emplace_back(domainId); - eventNameIds_.emplace_back(eventNameId); - timeStamps_.emplace_back(timeStamp); - types_.emplace_back(type); - timeZones_.emplace_back(timeZone); - pids_.emplace_back(pid); - tids_.emplace_back(tid); - uids_.emplace_back(uid); - levels_.emplace_back(level); - tags_.emplace_back(tag); - eventIds_.emplace_back(eventId); - seqs_.emplace_back(seq); - infos_.emplace_back(info); - contents_.emplace_back(content); +uint32_t HiSysEventAllEventData::AppendHiSysEventData(const HiSysEventAllEventDataRow &hiSysEventAllEventDataRow) +{ + domainIds_.emplace_back(hiSysEventAllEventDataRow.domainId); + eventNameIds_.emplace_back(hiSysEventAllEventDataRow.eventNameId); + timeStamps_.emplace_back(hiSysEventAllEventDataRow.timeStamp); + types_.emplace_back(hiSysEventAllEventDataRow.type); + timeZones_.emplace_back(hiSysEventAllEventDataRow.timeZone); + pids_.emplace_back(hiSysEventAllEventDataRow.pid); + tids_.emplace_back(hiSysEventAllEventDataRow.tid); + uids_.emplace_back(hiSysEventAllEventDataRow.uid); + levels_.emplace_back(hiSysEventAllEventDataRow.level); + tags_.emplace_back(hiSysEventAllEventDataRow.tag); + eventIds_.emplace_back(hiSysEventAllEventDataRow.eventId); + seqs_.emplace_back(hiSysEventAllEventDataRow.seq); + infos_.emplace_back(hiSysEventAllEventDataRow.info); + contents_.emplace_back(hiSysEventAllEventDataRow.content); ids_.emplace_back(Size()); return Size() - 1; } diff --git a/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.h b/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.h index 5c05a4503..100c69ee4 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.h +++ b/trace_streamer/src/trace_data/trace_stdtype/hisysevent/hisysevent_stdtype.h @@ -178,23 +178,25 @@ private: std::deque streamAlls_ = {}; uint32_t rowCounts_ = 0; }; - +struct HiSysEventAllEventDataRow { + DataIndex domainId = INVALID_UINT64; + DataIndex eventNameId = INVALID_UINT64; + uint64_t timeStamp = INVALID_UINT64; + uint32_t type = INVALID_UINT32; + std::string timeZone; + uint32_t pid = INVALID_UINT32; + uint32_t tid = INVALID_UINT32; + uint32_t uid = INVALID_UINT32; + std::string level; + std::string tag; + std::string eventId; + uint64_t seq = INVALID_UINT64; + std::string info; + std::string content; +}; class HiSysEventAllEventData : public CacheBase { public: - uint32_t AppendHiSysEventData(DataIndex domainId, - DataIndex eventNameId, - uint64_t timeStamp, - uint32_t type, - const std::string &timeZone, - uint32_t pid, - uint32_t tid, - uint32_t uid, - const std::string &level, - const std::string &tag, - const std::string &eventId, - uint64_t seq, - const std::string &info, - const std::string &content); + uint32_t AppendHiSysEventData(const HiSysEventAllEventDataRow &hiSysEventAllEventDataRow); const std::deque &DomainIds() const; const std::deque &EventNameIds() const; const std::deque &Types() const; diff --git a/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.cpp b/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.cpp index c85693db6..0cfee62e6 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.cpp +++ b/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.cpp @@ -262,23 +262,15 @@ const std::deque &NativeHookFrame::Vaddrs() const return vaddrs_; } -size_t NativeHookStatistic::AppendNewNativeHookStatistic(uint32_t ipid, - uint64_t timeStamp, - uint32_t callChainId, - uint32_t memoryType, - DataIndex subMemType, - uint64_t applyCount, - uint64_t releaseCount, - uint64_t applySize, - uint64_t releaseSize) -{ - AppendNativeHookSampleBase(callChainId, ipid, timeStamp); - memoryTypes_.emplace_back(memoryType); - applyCounts_.emplace_back(applyCount); - memSubTypes_.emplace_back(subMemType); - releaseCounts_.emplace_back(releaseCount); - applySizes_.emplace_back(applySize); - releaseSizes_.emplace_back(releaseSize); +size_t NativeHookStatistic::AppendNewNativeHookStatistic(const NativeHookStatisticRow &nativeHookStatisticRow) +{ + AppendNativeHookSampleBase(nativeHookStatisticRow.callChainId, nativeHookStatisticRow.ipid, nativeHookStatisticRow.timeStamp); + memoryTypes_.emplace_back(nativeHookStatisticRow.memoryType); + applyCounts_.emplace_back(nativeHookStatisticRow.applyCount); + memSubTypes_.emplace_back(nativeHookStatisticRow.subMemType); + releaseCounts_.emplace_back(nativeHookStatisticRow.releaseCount); + applySizes_.emplace_back(nativeHookStatisticRow.applySize); + releaseSizes_.emplace_back(nativeHookStatisticRow.releaseSize); return Size() - 1; } diff --git a/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.h b/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.h index 599d04d26..e297385f5 100644 --- a/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.h +++ b/trace_streamer/src/trace_data/trace_stdtype/htrace/native_memory_stdtype.h @@ -199,18 +199,20 @@ private: std::deque vaddrs_ = {}; std::map symbolIdToSymbolName_ = {}; }; - +struct NativeHookStatisticRow { + uint32_t ipid = INVALID_UINT32; + uint64_t timeStamp = INVALID_UINT64; + uint32_t callChainId = INVALID_UINT32; + uint32_t memoryType = INVALID_UINT32; + DataIndex subMemType = INVALID_UINT64; + uint64_t applyCount = INVALID_UINT64; + uint64_t releaseCount = INVALID_UINT64; + uint64_t applySize = INVALID_UINT64; + uint64_t releaseSize = INVALID_UINT64; +}; class NativeHookStatistic : public NativeHookSampleBase { public: - size_t AppendNewNativeHookStatistic(uint32_t ipid, - uint64_t timeStamp, - uint32_t callChainId, - uint32_t memoryType, - DataIndex subMemType, - uint64_t applyCount, - uint64_t releaseCount, - uint64_t applySize, - uint64_t releaseSize); + size_t AppendNewNativeHookStatistic(const NativeHookStatisticRow &nativeHookStatisticRow); const std::deque &MemoryTypes() const; const std::deque &MemorySubTypes() const; const std::deque &ApplyCounts() const; diff --git a/trace_streamer/test/unittest/filter/animation_filter_test.cpp b/trace_streamer/test/unittest/filter/animation_filter_test.cpp index 76effc848..53f3ff640 100644 --- a/trace_streamer/test/unittest/filter/animation_filter_test.cpp +++ b/trace_streamer/test/unittest/filter/animation_filter_test.cpp @@ -92,8 +92,9 @@ HWTEST_F(AnimationFilterTest, InvalidCallStack, TestSize.Level1) // invalid parentId for (size_t i = 0, depth = 0; i < callStackNames.size(); i++) { std::optional parentId = 0; - callStackSlice->AppendInternalSlice(INVALID_TIME, INVALID_TIME, INVALID_UINT32, INVALID_UINT64, - callStackNames[i], ++depth, parentId); + CallStackInternalRow callStackInternalRow = {INVALID_TIME, INVALID_TIME, INVALID_UINT32, INVALID_UINT64, + callStackNames[i], ++depth}; + callStackSlice->AppendInternalSlice(callStackInternalRow, parentId); point.funcPrefix_ = funcPrefixs[1]; auto res = stream_.streamFilters_->animationFilter_->BeginDynamicFrameEvent(point, CALLSTACK_SLICE_ID); EXPECT_FALSE(res); @@ -106,8 +107,9 @@ HWTEST_F(AnimationFilterTest, InvalidCallStack, TestSize.Level1) parentId = index; } depth = i + 1; - index = callStackSlice->AppendInternalSlice(INVALID_TIME, INVALID_TIME, INVALID_UINT32, INVALID_UINT64, - callStackNames[i], depth, parentId); + CallStackInternalRow callStackInternalRow1 = {INVALID_TIME, INVALID_TIME, INVALID_UINT32, INVALID_UINT64, + callStackNames[i], depth}; + index = callStackSlice->AppendInternalSlice(callStackInternalRow1, parentId); } point.funcPrefix_ = funcPrefixs[1]; point.name_ = invalidName; @@ -237,8 +239,8 @@ HWTEST_F(AnimationFilterTest, UpdateDynamicFrameInfo, TestSize.Level1) parentId = index; } depth = i + 1; - index = callStackSlice->AppendInternalSlice(startTime, dur, INVALID_UINT32, INVALID_UINT64, callStackNames[i], - depth, parentId); + CallStackInternalRow callStackInternalRow2 = {startTime, dur, INVALID_UINT32, INVALID_UINT64, callStackNames[i],depth}; + index = callStackSlice->AppendInternalSlice(callStackInternalRow2, parentId); } point.funcPrefix_ = funcPrefix; point.name_ = stream_.traceDataCache_->GetDataFromDict(callStackNames.back()); @@ -268,8 +270,8 @@ HWTEST_F(AnimationFilterTest, AnimationStartAndEnd, TestSize.Level1) DataIndex callStackName = stream_.traceDataCache_->GetDataIndex( "H:RSUniRender::Process:[WindowScene_xxx] (0, 0, 1344, 2772) Alpha: 1.00"); - auto callStackRow = callStackSlice->AppendInternalSlice(line.ts, dur, INVALID_UINT32, INVALID_UINT64, callStackName, - depth, parentId); + CallStackInternalRow callStackInternalRow3 = {line.ts, dur, INVALID_UINT32, INVALID_UINT64, callStackName,depth}; + auto callStackRow = callStackSlice->AppendInternalSlice(callStackInternalRow3, parentId); TracePoint point; point.name_ = "H:APP_LIST_FLING, com.taobao.taobao, pages/Index, 1693876205590."; diff --git a/trace_streamer/test/unittest/table/table_test.cpp b/trace_streamer/test/unittest/table/table_test.cpp index 9c3bb288d..a71b3cc37 100644 --- a/trace_streamer/test/unittest/table/table_test.cpp +++ b/trace_streamer/test/unittest/table/table_test.cpp @@ -140,10 +140,10 @@ HWTEST_F(TableTest, CallstackTableTest, TestSize.Level1) const std::optional &parentId1 = 1; stream_.traceDataCache_->InitDB(); - stream_.traceDataCache_->GetInternalSlicesData()->AppendInternalAsyncSlice(startT, durationNs, internalTid, cat, - name, depth, cookid, parentId); - stream_.traceDataCache_->GetInternalSlicesData()->AppendInternalAsyncSlice(startT1, durationNs1, internalTid1, cat1, - name1, depth1, cookid1, parentId1); + CallStackInternalRow callStackInternalRow = {startT, durationNs, internalTid, cat,name, depth}; + CallStackInternalRow callStackInternalRow1 = {startT1, durationNs1, internalTid1, cat1,name1, depth1}; + stream_.traceDataCache_->GetInternalSlicesData()->AppendInternalAsyncSlice(callStackInternalRow, cookid, parentId); + stream_.traceDataCache_->GetInternalSlicesData()->AppendInternalAsyncSlice(callStackInternalRow1, cookid1, parentId1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect, false), 2); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect1, false), 1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect2, false), 0); @@ -606,10 +606,10 @@ HWTEST_F(TableTest, IrqTableTest, TestSize.Level1) uint8_t depth1 = 2; const std::optional &parentId1 = 2; - stream_.traceDataCache_->GetIrqData()->AppendInternalSlice(startT, durationNs, internalTid, cat, name, depth, - parentId); - stream_.traceDataCache_->GetIrqData()->AppendInternalSlice(startT1, durationNs1, internalTid1, cat1, name1, depth1, - parentId1); + CallStackInternalRow callStackInternalRow = {startT, durationNs, internalTid, cat, name, depth}; + CallStackInternalRow callStackInternalRow1 = {startT1, durationNs1, internalTid1, cat1, name1, depth1}; + stream_.traceDataCache_->GetIrqData()->AppendInternalSlice(callStackInternalRow,parentId); + stream_.traceDataCache_->GetIrqData()->AppendInternalSlice(callStackInternalRow1,parentId1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect, false), 2); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect1, false), 2); } @@ -662,8 +662,8 @@ HWTEST_F(TableTest, LogTableTest, TestSize.Level1) DataIndex tag = stream_.traceDataCache_->GetDataIndex("tag"); DataIndex context = stream_.traceDataCache_->GetDataIndex("context"); uint64_t originTs = 1; - - stream_.traceDataCache_->GetHilogData()->AppendNewLogInfo(seq, timeStamp, pid, tid, level, tag, context, originTs); + LogInfoRow logInfoRow = {seq, timeStamp, pid, tid, level, tag, context, originTs}; + stream_.traceDataCache_->GetHilogData()->AppendNewLogInfo(logInfoRow); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect, false), 1); } /** @@ -941,10 +941,10 @@ HWTEST_F(TableTest, PerfSampleTableTest, TestSize.Level1) uint64_t cpuId1 = 2; uint64_t threadState1 = stream_.traceDataCache_->GetDataIndex("threadState1"); - stream_.traceDataCache_->GetPerfSampleData()->AppendNewPerfSample(sampleId, timeStamp, tid, eventCount, eventTypeId, - timestampTrace, cpuId, threadState); - stream_.traceDataCache_->GetPerfSampleData()->AppendNewPerfSample( - sampleId1, timestamp1, tid1, eventCount1, eventTypeId1, timestampTrace1, cpuId1, threadState1); + PerfSampleRow perfSampleRow = {sampleId, timestamp, tid, eventCount, eventTypeId, timestampTrace, cpuId, threadState}; + PerfSampleRow perfSampleRow1 = {sampleId1, timestamp1, tid1, eventCount1, eventTypeId1, timestampTrace1, cpuId1, threadState1}; + stream_.traceDataCache_->GetPerfSampleData()->AppendNewPerfSample(perfSampleRow); + stream_.traceDataCache_->GetPerfSampleData()->AppendNewPerfSample(perfSampleRow1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect, false), 2); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect1, false), 1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect2, false), 2); @@ -1097,8 +1097,10 @@ HWTEST_F(TableTest, SchedSliceTest, TestSize.Level1) uint64_t endState1 = 2; uint64_t priority1 = 2; - stream_.traceDataCache_->GetSchedSliceData()->AppendSchedSlice(ts, dur, cpu, internalTid, endState, priority); - stream_.traceDataCache_->GetSchedSliceData()->AppendSchedSlice(ts1, dur1, cpu1, internalTid1, endState1, priority1); + SchedSliceRow schedSliceRow = {ts,dur,cpu,internalTid,endState,priority}; + SchedSliceRow schedSliceRow1 = {ts1,dur1,cpu1,internalTid1,endState1,priority1}; + stream_.traceDataCache_->GetSchedSliceData()->AppendSchedSlice(schedSliceRow); + stream_.traceDataCache_->GetSchedSliceData()->AppendSchedSlice(schedSliceRow1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect, false), 2); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect1, false), 1); EXPECT_EQ(stream_.traceDataCache_->SearchDatabase(sqlSelect2, false), 2); -- Gitee