diff --git a/README_zh.md b/README_zh.md
index b01b7e41e86b4a9ea9947ab326dc222150c9e824..8e4603ba5e93624ba06351809e648d00b0d4cce0 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -6,7 +6,7 @@ Smartperf_Host是一款深入挖掘数据、细粒度地展示数据的性能功
该组件整体分为设备端和PC端两部分,设备端和PC端基于gRPC(Remote Procedure Call)通信框架进行数据交互。
-设备端内部分为应用程序内嵌组件、命令行工具、性能调优服务、性能调优插件集合、部分系统工具及部分系统内核等模块。设备端提供了插件扩展能力,对外提供了插件接口,基于该扩展能力可以按需定义自己的能力,并集成到框架中来,目前基于插件能力已经完成了native内存插件、trace插件等,详细介绍见[性能调优组件](https://gitee.com/openharmony/developtools_profiler)。
+设备端的内部分为应用程序内嵌组件、命令行工具、性能调优服务、性能调优插件集合、部分系统工具及部分系统内核等模块。设备端提供了插件扩展能力,对外提供了插件接口,基于该扩展能力可以按需定义自己的能力,并集成到框架中来,目前基于插件能力已经完成了native内存插件、trace插件等,详细介绍见[性能调优组件](https://gitee.com/openharmony/developtools_profiler)。
PC端以Smartperf_Host网站的形式进行发布,内部分为Trace Streamer数据解析、SQLite数据存储、hdc设备管理、数据导入、UI绘制、数据分析等模块。下文会重点对Smartperf_Host提供的各项能力进行介绍。
## 项目目录
@@ -43,7 +43,7 @@ PC端以Smartperf_Host网站的形式进行发布,内部分为Trace Streamer
### Native Memory抓取
使用Smartperf_Host抓取应用的Native Memory(C和C++部分)的分配和释放情况,详见《[Native Memory抓取和展示说明](./ide/src/doc/md/quickstart_native_memory.md)》。
### Hiperf抓取
-使用Smartperf_Host抓取应用的cpu使用量、方法的调用栈等,详见《[HiPerf的抓取和展示说明](./ide/src/doc/md/quickstart_hiperf.md)》。
+使用Smartperf_Host抓取应用的cpu使用量、方法的调用栈等,详见《[Hiperf的抓取和展示说明](./ide/src/doc/md/quickstart_hiperf.md)》。
### HiSystemEvent抓取
使用Smartperf_Host抓取应用的各个子类别功耗占比(CPU、网络、定位等)、应用的资源申请使用记录(WorkScheduler、Runninglock、Alarm、Location Request)、应用功耗异常事件显示、功耗关联系统状态显示(电池电量、屏幕状态),详见《[HiSystemEvent的抓取和展示说明](./ide/src/doc/md/quickstart_hisystemevent.md)》。
### FileSystem抓取
@@ -53,7 +53,7 @@ PC端以Smartperf_Host网站的形式进行发布,内部分为Trace Streamer
### Bio抓取
使用Smartperf_Host抓取每次IO访问的起始时间、总延迟、进程、每4k数据的平均延迟、线程、操作(写数据、页面换入、Metadata)、访问量、路径等、Block number、优先级、Backtrace调用栈,详见《[Bio的抓取和展示说明](./ide/src/doc/md/quickstart_bio.md)》。
### 进程Smaps抓取
-使用Smartperf_Host抓取单个进程的smaps数据(类别、Pss、Rss、Vss等),数据源为/proc/$pid/smaps,详见《[进程smaps的抓取和展示说明](./ide/src/doc/md/quickstart_smaps.md)》。
+使用Smartperf_Host抓取单个进程的smaps数据(类别、Pss、Rss、Vss等),数据源为/proc/$pid/smaps,详见《[进程smaps的抓取和展示说明](https://gitee.com/openharmony/developtools_smartperf_host/blob/master/ide/src/doc/md/quickstart_memory_template.md)》。
### Sql分析和Metrics说明
Smartperf_Host网站trace解析完成后在线数据库使用说明,详见《[Sql分析和Metrics说明](./ide/src/doc/md/quickstart_sql_metrics.md)》。
## 发行版指南
diff --git a/ide/README_zh.md b/ide/README_zh.md
index 73bb46757b4df10b7140eceb9a44911f114f62dc..5570eddd2c23b95be7be321797b1104de8abb064 100644
--- a/ide/README_zh.md
+++ b/ide/README_zh.md
@@ -5,7 +5,7 @@
注意:在linux编译环境安装时以root或者其他 sudo 用户身份运行下面的命令。
### node 环境安装
##### 下载Node js安装包(windows推荐, linux跳过此步骤)
-从网站下载node js安装包 https://nodejs.org/en/download/current/。
+从网站下载node js安装包 https://nodejs.org/en/download/current/ 。
##### 安装nodejs
- ubuntu 20.04 与Debian 11系统中,直接用apt-get安装,先切换到 root用户下,命令如下(node 版本 >= 16.15.1 npm 版本 >= 8.13.2)
```
@@ -65,7 +65,7 @@
```

-- windows 系统下 从 https://golang.google.cn/dl/ 下载安装包, 一路next 完成 安装即可
+- windows 系统下 从官网下载安装包, 一路next 完成 安装即可
- 安装完成后 命令行运行验证是否安装成功
@@ -109,6 +109,6 @@

- 备注:如果未出现如图所示网页.而是显示 无法访问此网站。
+ 备注:如果未出现如图所示网页,而是显示无法访问此网站。
可以在window cmd 里执行telnet [部署机器ip地址] 9000。
-如果显示端口连接失败 可能是防火墙未对9000 端口放开即可。
\ No newline at end of file
+如果显示端口连接失败,可能是防火墙未对9000 端口放开。
\ No newline at end of file
diff --git a/ide/server/main.go b/ide/server/main.go
index a8c8af502028336cbb57c40c521222e6cb850932..dfd1fbdf67eb42f14e8097afca0c7745979e7a65 100644
--- a/ide/server/main.go
+++ b/ide/server/main.go
@@ -17,13 +17,16 @@ package main
import (
"bufio"
"bytes"
+ "crypto"
"crypto/rand"
"crypto/rsa"
"crypto/tls"
"crypto/x509"
"crypto/x509/pkix"
+ "encoding/base64"
"encoding/json"
"encoding/pem"
+ "flag"
"fmt"
"io"
"io/fs"
@@ -42,13 +45,14 @@ import (
"strconv"
"strings"
"time"
- "flag"
)
const HttpPort = 9000
var exPath string
var serveInfo string
+var hdcPublicKey string
+var hdcPrivateKey *rsa.PrivateKey
// CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
// CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
@@ -81,6 +85,7 @@ func exist(path string) bool {
}
return true
}
+
func genSSL() {
if exist("cert/keyFile.key") || exist("cert/certFile.pem") {
fmt.Println("keyFile.key exists")
@@ -112,18 +117,44 @@ func genSSL() {
pem.Encode(keyOut, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(pk)})
keyOut.Close()
}
+
+func genRsa() {
+ // generate hdc private key
+ privateKey, err := rsa.GenerateKey(rand.Reader, 3072)
+ if err != nil {
+ fmt.Println("Generate hdc rsa private key failed")
+ return
+ }
+ hdcPrivateKey = privateKey
+
+ // generate hdc public key
+ publicKey := &privateKey.PublicKey
+ pkixPublicKey, err := x509.MarshalPKIXPublicKey(publicKey)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ publicKeyBlock := &pem.Block{
+ Type: "PUBLIC KEY",
+
+ Bytes: pkixPublicKey,
+ }
+ hdcPublicKey = string(pem.EncodeToMemory(publicKeyBlock))
+}
+
func main() {
- port := HttpPort
- isOpen := 1
- flag.IntVar(&port, "p", HttpPort, "The port number used")
- flag.IntVar(&isOpen, "o", 1 , "Whether to immediately open the website in your browser; 1 is true; 0 is false")
- flag.Parse()
- if isOpen < 0 || isOpen > 1 {
- fmt.Println("Error: -o must be 0 or 1")
- return
- }
+ port := HttpPort
+ isOpen := 1
+ flag.IntVar(&port, "p", HttpPort, "The port number used")
+ flag.IntVar(&isOpen, "o", 1, "Whether to immediately open the website in your browser; 1 is true; 0 is false")
+ flag.Parse()
+ if isOpen < 0 || isOpen > 1 {
+ fmt.Println("Error: -o must be 0 or 1")
+ return
+ }
checkPort(port)
genSSL()
+ genRsa()
exPath = getCurrentAbPath()
fmt.Println(exPath)
go func() {
@@ -143,6 +174,8 @@ func main() {
mux.Handle("/application/upload/", http.StripPrefix("/application/upload/", http.FileServer(http.Dir(filepath.FromSlash(exPath+"/upload")))))
mux.HandleFunc("/application/download-file", downloadHandler)
mux.HandleFunc("/application/serverInfo", serverInfo)
+ mux.HandleFunc("/application/hdcPublicKey", getHdcPublicKey)
+ mux.HandleFunc("/application/encryptHdcMsg", encryptHdcMsg)
fs := http.FileServer(http.Dir(exPath + "/"))
mux.Handle("/application/", http.StripPrefix("/application/", cors(fs, version)))
go func() {
@@ -163,9 +196,9 @@ func main() {
err := ser.ListenAndServe()
CheckErr(err)
}()
- if (isOpen == 1){
- open(fmt.Sprintf("https://localhost:%d/application", port))
- }
+ if isOpen == 1 {
+ open(fmt.Sprintf("https://localhost:%d/application", port))
+ }
}()
select {}
}
@@ -219,6 +252,32 @@ func serverInfo(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200)
}
+func getHdcPublicKey(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Access-Control-Allow-Origin", "*")
+ w.Header().Set("Content-Type", "text/json")
+ resp(&w)(true, 0, "success", map[string]interface{}{
+ "publicKey": hdcPublicKey,
+ })
+}
+
+func encryptHdcMsg(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Access-Control-Allow-Origin", "*")
+ w.Header().Set("Content-Type", "text/json")
+ hdcMsg := r.URL.Query().Get("message")
+ if len(hdcMsg) == 0 {
+ resp(&w)(false, -1, "Invalid message", nil)
+ return
+ }
+ signatures, err := rsa.SignPKCS1v15(nil, hdcPrivateKey, crypto.Hash(0), []byte(hdcMsg))
+ if err != nil {
+ resp(&w)(false, -1, "sign failed", nil)
+ } else {
+ resp(&w)(true, 0, "success", map[string]interface{}{
+ "signatures": base64.StdEncoding.EncodeToString(signatures),
+ })
+ }
+}
+
func readReqServerConfig() string {
readServerConfig, serverConfigErr := os.ReadFile(exPath + "/server-config.txt")
if serverConfigErr != nil {
diff --git a/ide/src/base-ui/select/LitSelect.ts b/ide/src/base-ui/select/LitSelect.ts
index 2623052e730b968a689b6cd4d6c3c240182d478c..05b7aa02fd44a1d5fe54309eb7b9790ddfbbea99 100644
--- a/ide/src/base-ui/select/LitSelect.ts
+++ b/ide/src/base-ui/select/LitSelect.ts
@@ -168,7 +168,17 @@ export class LitSelect extends BaseElement {
// @ts-ignore
this.bodyEl!.style.display = 'flex';
this.querySelectorAll('lit-select-option').forEach((a) => {
- this.removeChild(a)
+ this.removeChild(a);
+ });
+ let valuesSet = new Set();
+ let flag = true; // 假设所有 value 都是唯一的
+ // @ts-ignore
+ selectDataSource.forEach(item => {
+ if (valuesSet.has(item.value)) {
+ flag = false; // 如果value有重复,就设置flag为false
+ return;
+ }
+ valuesSet.add(item.value);
});
// @ts-ignore
selectDataSource.forEach((dateSourceBean: unknown) => {
@@ -179,6 +189,13 @@ export class LitSelect extends BaseElement {
value: dateSourceBean.value ? dateSourceBean.value : dateSourceBean.name || dateSourceBean, // @ts-ignore
name: dateSourceBean.name ? dateSourceBean.name : dateSourceBean,
};
+ if (!flag) { // 如果数组的value值不是唯一的,就用name做为value值,避免多个选项被选中
+ optionData = {
+ // @ts-ignore
+ value: dateSourceBean.name ? dateSourceBean.name : dateSourceBean, // @ts-ignore
+ name: dateSourceBean.name ? dateSourceBean.name : dateSourceBean,
+ };
+ }
selectOption.textContent = optionData.name;
selectOption.setAttribute('value', optionData.value);
if (this.currentSelectedValue === optionData.value) {
@@ -515,6 +532,9 @@ export class LitSelect extends BaseElement {
a.setAttribute('selected', '');
}
} else {
+ if (a.hasAttribute('selected')) {
+ a.removeAttribute('selected');
+ }
if (a.getAttribute('value') === this.defaultValue) {
// @ts-ignore
this.selectInputEl.value = a.textContent;
diff --git a/ide/src/base-ui/table/lit-table.ts b/ide/src/base-ui/table/lit-table.ts
index 59a611ccd5adc8e8b0e7c13df781af5b50160f6b..f1bc7e89cec51aedb1b8994fe8238694d8ce39c4 100644
--- a/ide/src/base-ui/table/lit-table.ts
+++ b/ide/src/base-ui/table/lit-table.ts
@@ -1170,7 +1170,7 @@ export class LitTable extends HTMLElement {
if (column.template) {
if (
// @ts-ignore
- (dataIndex === 'color' && rowData.data.colorEl === undefined) || // @ts-ignore
+ (dataIndex === 'color' && rowData.data.color === undefined) || // @ts-ignore
(dataIndex === 'text' && rowData.data.text === undefined)
) {
// @ts-ignore
diff --git a/ide/src/base-ui/tabs/lit-tabs.ts b/ide/src/base-ui/tabs/lit-tabs.ts
index b296b9ea0352d7ad8249e998caa7754b8692af71..75935c8f16a7ac1aea3e34401dbeae8a3be5657b 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/utils/CSVFormater.ts b/ide/src/base-ui/utils/CSVFormater.ts
index 2f7326e9a3ca8400348a9428fa5ab3113d0a2dbf..5942db5418a0a4d27ab757a385241230ffb3dc79 100644
--- a/ide/src/base-ui/utils/CSVFormater.ts
+++ b/ide/src/base-ui/utils/CSVFormater.ts
@@ -161,16 +161,15 @@ export class JSONToCSV {
}
}
- static browserType(): { edge: string; ie: string; firefox: string; chrome: string; opera: string;
+ static browserType(): { edge: string; ie: string; firefox: string; opera: string;
safari: string} {
- const type = { edge: '', ie: '', firefox: '', chrome: '', opera: '', safari: '' };
+ const type = { edge: '', ie: '', firefox: '', opera: '', safari: '' };
const agent = navigator.userAgent.toLowerCase();
let has;
(has = agent.indexOf('edge') !== -1 ? (type.edge = 'edge') :
agent.match(/rv:([\d.]+)\) like gecko/)) ? (type.ie = has[1]) :
(has = agent.match(/msie ([\d.]+)/)) ? (type.ie = has[1]) :
(has = agent.match(/firefox\/([\d.]+)/)) ? (type.firefox = has[1]) :
- (has = agent.match(/chrome\/([\d.]+)/)) ? (type.chrome = has[1]) :
(has = agent.match(/opera.([\d.]+)/)) ? (type.opera = has[1]) :
(has = agent.match(/version\/([\d.]+).*safari/)) ? (type.safari = has[1]) : 0;
return type;
diff --git a/ide/src/command/CmdConstant.ts b/ide/src/command/CmdConstant.ts
index 0dda8b6883a5251f500798452469424ee49a0c94..ff9903ce82696613d0f7a082b4d9d46c65b96922 100644
--- a/ide/src/command/CmdConstant.ts
+++ b/ide/src/command/CmdConstant.ts
@@ -43,4 +43,5 @@ export class CmdConstant {
static CMD_MKDIR_LONG_FOLD = 'hdc_std shell mkdir ';
static CMD_GET_LONG_FILES = 'hdc_std shell ls ';
static CMD_SET_FOLD_AUTHORITY = 'hdc_std shell chmod -R 777 ';
+ static CMD_UNAME = 'hdc shell uname -a';
}
diff --git a/ide/src/doc/md/quickstart_memory_template.md b/ide/src/doc/md/quickstart_memory_template.md
index ed0c12baad7677df8d167ec3461482b6267278d1..92a3338424372ccf1e37c6943d1e3595b872c1c6 100644
--- a/ide/src/doc/md/quickstart_memory_template.md
+++ b/ide/src/doc/md/quickstart_memory_template.md
@@ -118,7 +118,7 @@ Smaps Statistic 的 tab 页展示。
- Swap:smaps节点中Swap。
- SwapPss:smaps节点中SwapPss。
- Reside: Rss / Size 比值。
-- Protection: 内存块的权限(读写执行执行)。
+- Protection: 内存块的权限(读写执行)。
### VM Tracker 下的 GPU 泳道图展示
diff --git a/ide/src/doc/quickstart_memory_template.html b/ide/src/doc/quickstart_memory_template.html
index e3a9cc1604d0172371c58c23ba6ab54474fbcd38..03b834e9ebddc4f17803da47e3bab87a732495b9 100644
--- a/ide/src/doc/quickstart_memory_template.html
+++ b/ide/src/doc/quickstart_memory_template.html
@@ -1291,7 +1291,7 @@ Reside: Rss / Size 比值。
-Protection: 内存块的权限(读写执行执行)。
+Protection: 内存块的权限(读写执行)。
diff --git a/ide/src/hdc/common/Serialize.ts b/ide/src/hdc/common/Serialize.ts
index e6e22debd2ab3e195bb5fbb31219eb4011f33612..66554a30259c36b5da61ca4ce9973c7d5dd0235f 100644
--- a/ide/src/hdc/common/Serialize.ts
+++ b/ide/src/hdc/common/Serialize.ts
@@ -29,14 +29,16 @@ export class Serialize {
let sessionIdValue = this.serializeU32(3, handShake.sessionId);
let connectKey = this.serializeToString(4, handShake.connectKey);
let buf = this.serializeToString(5, handShake.buf);
+ let version = this.serializeToString(6, handShake.version);
let mergedArray = new Uint8Array(
- bannerValue.length + authTypeValue.length + sessionIdValue.length + connectKey.length + buf.length
+ bannerValue.length + authTypeValue.length + sessionIdValue.length + connectKey.length + buf.length + version.length
);
mergedArray.set(bannerValue);
mergedArray.set(authTypeValue, bannerValue.length);
mergedArray.set(sessionIdValue, bannerValue.length + authTypeValue.length);
mergedArray.set(connectKey, bannerValue.length + authTypeValue.length + sessionIdValue.length);
mergedArray.set(buf, bannerValue.length + authTypeValue.length + sessionIdValue.length + connectKey.length);
+ mergedArray.set(version, bannerValue.length + authTypeValue.length + sessionIdValue.length + connectKey.length + buf.length);
return mergedArray;
}
@@ -206,43 +208,49 @@ export class Serialize {
// banner
let bannerBuffer = data.buffer;
let bannerTag = this.getTag(WireType.LENGTH_DELIMETED, new DataView(bannerBuffer));
- let bannerLengthBuf = bannerBuffer.slice(1);
+ let bannerLengthBuf = bannerBuffer.slice(this.writeVarIntU32(this.makeTagWireType(bannerTag, WireType.LENGTH_DELIMETED)).length);
let bannerSize = this.readVarIntU32(new DataView(bannerLengthBuf));
- let bannerDataBuffer = bannerLengthBuf.slice(1);
+ let bannerDataBuffer = bannerLengthBuf.slice(this.writeVarIntU32(bannerSize).length);
let banner = this.parseString(bannerDataBuffer, bannerSize);
// authType
let authBuffer = bannerDataBuffer.slice(bannerSize);
let authTypeTag = this.getTag(WireType.VARINT, new DataView(authBuffer));
- let authDataBuffer = authBuffer.slice(1);
- let authTypeDataView = new DataView(authDataBuffer);
- let authType = this.parseU8(authTypeDataView, 1);
+ let authDataBuffer = authBuffer.slice(this.writeVarIntU32(this.makeTagWireType(authTypeTag, WireType.VARINT)).length);
+ let authType = this.parseU8(new DataView(authDataBuffer), 1);
+ let authTypeLenth = this.writeVarIntU32(authType).length;
// sessionId
- let sessionIdBuffer = authDataBuffer.slice(1);
+ let sessionIdBuffer = authDataBuffer.slice(authTypeLenth);
let sessionIdTag = this.getTag(WireType.VARINT, new DataView(sessionIdBuffer));
- let sessionDataBuffer = sessionIdBuffer.slice(1);
- let sessionIdDataView = new DataView(sessionDataBuffer);
- let sessionId = this.parseU32(sessionIdDataView, 3);
+ let sessionDataBuffer = sessionIdBuffer.slice(this.writeVarIntU32(this.makeTagWireType(sessionIdTag, WireType.VARINT)).length);
+ let sessionId = this.parseU32(new DataView(sessionDataBuffer), 3);
+ let sessionIdLenth = this.writeVarIntU32(sessionId).length;
// connectKey
- let connectKeyBuffer = sessionDataBuffer.slice(3);
+ let connectKeyBuffer = sessionDataBuffer.slice(sessionIdLenth);
let connectKeyTag = this.getTag(WireType.LENGTH_DELIMETED, new DataView(connectKeyBuffer));
- let connectLengthBuffer = connectKeyBuffer.slice(1);
- let connectKeyDataView = new DataView(connectLengthBuffer);
- let connectKeySize = this.readVarIntU32(connectKeyDataView);
- let connectDataBuffer = connectLengthBuffer.slice(1);
+ let connectLengthBuffer = connectKeyBuffer.slice(this.writeVarIntU32(this.makeTagWireType(connectKeyTag, WireType.LENGTH_DELIMETED)).length);
+ let connectKeySize = this.readVarIntU32(new DataView(connectLengthBuffer));
+ let connectDataBuffer = connectLengthBuffer.slice(this.writeVarIntU32(connectKeySize).length);
let connectKey = this.parseString(connectDataBuffer, connectKeySize);
// buf
let bufBuffer = connectDataBuffer.slice(connectKeySize);
let bufTag = this.getTag(WireType.LENGTH_DELIMETED, new DataView(bufBuffer));
- let lengthBuffer = bufBuffer.slice(1);
- let bufDataView = new DataView(lengthBuffer);
- let bufSize = this.readVarIntU32(bufDataView);
- let dataBuffer = lengthBuffer.slice(1);
+ let lengthBuffer = bufBuffer.slice(this.writeVarIntU32(this.makeTagWireType(bufTag, WireType.LENGTH_DELIMETED)).length);
+ let bufSize = this.readVarIntU32(new DataView(lengthBuffer));
+ let dataBuffer = lengthBuffer.slice(this.writeVarIntU32(bufSize).length);
let buf = this.parseString(dataBuffer, bufSize);
- return new SessionHandShake(banner, authType, sessionId, connectKey, buf);
+
+ // version
+ let versionBuffer = dataBuffer.slice(bufSize);
+ let versionTag = this.getTag(WireType.LENGTH_DELIMETED, new DataView(versionBuffer));
+ let versionLengthBuffer = versionBuffer.slice(this.writeVarIntU32(this.makeTagWireType(versionTag, WireType.LENGTH_DELIMETED)).length);
+ let versionSize = this.readVarIntU32(new DataView(versionLengthBuffer));
+ let versionDataBuffer = versionLengthBuffer.slice(this.writeVarIntU32(versionSize).length);
+ let version = this.parseString(versionDataBuffer, versionSize);
+ return new SessionHandShake(banner, authType, sessionId, connectKey, buf, version);
}
static parseTransferConfig(data: ArrayBuffer): TransferConfig {
diff --git a/ide/src/hdc/hdcclient/HdcClient.ts b/ide/src/hdc/hdcclient/HdcClient.ts
index 54addc4262ee9abce7228c03953d9688d7d75912..b107c6b1ea3c9b44c09807798fee57c466b75ffc 100644
--- a/ide/src/hdc/hdcclient/HdcClient.ts
+++ b/ide/src/hdc/hdcclient/HdcClient.ts
@@ -36,6 +36,9 @@ export class HdcClient implements DataListener {
private transmissionChannel: TransmissionInterface;
public readDataProcessing: DataProcessing;
private cmdStreams = new Map();
+ private isSuccess: boolean = false;
+ private handBody: DataView | undefined;
+ private message: DataMessage | undefined;
constructor(
transmissionChannel: TransmissionInterface,
@@ -51,38 +54,86 @@ export class HdcClient implements DataListener {
debug('start Connect Device');
this.sessionId = Utils.getSessionId();
log(`sessionId is ${this.sessionId}`);
+ this.isSuccess = false;
+ await this.handShakeConnect(AuthType.AUTH_NONE, '');
+ let timeStamp = new Date().getTime();
+ while (await this.readHandShakeMsg()) {
+ if (new Date().getTime() - timeStamp > 10000) {
+ break;
+ }
+ // 后续daemon修复发送通道关闭信息后,可放开this.message?.channelClose以作判断
+ // 非握手包指令,不予理会
+ if (this.message?.commandFlag !== HdcCommand.CMD_KERNEL_HANDSHAKE) {
+ continue;
+ }
+ let backMessage = Serialize.parseHandshake(new Uint8Array(this.message.resArrayBuffer!));
+ // 后续daemon修复增加sessionId数据判定后,可放开backMessage.sessionId !== this.sessionId以作判断
+ const returnBuf: string = backMessage.buf;
+ const returnAuth: number = backMessage.authType;
+ switch (returnAuth) {
+ case AuthType.AUTH_NONE:
+ continue;
+ case AuthType.AUTH_TOKEN:
+ continue;
+ case AuthType.AUTH_SIGNATURE:
+ const response = await fetch(`${window.location.origin}/application/encryptHdcMsg?message=` + returnBuf);
+ const dataBody = await response.json();
+ const encryptHdcMsg = dataBody.success && dataBody.data.signatures;
+ await this.handShakeConnect(AuthType.AUTH_SIGNATURE, encryptHdcMsg);
+ timeStamp = new Date().getTime();
+ continue;
+ case AuthType.AUTH_PUBLICKEY:
+ const responsePub = await fetch(`${window.location.origin}/application/hdcPublicKey`);
+ const data = await responsePub.json();
+ const publicKey = data.success && (`smartPerf-Host` + String.fromCharCode(12) + data.data.publicKey);
+ await this.handShakeConnect(AuthType.AUTH_PUBLICKEY, publicKey);
+ timeStamp = new Date().getTime();
+ continue;
+ case AuthType.AUTH_OK:
+ if (returnBuf.toLocaleLowerCase().indexOf('unauth') === -1 || returnBuf.includes('SUCCESS')) {
+ this.handShakeSuccess(this.handBody!);
+ this.isSuccess = true;
+ break;
+ } else {
+ continue;
+ }
+ default:
+ continue;
+ }
+ }
+ return this.isSuccess;
+ }
+
+ private async handShakeConnect(authType: number, buf: string): Promise {
// @ts-ignore
let handShake: SessionHandShake = new SessionHandShake(
HANDSHAKE_MESSAGE,
- AuthType.AUTH_NONE,
+ authType,
this.sessionId,
// @ts-ignore
this.usbDevice.serialNumber,
- ''
+ buf,
+ 'Ver: 3.0.0b'
);
let hs = Serialize.serializeSessionHandShake(handShake);
debug('start Connect hs ', hs);
- let sendResult = await this.readDataProcessing.send(
+ await this.readDataProcessing.send(
handShake.sessionId,
0,
HdcCommand.CMD_KERNEL_HANDSHAKE,
hs,
hs.length
);
- if (sendResult) {
- let handShake = await this.readDataProcessing.readUsbHead();
- let handBody = await this.readDataProcessing.readBody(handShake!.dataSize);
- if (this.sessionId === handShake!.sessionId) {
- debug('handShake: ', handShake);
- this.handShakeSuccess(handBody);
- return true;
- } else {
- log(`session is not eq handShake?.sessionId is : ${handShake?.sessionId} now session is ${this.sessionId}`);
- return false;
- }
- } else {
+ }
+
+ private async readHandShakeMsg(): Promise {
+ if (this.isSuccess) {
return false;
}
+ let handShake = await this.readDataProcessing.readUsbHead();
+ this.handBody = await this.readDataProcessing.readBody(handShake!.dataSize);
+ this.message = new DataMessage(handShake!, this.handBody);
+ return true;
}
private handShakeSuccess(handBody: DataView): void {
diff --git a/ide/src/hdc/message/SessionHandShake.ts b/ide/src/hdc/message/SessionHandShake.ts
index ac609354555c7b072e65ba74ad789587feb99fff..aa7690b2dea174cb64e00cabf3182d81120a36a7 100644
--- a/ide/src/hdc/message/SessionHandShake.ts
+++ b/ide/src/hdc/message/SessionHandShake.ts
@@ -23,15 +23,16 @@ export class SessionHandShake extends Object implements BaseBean {
private _sessionId: number = 0; // uint32_t
private _connectKey: string = ''; // string
private _buf: string = ''; // string
- private _version: string = '';
+ private _version: string = 'Ver: 3.0.0b';
- constructor(banner: string, authType: number, sessionId: number, connectKey: string, buf: string) {
+ constructor(banner: string, authType: number, sessionId: number, connectKey: string, buf: string, version: string) {
super();
this._banner = banner;
this._authType = authType;
this._sessionId = sessionId;
this._connectKey = connectKey;
this._buf = buf;
+ this._version = version;
}
getDataView(): DataView {
diff --git a/ide/src/trace/SpApplication.ts b/ide/src/trace/SpApplication.ts
index 301f0b17a336e80a5b587fb54ce84ea21c905c94..57e1ac4feb7aaa469a7389407e60e96cca1b7f6b 100644
--- a/ide/src/trace/SpApplication.ts
+++ b/ide/src/trace/SpApplication.ts
@@ -78,6 +78,7 @@ import { queryExistFtrace } from './database/sql/SqlLite.sql';
import '../base-ui/chart/scatter/LitChartScatter';
import { SpThirdParty } from './component/SpThirdParty';
import './component/SpThirdParty';
+import { cancelCurrentTraceRowHighlight } from './component/SpSystemTrace.init';
@element('sp-application')
export class SpApplication extends BaseElement {
@@ -98,14 +99,14 @@ export class SpApplication extends BaseElement {
longTraceTypeMessageMap:
| Map<
- number,
- Array<{
- fileType: string;
- startIndex: number;
- endIndex: number;
- size: number;
- }>
- >
+ number,
+ Array<{
+ fileType: string;
+ startIndex: number;
+ endIndex: number;
+ size: number;
+ }>
+ >
| undefined
| null;
static skinChange: Function | null | undefined = null;
@@ -487,11 +488,11 @@ export class SpApplication extends BaseElement {
detail: unknown
):
| {
- traceTypePage: number[];
- allFileSize: number;
- normalTraceNames: string[];
- specialTraceNames: string[];
- }
+ traceTypePage: number[];
+ allFileSize: number;
+ normalTraceNames: string[];
+ specialTraceNames: string[];
+ }
| undefined {
if (!this.wasm) {
this.progressEL!.loading = false;
@@ -1087,7 +1088,7 @@ export class SpApplication extends BaseElement {
let reader: FileReader = new FileReader();
//@ts-ignore
reader.readAsArrayBuffer(ev);
- reader.onloadend = (ev): void =>{
+ reader.onloadend = (ev): void => {
info('read file onloadend');
this.litSearch!.setPercent('ArrayBuffer loaded ', 2);
let wasmUrl = `https://${window.location.host.split(':')[0]}:${window.location.port}/application/wasm.json`;
@@ -1530,8 +1531,8 @@ export class SpApplication extends BaseElement {
this.litSearch!.clear();
Utils.currentSelectTrace = undefined;
this.markJson = undefined;
- if(!multiTrace){
- this.longTracePage!.style.display = 'none';
+ if (!multiTrace) {
+ this.longTracePage!.style.display = 'none';
}
this.litSearch?.removeAttribute('distributed');
SpStatisticsHttpUtil.addOrdinaryVisitAction({
@@ -1933,11 +1934,15 @@ export class SpApplication extends BaseElement {
this.litSearch!.valueChangeHandler = (value: string): void => {
Utils.currentSelectTrace = this.litSearch?.getSearchTraceId();
this.litSearch!.currenSearchValue = value;
- if(value.length > 0) {
+ if (value.length > 0) {
this.progressEL!.loading = true;
} else {
this.progressEL!.loading = false;
}
+ if (this.litSearch!.index > 0) {
+ let currentEntry = this.litSearch!.list[this.litSearch!.index];
+ cancelCurrentTraceRowHighlight(this.spSystemTrace!, currentEntry)
+ }
this.litSearch!.list = [];
if (timer) {
clearTimeout(timer);
@@ -1975,27 +1980,15 @@ export class SpApplication extends BaseElement {
};
}
private initSearchEvents(): void {
- this.litSearch!.addEventListener('focus', (e): void => {
- Utils.currentSelectTrace = this.litSearch!.getSearchTraceId();
- this.spSystemTrace!.searchTargetTraceHandler();
- window.publish(window.SmartEvent.UI.KeyboardEnable, {
- enable: false,
- });
- });
- this.litSearch!.addEventListener('blur', () => {
- window.publish(window.SmartEvent.UI.KeyboardEnable, {
- enable: true,
- });
- });
this.litSearch!.addEventListener('previous-data', (ev) => {
- if(this.progressEL!.loading) {
+ if (this.progressEL!.loading) {
return;
}
this.litSearch!.index = this.spSystemTrace!.showStruct(true, this.litSearch!.index, this.litSearch!.list);
this.litSearch!.blur();
});
this.litSearch!.addEventListener('next-data', (ev) => {
- if(this.progressEL!.loading) {
+ if (this.progressEL!.loading) {
return;
}
this.litSearch!.index = this.spSystemTrace!.showStruct(false, this.litSearch!.index, this.litSearch!.list);
@@ -2003,11 +1996,11 @@ export class SpApplication extends BaseElement {
});
// 翻页事件
this.litSearch!.addEventListener('retarget-data', (ev) => {
- if(this.progressEL!.loading) {
+ if (this.progressEL!.loading) {
return;
}
this.litSearch!.index = this.spSystemTrace!.showStruct(
- true,
+ false,
//@ts-ignore
ev.detail.value,
this.litSearch!.list,
@@ -2025,23 +2018,15 @@ export class SpApplication extends BaseElement {
private initSystemTraceEvents(): void {
this.spSystemTrace?.addEventListener('trace-previous-data', (ev) => {
- if(this.progressEL!.loading) {
- return;
- }
- if(this.litSearch!.isSearchInputFocus) {
- this.litSearch!.isSearchInputFocus = !this.litSearch!.isSearchInputFocus;
+ if (this.progressEL!.loading) {
return;
- }
+ }
this.litSearch!.index = this.spSystemTrace!.showStruct(true, this.litSearch!.index, this.litSearch!.list);
});
this.spSystemTrace?.addEventListener('trace-next-data', (ev) => {
if(this.progressEL!.loading) {
return;
}
- if(this.litSearch!.isSearchInputFocus) {
- this.litSearch!.isSearchInputFocus = !this.litSearch!.isSearchInputFocus;
- return;
- }
this.litSearch!.index = this.spSystemTrace!.showStruct(false, this.litSearch!.index, this.litSearch!.list);
});
}
@@ -2304,6 +2289,7 @@ export class SpApplication extends BaseElement {
.then((res) => {
res.arrayBuffer().then((arrayBuf) => {
let fileName = url.split('/').reverse()[0];
+ this.traceFileName = fileName;
let showFileName =
fileName.lastIndexOf('.') === -1 ? fileName : fileName.substring(0, fileName.lastIndexOf('.'));
openUrl(arrayBuf, fileName, showFileName, arrayBuf.byteLength);
diff --git a/ide/src/trace/SpApplicationPublicFunc.ts b/ide/src/trace/SpApplicationPublicFunc.ts
index 0053c939d20af0af962372816d0036486189b461..5aed2831cc0ef3be51bcd0b3487cb52fcbb33188 100644
--- a/ide/src/trace/SpApplicationPublicFunc.ts
+++ b/ide/src/trace/SpApplicationPublicFunc.ts
@@ -15,7 +15,7 @@
import { getThreadPoolTraceBufferCacheKey } from './database/SqlLite';
-export enum TraceMode{
+export enum TraceMode {
NORMAL,
LONG_TRACE,
DISTRIBUTED,
@@ -450,8 +450,8 @@ export function postLog(filename: string, fileSize: string): void {
}),
})
.then((response) => response.json())
- .then((data) => {})
- .catch((error) => {});
+ .then((data) => { })
+ .catch((error) => { });
}
export function indexedDataToBufferData(sourceData: unknown): ArrayBuffer {
diff --git a/ide/src/trace/bean/MarkStruct.ts b/ide/src/trace/bean/MarkStruct.ts
index 08e089ca9a8b156d6ad784d7bd2648b149d4edc6..7fd90c8698b0379aa65a34276b863d819fd59d11 100644
--- a/ide/src/trace/bean/MarkStruct.ts
+++ b/ide/src/trace/bean/MarkStruct.ts
@@ -17,21 +17,21 @@ export class MarkStruct {
endTimeStr: string | undefined;
startTime: number | undefined;
endTime: number | undefined;
- colorEl: HTMLInputElement | undefined;
- text: HTMLInputElement | undefined;
+ color: string | undefined;
+ text: string | undefined;
operate: HTMLButtonElement | undefined;
isSelected: boolean = false;
constructor(
operate: HTMLButtonElement,
- colorEl?: HTMLInputElement | undefined,
- text?: HTMLInputElement | undefined,
+ color?: string | undefined,
+ text?: string | undefined,
startTimeStr?: string,
startTime?: number,
endTimeStr?: string,
endTime?: number
) {
this.operate = operate;
- this.colorEl = colorEl;
+ this.color = color;
this.text = text;
this.startTimeStr = startTimeStr;
this.startTime = startTime;
diff --git a/ide/src/trace/component/SpHelp.ts b/ide/src/trace/component/SpHelp.ts
index 5abcc64fbac7a42a9f4e268bfb75a88b444344bb..958a75fbbc334c9620687d4747ed81616f6c4ac1 100644
--- a/ide/src/trace/component/SpHelp.ts
+++ b/ide/src/trace/component/SpHelp.ts
@@ -90,9 +90,9 @@ export class SpHelp extends BaseElement {
let helpDocIndex = urlParams.get('action')!.substring(5);
let helpDocDetail = this.getEventDefinitionByIndex(Number(helpDocIndex));
that.helpFile!.innerHTML = ``;
+ }' width="100%" height="100%">`;
- this.navbarInit(helpDocDetail!.name);
+ this.navbarInit(helpDocDetail!.name);
}
}
@@ -272,15 +272,19 @@ export class SpHelp extends BaseElement {
.then(response => response.text())
.then(htmlString => {
const parser = new DOMParser();
- const doc = parser.parseFromString(htmlString, "text/html");
+ const doc = parser.parseFromString(htmlString, 'text/html');
const hTags = Array.from(doc.body.querySelectorAll('h1, h2, h3, h4, h5, h6')).map((header) => ({
id: header.id,
text: header.textContent!.trim()
}));
this.navbarContainer!.innerHTML = `${hTags.map(hTag => {
- if (hTag.id) return `- ${hTag.text}${hTag.text}
-
`;
+ let backData = '';
+ if (hTag.id) {
+ backData = `- ${hTag.text}${hTag.text}
+
`
+ }
+ return backData;
}).join('')
}
`;
@@ -293,16 +297,16 @@ export class SpHelp extends BaseElement {
let targetId = navLink.id;
e.preventDefault();
this.helpFile!.innerHTML = ``;
- })
- })
-
- this.backToTop!.querySelector('#back-to-top')!.addEventListener('click', (e)=> {
- e.preventDefault();
- navLinks.forEach((navLink) => {
- navLink.closest('li')?.classList.remove('active');
+ });
});
+
+ this.backToTop!.querySelector('#back-to-top')!.addEventListener('click', (e) => {
+ e.preventDefault();
+ navLinks.forEach((navLink) => {
+ navLink.closest('li')?.classList.remove('active');
+ });
this.helpFile!.innerHTML = ``;
- });
+ });
})
.catch(error => {
diff --git a/ide/src/trace/component/SpKeyboard.html.ts b/ide/src/trace/component/SpKeyboard.html.ts
index 1418a82fe6b577588c8083d5acd154c2e7859071..3eced70503990df985cced769c33d35456160c67 100644
--- a/ide/src/trace/component/SpKeyboard.html.ts
+++ b/ide/src/trace/component/SpKeyboard.html.ts
@@ -106,33 +106,33 @@ table{
w
/
s
- 放大/缩小 |
+ Zoom in/out |
a /
d
|
- 左移/右移 |
+ Pan left/right |
Mouse Controls
Click |
- 点选 |
+ Select event |
Click + Drag |
- 框选 |
+ Select area |
Ctrl + Scroll wheel |
- 放大/缩小 |
+ Zoom in/out |
Ctrl + Click + Drag |
- 拖拽左移/右移 |
+ Pan left/right |
Making SQL queries from the query page
@@ -142,7 +142,7 @@ table{
Ctrl
+
Enter
- 在数据库查询界面写好查询语句后进行查询 |
+ Execute query |
Other
@@ -151,27 +151,27 @@ table{
f (with event selected)
|
- 聚焦 |
+ Focus on the selected slice |
m (with event or area selected)
|
- 临时框选标记 |
+ Mark the area (temporarily) |
Shift +
m (with event or area selected)
|
- 永久框选标记 |
+ Mark the area (persistently) |
Ctr +
b
|
- 隐藏/显示菜单和搜索框 |
+ Hide/Show menus and search boxes |
@@ -179,7 +179,7 @@ table{
, /
.
|
- 定位到上一个/下一个旗子标记的时间点 |
+ Locate the time point marked by the previous/next flag |
@@ -187,25 +187,25 @@ table{
[ /
]
|
- 定位到上一个/下一个用shift + m 框选的位置 |
+ Locate the previous/next position selected with shift+m |
/
|
- 展示快捷方式 |
+ Show Keyboard shortcuts |
v
|
- 展示/隐藏Vsync信号 |
+ Show/hide Vsync signal |
b
|
- 展开/折叠收藏区域 |
+ Expand/Fold Collection Area |
diff --git a/ide/src/trace/component/SpRecordTrace.ts b/ide/src/trace/component/SpRecordTrace.ts
index e02ac30e494866db005551453d1e8652448373d8..3b348a1b86b68fcf3c5ab71005691dfae1ddf6ff 100644
--- a/ide/src/trace/component/SpRecordTrace.ts
+++ b/ide/src/trace/component/SpRecordTrace.ts
@@ -66,10 +66,10 @@ import { SpRecordTraceHtml } from './SpRecordTrace.html';
import { SpFFRTConfig } from './setting/SpFFRTConfig';
const DEVICE_NOT_CONNECT =
-'1.请关闭DevEco Studio,DevEco Testing等会占用hdc端口的应用
' +
-'2.请使用系统管理员权限打开cmd窗口,并执行hdc kill,确保PC端任务管理器中没有hdc进程
' +
-'3.若没有效果,请重新插拔一下手机
' +
-'紧急情况可拷贝trace命令,在cmd窗口离线抓取
';
+'1.请确认抓取设备上是否已勾选并确认总是允许smartPerf-Host调试的弹窗
' +
+'2.请关闭DevEco Studio,DevEco Testing等会占用hdc端口的应用
' +
+'3.请使用系统管理员权限打开cmd窗口,并执行hdc kill,确保PC端任务管理器中没有hdc进程
' +
+'4.若没有效果,请重新插拔一下手机。紧急情况可拷贝trace命令,在cmd窗口离线抓取
';
@element('sp-record-trace')
export class SpRecordTrace extends BaseElement {
@@ -115,6 +115,10 @@ export class SpRecordTrace extends BaseElement {
private hintEl: HTMLSpanElement | undefined;
private selectedTemplate: Map = new Map();
private hintTimeOut: number = -1;
+ private MenuItemArkts:MenuItem | undefined | null;
+ private MenuItemArktsHtml:LitMainMenuItem | undefined | null;
+ private MenuItemEbpf:MenuItem | undefined | null;
+ private MenuItemEbpfHtml:LitMainMenuItem | undefined | null;
set record_template(re: boolean) {
if (re) {
@@ -200,6 +204,27 @@ export class SpRecordTrace extends BaseElement {
this.devicePrompt!.innerText = '';
this.hintEl!.textContent = '';
SpRecordTrace.serialNumber = option.value;
+ if (this.MenuItemArkts && this.MenuItemArktsHtml) {//连接成功后,arkts开关置灰不能点击
+ this.MenuItemArktsHtml.style.color = 'gray';
+ this.MenuItemArktsHtml.disabled = true;
+ if (this.MenuItemArkts.clickHandler) {
+ this.MenuItemArkts.clickHandler = undefined;
+ }
+ }
+ try {
+ let kernelInfo = await HdcDeviceManager.shellResultAsString(CmdConstant.CMD_UNAME,false);
+ if (kernelInfo.includes('HongMeng')) {
+ if (this.MenuItemEbpf && this.MenuItemEbpfHtml) {//如果为鸿蒙内核,ebpf开关置灰不能点击
+ this.MenuItemEbpfHtml.style.color = 'gray';
+ this.MenuItemEbpfHtml.disabled = true;
+ if (this.MenuItemEbpf.clickHandler) {
+ this.MenuItemEbpf.clickHandler = undefined;
+ }
+ }
+ }
+ } catch (error) {
+ console.error('Failed to get kernel info:', error);
+ }
this.refreshDeviceVersion(option);
}
}
@@ -755,6 +780,13 @@ export class SpRecordTrace extends BaseElement {
item.clickHandler(item);
}
});
+ if (item.title === 'Ark Ts') {
+ this.MenuItemArkts = item;
+ this.MenuItemArktsHtml = th;
+ }else if (item.title === 'eBPF Config') {
+ this.MenuItemEbpf = item;
+ this.MenuItemEbpfHtml = th;
+ }
this.menuGroup!.appendChild(th);
});
}
@@ -860,7 +892,6 @@ export class SpRecordTrace extends BaseElement {
this.buildMenuItem('Ark Ts', 'file-config', this.spArkTs!),
this.buildMenuItem('FFRT', 'file-config', this.spFFRTConfig!),
this.buildMenuItem('Hilog', 'realIntentionBulb', this.spHiLog!),
- this.buildMenuItem('SDK Config', 'realIntentionBulb', this.spSdkConfig!),
];
}
diff --git a/ide/src/trace/component/SpSystemTrace.event.ts b/ide/src/trace/component/SpSystemTrace.event.ts
index 8bcaed67c8615c66f40c5c0a2816437180e0aab4..a924d39192ead33a4a613fb5709941ffd1288ceb 100644
--- a/ide/src/trace/component/SpSystemTrace.event.ts
+++ b/ide/src/trace/component/SpSystemTrace.event.ts
@@ -40,6 +40,7 @@ import { TabPaneCurrent } from './trace/sheet/TabPaneCurrent';
import type { SpKeyboard } from './SpKeyboard';
import { enableVSync } from './chart/VSync';
import { CpuStruct, CpuStructOnClick } from '../database/ui-worker/cpu/ProcedureWorkerCPU';
+import { ProcessMemStruct } from '../database/ui-worker/ProcedureWorkerMem';
import { CpuStateStruct, CpuStateStructOnClick } from '../database/ui-worker/cpu/ProcedureWorkerCpuState';
import {
CpuFreqLimitsStruct,
@@ -153,8 +154,9 @@ function threadClickHandlerFunc(sp: SpSystemTrace): (e: ThreadStruct) => void {
}
//点击prio箭头刷新canvas
-function prioClickHandlerFunc(sp: SpSystemTrace) {
- return function (d: any) {
+function prioClickHandlerFunc(sp: SpSystemTrace): (d: unknown) => void {
+ return function (d: unknown) {
+ // @ts-ignore
ThreadStruct.prioCount = d;
ThreadStruct.isClickPrio = true;
sp.refreshCanvas(true);
@@ -204,7 +206,7 @@ function jankClickHandlerFunc(sp: SpSystemTrace): Function {
//@ts-ignore
let findJankEntry = jankRow!.dataListCache!.find(
//@ts-ignore
- (dat: unknown) => `${dat.name}` == `${d.name}` && `${dat.pid}` == `${d.pid}`
+ (dat: unknown) => `${dat.name}` === `${d.name}` && `${dat.pid}` === `${d.pid}`
);
if (findJankEntry) {
if (
@@ -427,7 +429,7 @@ export default function spSystemTraceOnClickHandler(
sp.removeLinkLinesByBusinessType('thread');
}
if (!FuncStruct.selectFuncStruct) {
- sp.removeLinkLinesByBusinessType('distributed','func');
+ sp.removeLinkLinesByBusinessType('distributed', 'func');
}
if (row) {
let pointEvent = sp.createPointEvent(row);
@@ -537,8 +539,9 @@ function spSystemTraceDocumentOnMouseMoveMouseUp(
const transformYMatch = sp.canvasPanel?.style.transform.match(/\((\d+)[^\)]+\)/);
const transformY = transformYMatch![1];
let favoriteHeight = sp.favoriteChartListEL!.getBoundingClientRect().height;
+ let memTr = rows.filter((item: any) => item.rowType ===TraceRow.ROW_TYPE_MEM)
rows
- .filter((it) => it.focusContain(ev, sp.inFavoriteArea!,Number(transformY),favoriteHeight) && it.collect === sp.inFavoriteArea)
+ .filter((it) => it.focusContain(ev, sp.inFavoriteArea!, Number(transformY), favoriteHeight) && it.collect === sp.inFavoriteArea)
.filter((it) => {
if (it.collect) {
return true;
@@ -553,6 +556,12 @@ function spSystemTraceDocumentOnMouseMoveMouseUp(
if (tr.rowType !== TraceRow.ROW_TYPE_CPU) {
CpuStruct.hoverCpuStruct = undefined;
}
+ if (tr.rowType !== TraceRow.ROW_TYPE_MEM) {
+ ProcessMemStruct.hoverProcessMemStruct = undefined;
+ memTr.forEach((i:any) => {
+ i.focusHandler(ev);
+ })
+ }
if (sp.currentRowType !== tr.rowType) {
sp.currentRowType = tr.rowType || '';
}
@@ -888,7 +897,7 @@ function handleClickActions(sp: SpSystemTrace, x: number, y: number, ev: MouseEv
let inFavoriteArea = sp.favoriteChartListEL?.containPoint(ev);
let favoriteHeight = sp.favoriteChartListEL!.getBoundingClientRect().height;
let rows = sp.visibleRows.filter((it) =>
- it.focusContain(ev, inFavoriteArea!, Number(transformY),favoriteHeight) && it.collect === inFavoriteArea);
+ it.focusContain(ev, inFavoriteArea!, Number(transformY), favoriteHeight) && it.collect === inFavoriteArea);
if (JankStruct.delJankLineFlag) {
sp.removeLinkLinesByBusinessType('janks');
}
diff --git a/ide/src/trace/component/SpSystemTrace.init.ts b/ide/src/trace/component/SpSystemTrace.init.ts
index 405dd85fdcddc56217ead81276cb5b771d32ff8e..42b95e6b6f0e5da3bc9bc601614d1f8e1d92b053 100644
--- a/ide/src/trace/component/SpSystemTrace.init.ts
+++ b/ide/src/trace/component/SpSystemTrace.init.ts
@@ -438,7 +438,8 @@ function selectHandler(sp: SpSystemTrace): void {
let checkRows = rows;
if (!refreshCheckBox) {
checkRows = [
- ...sp.shadowRoot!.querySelectorAll>(`trace-row[check-type='2']`),
+ // @ts-ignore
+ ...sp.shadowRoot!.querySelectorAll>(`trace-row[check-type='2']`),
...sp.favoriteChartListEL!.getAllSelectCollectRows(),
];
}
@@ -604,7 +605,7 @@ function windowKeyDownHandler(sp: SpSystemTrace): (ev: KeyboardEvent) => void {
}
function smartEventSubscribe(sp: SpSystemTrace): void {
window.subscribe(window.SmartEvent.UI.SliceMark, (data) => sp.sliceMarkEventHandler(data));
- window.subscribe(window.SmartEvent.UI.TraceRowComplete, (tr) => {});
+ window.subscribe(window.SmartEvent.UI.TraceRowComplete, (tr) => { });
window.subscribe(window.SmartEvent.UI.RefreshCanvas, () => sp.refreshCanvas(false));
window.subscribe(window.SmartEvent.UI.KeyboardEnable, (tr) => {
//@ts-ignore
@@ -644,6 +645,7 @@ export function documentInitEvent(sp: SpSystemTrace): void {
document.addEventListener('triangle-flag', triangleFlagHandler(sp));
document.addEventListener('number_calibration', numberCalibrationHandler(sp));
document.addEventListener('flag-change', flagChangeHandler(sp));
+ document.addEventListener('remarksFocus-change', remarksFocuseChangeHandler(sp));
document.addEventListener('slices-change', slicesChangeHandler(sp));
if (sp.timerShaftEL?.collecBtn) {
sp.timerShaftEL.collecBtn.onclick = (): void => {
@@ -659,6 +661,12 @@ export function documentInitEvent(sp: SpSystemTrace): void {
document.addEventListener('collect', collectHandler(sp));
}
+function remarksFocuseChangeHandler(sp: SpSystemTrace): (event: any) => void{
+ return function (event: any): void {
+ sp.focusTarget = event.detail;
+ }
+}
+
export function spSystemTraceInitElement(sp: SpSystemTrace): void {
window.subscribe(window.SmartEvent.UI.LoadFinishFrame, () => sp.drawAllLines());
sp.traceSheetEL = sp.shadowRoot?.querySelector('.trace-sheet');
@@ -698,12 +706,13 @@ export function spSystemTraceInitElement(sp: SpSystemTrace): void {
smartEventSubscribe(sp);
}
-function moveRangeToCenterAndHighlight(sp: SpSystemTrace, findEntry: any): void {
+function moveRangeToCenterAndHighlight(sp: SpSystemTrace, findEntry: any, currentEntry: any): void {
if (findEntry) {
- sp.moveRangeToCenter(findEntry.startTime!, findEntry.dur!);
- sp.queryAllTraceRow().forEach((item) => {
- item.highlight = false;
- });
+ //findEntry不在range范围内,会把它移动到泳道最左侧
+ if (findEntry.startTime > TraceRow.range!.endNS || findEntry.startTime + findEntry.dur < TraceRow.range!.startNS) {
+ sp.moveRangeToLeft(findEntry.startTime!, findEntry.dur!);
+ }
+ cancelCurrentTraceRowHighlight(sp, currentEntry);
if (findEntry.type === 'cpu') {
findEntryTypeCpu(sp, findEntry);
} else if (findEntry.type === 'func') {
@@ -713,34 +722,31 @@ function moveRangeToCenterAndHighlight(sp: SpSystemTrace, findEntry: any): void
} else if (findEntry.type === 'sdk') {
findEntryTypeSdk(sp, findEntry);
}
- sp.timerShaftEL?.drawTriangle(findEntry.startTime || 0, 'inverted');
- }
-}
-
-function setToNext(current: number, totalResults: number): number {
- const index = (current + 1) % totalResults;
- return index;
-}
-
-function setToPrevious(current: number, totalResults: number): number {
- let index = current - 1;
- if (index < 0) {
- index = totalResults - 1;
}
- return index;
}
-function searchImp(structs: Array, needle: number, i: number, j:number): number {
- if (i === j) return -1;
- if (i + 1 === j) {
- return needle >= structs[i].startTime ? i : -1;
- }
- const mid = Math.floor((j - i) / 2) + i;
- const midValue = structs[mid].startTime;
- if (needle < midValue) {
- return searchImp(structs, needle, i, mid);
- } else {
- return searchImp(structs, needle, mid, j);
+export function cancelCurrentTraceRowHighlight(sp: SpSystemTrace, currentEntry: any) {
+ if (currentEntry?.type === 'cpu') {
+ sp.queryAllTraceRow(`trace-row[row-type='cpu-data'][row-id='${currentEntry.cpu}']`,
+ (row) => row.rowType === 'cpu-data' && row.rowId === `${currentEntry.cpu}`)[0].highlight = false;
+ } else if (currentEntry?.type === 'func') {
+ let funId = (currentEntry.rowId === null || currentEntry.rowId === undefined) ? `${currentEntry.funName}-${currentEntry.pid}` : currentEntry.rowId;
+ let funcRowID = (currentEntry.cookie === null || currentEntry.cookie === undefined) ? `${Utils.getDistributedRowId(currentEntry.tid)}` : funId;
+ let parentRow = sp.queryAllTraceRow(`trace-row[row-id='${Utils.getDistributedRowId(currentEntry.pid)}'][folder]`,
+ (row) => row.rowId === `trace-row[row-id='${Utils.getDistributedRowId(currentEntry.pid)}'][folder]`)[0]
+ if (!parentRow) {
+ return;
+ }
+ let filterRow = parentRow.childrenList.filter((child) => child.rowId === funcRowID && child.rowType === 'func')[0];
+ filterRow.highlight = false;
+ } else if (currentEntry?.type === 'sdk') {
+ let parentRow = sp.shadowRoot!.querySelector>("trace-row[row-type='sdk'][folder]");
+ if (parentRow) {
+ let sdkRow = parentRow.childrenList.filter(
+ (child) => child.rowId === currentEntry.rowId && child.rowType === currentEntry.rowType
+ )[0];
+ sdkRow!.highlight = false;
+ }
}
}
@@ -757,44 +763,60 @@ export function spSystemTraceShowStruct(
let findIndex = spSystemTraceShowStructFindIndex(previous, currentIndex, structs, retargetIndex);
let findEntry: any;
findEntry = structs[findIndex];
- moveRangeToCenterAndHighlight(sp, findEntry);
+ let currentEntry: any = undefined;
+ if (currentIndex >= 0) {
+ currentEntry = structs[currentIndex];
+ }
+ moveRangeToCenterAndHighlight(sp, findEntry, currentEntry);
return findIndex;
}
+
function spSystemTraceShowStructFindIndex(
previous: boolean,
currentIndex: number,
structs: Array,
retargetIndex: number | undefined
): number {
- let findIndex = -1;
- const totalResults = structs.length;
const rangeStart = TraceRow.range!.startNS;
const rangeEnd = TraceRow.range!.endNS;
- const currentStart = structs[currentIndex]?.startTime;
- if (retargetIndex && retargetIndex > 0) {
- currentIndex = retargetIndex;
- }
- //不在时间区域内
- if (!retargetIndex && (currentIndex === -1 || currentStart < rangeStart || currentStart > rangeEnd)) {
- const searchIndex = searchImp(structs, rangeStart, 0, totalResults);
- if (previous) {
- if (searchIndex === -1) {
- findIndex = setToPrevious(currentIndex, totalResults);
- } else {
- findIndex = searchIndex;
- }
- } else {
- if (searchIndex === -1) {
- findIndex = setToNext(currentIndex, totalResults);
- } else {
- findIndex = searchIndex;
+ let findIndex = -1;
+ if (retargetIndex) {
+ findIndex = retargetIndex - 1;
+ } else if (previous) {
+ for (let i = structs.length - 1; i >= 0; i--) {
+ let it = structs[i];
+ if ((i < currentIndex && it.startTime! >= rangeStart && it.startTime! + it.dur! <= rangeEnd)
+ || (it.startTime! + it.dur! < rangeStart)) {
+ findIndex = i;
+ break;
}
}
+ if (findIndex === -1) {
+ findIndex = structs.length - 1;
+ }
} else {
- if (previous) {
- findIndex = setToPrevious(currentIndex, totalResults);
- } else {
- findIndex = setToNext(currentIndex, totalResults);
+ if (currentIndex > 0) {
+ if (rangeStart > SpSystemTrace.currentStartTime) {
+ SpSystemTrace.currentStartTime = rangeStart;
+ }
+ //右移rangeStart变小重新赋值
+ if (SpSystemTrace.currentStartTime > rangeStart) {
+ SpSystemTrace.currentStartTime = rangeStart;//currentIndex不在可视区时,currentIndex = -1
+ if (
+ structs[currentIndex].startTime < rangeStart ||
+ structs[currentIndex].startTime! + structs[currentIndex].dur! > rangeEnd
+ ) {
+ currentIndex = -1;
+ }
+ }
+ }
+ //在数组中查找比currentIndex大且在range范围内的第一个下标,如果range范围内没有返回-1
+ findIndex = structs.findIndex((it, idx) => {
+ return ((idx > currentIndex && it.startTime! >= rangeStart && it.startTime! + it.dur! <= rangeEnd)
+ || (it.startTime! > rangeEnd));
+ });
+ if (findIndex === -1) {
+ findIndex = 0;
}
}
return findIndex;
@@ -809,7 +831,9 @@ function findEntryTypeCpu(sp: SpSystemTrace, findEntry: any): void {
findEntry, // @ts-ignore
item.dataListCache.find((it) => it.startTime > findEntry.startTime)
);
- item.fixedList = [findEntry];
+ let _findEntry = JSON.parse(JSON.stringify(findEntry));
+ _findEntry.type = 'thread';
+ item.fixedList = [_findEntry];
}
item.highlight = item.rowId === `${Utils.getDistributedRowId(findEntry.cpu)}`;
item.draw(true);
@@ -977,15 +1001,14 @@ export async function spSystemTraceInit(
sp.intersectionObserver?.observe(it);
});
// trace文件加载完毕,将动效json文件读取并存入缓存
- let funDetailUrl = `https://${window.location.host.split(':')[0]}:${
- window.location.port
- }/application/doc/funDetail.json`;
- var xhr = new XMLHttpRequest();
+ let funDetailUrl = `https://${window.location.host.split(':')[0]}:${window.location.port
+ }/application/doc/funDetail.json`;
+ let xhr = new XMLHttpRequest();
// 创建XMLHttpRequest对象
xhr.open('GET', funDetailUrl);
- xhr.onreadystatechange = function () {
+ xhr.onreadystatechange = function (): void {
if (xhr.readyState === 4 && xhr.status === 200) {
- var content = xhr.responseText;
+ let content = xhr.responseText;
caches.open('/funDetail').then((cache) => {
let headers = new Headers();
headers.append('Content-Type', 'application/json');
diff --git a/ide/src/trace/component/SpSystemTrace.line.ts b/ide/src/trace/component/SpSystemTrace.line.ts
index 34a661b420e6c5f9b3e34bd179a1062586e31848..d86c67df29fb3c70e9f62f220142b4741276c23c 100644
--- a/ide/src/trace/component/SpSystemTrace.line.ts
+++ b/ide/src/trace/component/SpSystemTrace.line.ts
@@ -65,7 +65,7 @@ function addPointHandle(
sourceThreadRow: TraceRow,
targetData: FuncStruct,
targetThreadRow: TraceRow,
- lineType?:string
+ lineType?: string
): void {
let sourceParentRow: TraceRow | null | undefined;
let targetParentRow: TraceRow | null | undefined;
@@ -96,7 +96,7 @@ function addPointHandle(
if (startPoint && endPoint) {
startPoint.lineType = endPoint.lineType = LineType.brokenLine;
startPoint.lineColor = endPoint.lineColor = '#ff0000';
- sp.addPointPair(startPoint, endPoint,lineType);
+ sp.addPointPair(startPoint, endPoint, lineType);
}
}
@@ -449,7 +449,7 @@ export function spSystemTraceDrawDistributedLine(
}
}
}
- addPointHandle(sp, sourceData, sourceThreadRow, targetData, targetThreadRow,'distributedLine');
+ addPointHandle(sp, sourceData, sourceThreadRow, targetData, targetThreadRow, 'distributedLine');
}
function taskPoolOtherRelationData(
@@ -689,7 +689,7 @@ function jankPoint(
let ts: number = 0;
if (findJankEntry) {
ts = selectThreadStruct.startTime! + selectThreadStruct.dur! / 2;
- const [startY, startRowEl, startOffSetY] = sp.calculateStartY(startRow,selectThreadStruct.pid);
+ const [startY, startRowEl, startOffSetY] = sp.calculateStartY(startRow, selectThreadStruct.pid);
const [endY, endRowEl, endOffSetY] = sp.calculateEndY(endParentRow, endRowStruct);
sp.addPointPair(
sp.makePoint(
@@ -717,18 +717,19 @@ function jankPoint(
}
function junkBinder(
- endRowStruct: any,
+ endRowStruct: unknown,
selectFuncStruct: FuncStruct,
- startRow: any,
- endParentRow: any,
+ startRow: unknown,
+ endParentRow: unknown,
sp: SpSystemTrace,
- data: any
-) {
+ data: unknown
+): void {
+ // @ts-ignore
let findJankEntry = endRowStruct!.fixedList[0];
let ts: number = 0;
if (findJankEntry) {
ts = selectFuncStruct.startTs! + selectFuncStruct.dur! / 2;
- const [startY, startRowEl, startOffSetY] = sp.calculateStartY(startRow, selectFuncStruct.pid,selectFuncStruct);
+ const [startY, startRowEl, startOffSetY] = sp.calculateStartY(startRow, selectFuncStruct.pid, selectFuncStruct);
const [endY, endRowEl, endOffSetY] = sp.calculateEndY(endParentRow, endRowStruct, data);
sp.addPointPair(
sp.makePoint(
@@ -739,7 +740,7 @@ function junkBinder(
startOffSetY,
'func',
LineType.straightLine,
- selectFuncStruct.startTs == ts
+ selectFuncStruct.startTs === ts
),
sp.makePoint(
ns2xByTimeShaft(findJankEntry.startTs!, sp.timerShaftEL!),
@@ -793,38 +794,41 @@ export function spSystemTraceDrawThreadLine(
export function spSystemTraceDrawFuncLine(
sp: SpSystemTrace,
- endParentRow: any,
+ endParentRow: unknown,
selectFuncStruct: FuncStruct | undefined,
- data: any,
- binderTid:Number
+ data: unknown,
+ binderTid: Number
): void {
let collectList = sp.favoriteChartListEL!.getCollectRows();
- if(selectFuncStruct === undefined || selectFuncStruct === null){
+ if (selectFuncStruct === undefined || selectFuncStruct === null) {
return;
}
- let selectRowId = selectFuncStruct?.tid?selectFuncStruct?.tid:binderTid.toString();
- let startRow = sp.shadowRoot?.querySelector>(`trace-row[row-id='${selectRowId}'][row-type='func']`)
- // let startRow = sp.getStartRow(selectRowId, collectList);
+ let selectRowId = selectFuncStruct?.tid ? selectFuncStruct?.tid : binderTid.toString();
+ let startRow = sp.shadowRoot?.querySelector>(`trace-row[row-id='${selectRowId}'][row-type='func']`);
if (!startRow) {
for (let collectChart of collectList) {
if (collectChart.rowId === selectRowId.toString() && collectChart.rowType === 'func') {
- startRow = collectChart as TraceRow;
+ startRow = collectChart as TraceRow;
break;
}
}
}
if (endParentRow) {
+ // @ts-ignore
endParentRow.expansion = true;
- let endRowStruct: any = sp.shadowRoot?.querySelector>(
+ let endRowStruct: unknown = sp.shadowRoot?.querySelector>(
+ // @ts-ignore
`trace-row[row-id='${data.tid}'][row-type='func']`
);
if (!endRowStruct) {
+ // @ts-ignore
endRowStruct = endParentRow.childrenList.find((item: TraceRow) => {
+ // @ts-ignore
return item.rowId === `${data.tid}` && item.rowType === 'func';
});
}
if (endRowStruct) {
- junkBinder(endRowStruct, selectFuncStruct, startRow, endParentRow, sp, data);
+ junkBinder(endRowStruct, selectFuncStruct, startRow, endParentRow, sp, data);
}
}
}
diff --git a/ide/src/trace/component/SpSystemTrace.ts b/ide/src/trace/component/SpSystemTrace.ts
index 1dd3d91228b0ef6568bb7c1bd089a1d8682c4c10..74c893600bd83d8aae2dfab66f21c91cf61dec06 100644
--- a/ide/src/trace/component/SpSystemTrace.ts
+++ b/ide/src/trace/component/SpSystemTrace.ts
@@ -101,6 +101,7 @@ import { querySceneSearchFunc, querySearchFunc } from '../database/sql/Func.sql'
import { queryCpuKeyPathData } from '../database/sql/Cpu.sql';
import { LtpoStruct } from '../database/ui-worker/ProcedureWorkerLTPO';
import { HitchTimeStruct } from '../database/ui-worker/ProcedureWorkerHitchTime';
+import { ProcessMemStruct } from '../database/ui-worker/ProcedureWorkerMem';
import {
spSystemTraceInit,
spSystemTraceInitElement,
@@ -274,7 +275,7 @@ export class SpSystemTrace extends BaseElement {
}
addPointPair(startPoint: PairPoint, endPoint: PairPoint, lineType?: string): void {
- if(startPoint !== null && startPoint.rowEL !== null && endPoint !== null && endPoint.rowEL !== null){
+ if (startPoint !== null && startPoint.rowEL !== null && endPoint !== null && endPoint.rowEL !== null) {
if (startPoint.rowEL.collect) {
if (this.timerShaftEL?._checkExpand) {
startPoint.rowEL.translateY =
@@ -728,38 +729,64 @@ export class SpSystemTrace extends BaseElement {
}
// draw prio curve
- drawPrioCurve(context: any, row: TraceRow) {
- let curveDrawList: any = [];
+ // @ts-ignore
+ drawPrioCurve(context: unknown, row: TraceRow): void {
+ let curveDrawList: unknown = [];
let oldVal: number = -1;
- let threadFilter = row.dataListCache.filter((it: any) => it.state === 'Running'); //筛选状态是Running的数据
+ // @ts-ignore
+ let threadFilter = row.dataListCache.filter((it: unknown) => it.state === 'Running'); //筛选状态是Running的数据
//计算每个点的坐标
+ // @ts-ignore
prioClickHandlerFun(ThreadStruct.prioCount, row, threadFilter, curveDrawList, oldVal);
//绘制曲线透明度设置1,根据计算的曲线坐标开始画图
+ // @ts-ignore
context.globalAlpha = 1;
+ // @ts-ignore
context.beginPath();
- let x0, y0;
+ let x0;
+ let y0;
+ // @ts-ignore
if (curveDrawList[0] && curveDrawList[0].frame) {
+ // @ts-ignore
x0 = curveDrawList[0].frame.x;
+ // @ts-ignore
y0 = curveDrawList[0].curveFloatY;
}
+ // @ts-ignore
context!.moveTo(x0!, y0!);
+ // @ts-ignore
if (SpSystemTrace.isKeyUp || curveDrawList.length < 90) {
+ // @ts-ignore
for (let i = 0; i < curveDrawList.length - 1; i++) {
+ // @ts-ignore
let re = curveDrawList[i];
+ // @ts-ignore
let nextRe = curveDrawList[i + 1];
+ // @ts-ignore
drawThreadCurve(context, re, nextRe);
}
+ // @ts-ignore
context.closePath();
+ // @ts-ignore
} else if (!SpSystemTrace.isKeyUp && curveDrawList.length >= 90) {
- let x, y;
+ let x;
+ let y;
+ // @ts-ignore
if (curveDrawList[curveDrawList.length - 1] && curveDrawList[curveDrawList.length - 1].frame) {
+ // @ts-ignore
x = curveDrawList[curveDrawList.length - 1].frame.x;
+ // @ts-ignore
y = curveDrawList[curveDrawList.length - 1].curveFloatY;
}
+ // @ts-ignore
context.lineWidth = 1;
+ // @ts-ignore
context.strokeStyle = '#ffc90e';
+ // @ts-ignore
context.lineCap = 'round';
+ // @ts-ignore
context.lineTo(x, y);
+ // @ts-ignore
context.stroke();
}
}
@@ -856,7 +883,7 @@ export class SpSystemTrace extends BaseElement {
} else if (PerfToolStruct.selectPerfToolStruct) {
this.currentSlicesTime.startTime = PerfToolStruct.selectPerfToolStruct.startTs;
this.currentSlicesTime.endTime = PerfToolStruct.selectPerfToolStruct.startTs! + PerfToolStruct.selectPerfToolStruct.dur!;
- } else if(DmaFenceStruct.selectDmaFenceStruct){
+ } else if (DmaFenceStruct.selectDmaFenceStruct) {
if (DmaFenceStruct.selectDmaFenceStruct.startTime && DmaFenceStruct.selectDmaFenceStruct.dur) {
this.currentSlicesTime.startTime = DmaFenceStruct.selectDmaFenceStruct.startTime;
this.currentSlicesTime.endTime = DmaFenceStruct.selectDmaFenceStruct.startTime + DmaFenceStruct.selectDmaFenceStruct.dur;
@@ -940,14 +967,14 @@ export class SpSystemTrace extends BaseElement {
})
);
} else {
- if(this.focusTarget === ''){
- this.dispatchEvent(
- new CustomEvent('trace-next-data', {
- detail: { down: true },
- composed: false,
- })
- );
- }
+ if (this.focusTarget === '') {
+ this.dispatchEvent(
+ new CustomEvent('trace-next-data', {
+ detail: { down: true },
+ composed: false,
+ })
+ );
+ }
}
}
};
@@ -1147,6 +1174,7 @@ export class SpSystemTrace extends BaseElement {
CpuFreqStruct.hoverCpuFreqStruct = undefined;
ThreadStruct.hoverThreadStruct = undefined;
FuncStruct.hoverFuncStruct = undefined;
+ ProcessMemStruct.hoverProcessMemStruct = undefined;
HiPerfCpuStruct.hoverStruct = undefined;
HiPerfProcessStruct.hoverStruct = undefined;
HiPerfThreadStruct.hoverStruct = undefined;
@@ -1435,7 +1463,7 @@ export class SpSystemTrace extends BaseElement {
spSystemTraceDrawThreadLine(this, endParentRow, selectThreadStruct, data);
}
- drawFuncLine(endParentRow: any, selectFuncStruct: FuncStruct | undefined, data: any, binderTid: Number): void {
+ drawFuncLine(endParentRow: unknown, selectFuncStruct: FuncStruct | undefined, data: unknown, binderTid: Number): void {
spSystemTraceDrawFuncLine(this, endParentRow, selectFuncStruct, data, binderTid);
}
@@ -1456,10 +1484,12 @@ export class SpSystemTrace extends BaseElement {
return startRow;
}
- calculateStartY(startRow: any, pid: number | undefined, selectFuncStruct?: FuncStruct): [number, any, number] {
+ calculateStartY(startRow: unknown, pid: number | undefined, selectFuncStruct?: FuncStruct): [number, unknown, number] {
+ // @ts-ignore
let startY = startRow ? startRow!.translateY! : 0;
let startRowEl = startRow;
let startOffSetY = selectFuncStruct ? 20 * (0.5 + Number(selectFuncStruct.depth)) : 20 * 0.5;
+ // @ts-ignore
const startParentRow = startRow ? this.shadowRoot?.querySelector>(`trace-row[row-id='${startRow.rowParentId}'][folder]`) : this.shadowRoot?.querySelector>(
`trace-row[row-id='${pid}'][folder]`
);
@@ -1472,14 +1502,19 @@ export class SpSystemTrace extends BaseElement {
return [startY, startRowEl, startOffSetY];
}
- calculateEndY(endParentRow: any, endRowStruct: any, data?: any): [number, any, number] {
+ calculateEndY(endParentRow: unknown, endRowStruct: unknown, data?: unknown): [number, unknown, number] {
+ // @ts-ignore
let endY = endRowStruct.translateY!;
let endRowEl = endRowStruct;
+ // @ts-ignore
let endOffSetY = data ? 20 * (0.5 + Number(data.depth)) : 20 * 0.5;
const expansionFlag = this.collectionHasThread(endRowStruct);
+ // @ts-ignore
if (!endParentRow.expansion && expansionFlag) {
+ // @ts-ignore
endY = endParentRow.translateY!;
endRowEl = endParentRow;
+ // @ts-ignore
endOffSetY = data ? 10 * (0.5 + Number(data.depth)) : 10 * 0.5;
}
return [endY, endRowEl, endOffSetY];
@@ -1562,8 +1597,10 @@ export class SpSystemTrace extends BaseElement {
}),
scrollTop: this.rowsEL!.scrollTop,
favoriteScrollTop: this.favoriteChartListEL!.scrollTop,
- drawFlag: this.timerShaftEL!.sportRuler!.flagList,//下载时存旗帜的信息
- markFlag: this.timerShaftEL!.sportRuler!.slicesTimeList,//下载时存M和shiftM的信息
+ //下载时存旗帜的信息
+ drawFlag: this.timerShaftEL!.sportRuler!.flagList,
+ //下载时存M和shiftM的信息
+ markFlag: this.timerShaftEL!.sportRuler!.slicesTimeList,
});
this.downloadRecordFile(data).then(() => { });
}
@@ -1819,7 +1856,7 @@ export class SpSystemTrace extends BaseElement {
let id = Utils.getDistributedRowId(rowId);
let parentId = Utils.getDistributedRowId(rowParentId);
let traceRow = // @ts-ignore
- this.rowsEL!.querySelector>(`trace-row[row-id='${id}'][row-type='${rowType}']`) ||
+ this.rowsEL!.querySelector>(`trace-row[row-id='${id}'][row-type='${rowType}']`) ||
this.favoriteChartListEL!.getCollectRow((row) => row.rowId === id && row.rowType === rowType);
if (traceRow?.collect) {
this.favoriteChartListEL!.scroll({
@@ -1832,7 +1869,7 @@ export class SpSystemTrace extends BaseElement {
});
} else {
// @ts-ignore
- let row = this.rowsEL!.querySelector>(`trace-row[row-id='${parentId}'][folder]`);
+ let row = this.rowsEL!.querySelector>(`trace-row[row-id='${parentId}'][folder]`);
if (row && !row.expansion) {
row.expansion = true;
}
@@ -2030,23 +2067,25 @@ export class SpSystemTrace extends BaseElement {
});
};
- loadGpuCounter = async (ev: File) => {
+ loadGpuCounter = async (ev: File): Promise => {
this.observerScrollHeightEnable = false;
await this.initGpuCounter(ev);
- this.rowsEL?.querySelectorAll('trace-row').forEach((it: any) => this.observer.observe(it));
+ // @ts-ignore
+ this.rowsEL?.querySelectorAll('trace-row').forEach((it: unknown) => this.observer.observe(it));
window.publish(window.SmartEvent.UI.MouseEventEnable, {
mouseEnable: true,
});
};
- initGpuCounter = async (ev: File) => {
+ initGpuCounter = async (ev: File): Promise => {
this.rowsPaneEL!.scroll({
top: 0,
left: 0,
});
this.chartManager?.initGpuCounter(ev).then(() => {
this.loadTraceCompleted = true;
- this.rowsEL!.querySelectorAll>('trace-row').forEach((it) => {
+ // @ts-ignore
+ this.rowsEL!.querySelectorAll>('trace-row').forEach((it) => {
this.intersectionObserver?.observe(it);
});
});
@@ -2105,34 +2144,36 @@ export class SpSystemTrace extends BaseElement {
return await searchCpuDataSender(pidArr, tidArr, Utils.currentSelectTrace);
}
//根据seach的内容匹配异步缓存数据中那些符合条件
- seachAsyncFunc(query: string) {
- let asyncFuncArr: Array = [];
- let strNew = (str: any) => {
- const specialChars = {
- "^": '\\^',
- "$": '\\$',
- ".": '\\.',
- "*": '\\*',
- "+": '\\+',
- "?": '\\?',
- "-": '\\-',
- "|": '\\|',
- "(": '\\(',
- ")": '\\)',
- "[": '\\[',
- "]": '\\]',
- "{": '\\{',
- "}": '\\}',
- };
+ seachAsyncFunc(query: string): unknown[] {
+ let asyncFuncArr: Array = [];
+ let strNew = (str: unknown): string => {
+ const specialChars = {
+ '': '\\^',
+ '$': '\\$',
+ '.': '\\.',
+ '*': '\\*',
+ '+': '\\+',
+ '?': '\\?',
+ '-': '\\-',
+ '|': '\\|',
+ '(': '\\(',
+ ')': '\\)',
+ '[': '\\[',
+ ']': '\\]',
+ '{': '\\{',
+ '}': '\\}',
+ };
+ // @ts-ignore
return str.replace(/[$\^.*+?|()\[\]{}-]/g, (match: string) => specialChars[match as keyof typeof specialChars]); // 类型断言
- }
- let regex = new RegExp(strNew(query), 'i')
- SpProcessChart.asyncFuncCache.forEach((item: any) => {
+ };
+ let regex = new RegExp(strNew(query), 'i');
+ SpProcessChart.asyncFuncCache.forEach((item: unknown) => {
+ // @ts-ignore
if (regex.test(item.funName)) {
- asyncFuncArr.push(item)
+ asyncFuncArr.push(item);
}
- })
- return asyncFuncArr
+ });
+ return asyncFuncArr;
}
async searchFunction(cpuList: Array, asynList: Array, query: string): Promise> {
@@ -2145,7 +2186,7 @@ export class SpSystemTrace extends BaseElement {
this.shadowRoot!.querySelectorAll>("trace-row[row-type='process'][scene]").forEach(
(row): void => {
let rowId = row.rowId;
- if (rowId && rowId.includes('-')){
+ if (rowId && rowId.includes('-')) {
rowId = rowId.split('-')[0];
}
processList.push(rowId as string);
@@ -2173,8 +2214,10 @@ export class SpSystemTrace extends BaseElement {
searchTargetTraceHandler(): void {
if (Utils.currentSelectTrace) {
- let traceFolder1 = this.shadowRoot!.querySelector>(`trace-row[row-id='trace-1']`);
- let traceFolder2 = this.shadowRoot!.querySelector>(`trace-row[row-id='trace-2']`);
+ // @ts-ignore
+ let traceFolder1 = this.shadowRoot!.querySelector>(`trace-row[row-id='trace-1']`);
+ // @ts-ignore
+ let traceFolder2 = this.shadowRoot!.querySelector>(`trace-row[row-id='trace-2']`);
if (Utils.currentSelectTrace === '1') {
if (traceFolder2?.expansion) {
traceFolder2!.expansion = false;
@@ -2236,10 +2279,6 @@ export class SpSystemTrace extends BaseElement {
// @ts-ignore
FuncStruct.hoverFuncStruct = entry; // @ts-ignore
FuncStruct.selectFuncStruct = entry;
- // 鼠标左键点击不需要触发点击事件
- if (FuncStruct.funcSelect) {
- this.onClickHandler(TraceRow.ROW_TYPE_FUNC, undefined, entry);
- } // @ts-ignore
this.scrollToDepth(
`${funcRowID}`, // @ts-ignore
`${Utils.getDistributedRowId(funcStract.pid)}`,
@@ -2247,6 +2286,10 @@ export class SpSystemTrace extends BaseElement {
true, // @ts-ignore
entry.depth || 0
);
+ // 鼠标左键点击不需要触发点击事件
+ if (FuncStruct.funcSelect) {
+ this.onClickHandler(TraceRow.ROW_TYPE_FUNC, undefined, entry);
+ } // @ts-ignore
FuncStruct.funcSelect = true;
}
};
@@ -2364,7 +2407,6 @@ export class SpSystemTrace extends BaseElement {
it.processName = p;
it.processCmdLine = p;
it.name = t;
- it.type = 'cpu';
if (next) {
if (it.startTime! + it.dur! > next!.startTime! || it.dur === -1 || it.dur === null || it.dur === undefined) {
it.dur = next!.startTime! - it.startTime!;
@@ -2421,7 +2463,7 @@ export class SpSystemTrace extends BaseElement {
threadPool.submitProto(QueryEnum.ClearMemoryCache, {}, (res: unknown, len: number): void => { });
}
if (threadPool2) {
- threadPool2.submitProto(QueryEnum.ClearMemoryCache, {}, (res: any, len: number): void => { });
+ threadPool2.submitProto(QueryEnum.ClearMemoryCache, {}, (res: unknown, len: number): void => { });
}
this.times.clear();
resetVSync();
diff --git a/ide/src/trace/component/SpThirdParty.ts b/ide/src/trace/component/SpThirdParty.ts
index b34599c3bdc57be30aafbee308a948607d638c21..b66921f444883fb9fe49b167af2d55b8aae1b99c 100644
--- a/ide/src/trace/component/SpThirdParty.ts
+++ b/ide/src/trace/component/SpThirdParty.ts
@@ -90,10 +90,10 @@ export class SpThirdParty extends BaseElement {
`;
}
- addUploadEvent(uploadBtn: HTMLElement, uploadEl: HTMLInputElement) {
+ addUploadEvent(uploadBtn: HTMLElement, uploadEl: HTMLInputElement): void {
uploadBtn?.addEventListener('click', () => {
uploadEl?.click();
- })
+ });
uploadEl!.addEventListener('change', () => {
let files = uploadEl!.files;
if (files && files.length > 0) {
@@ -103,9 +103,11 @@ export class SpThirdParty extends BaseElement {
let fileHandler = child[0].fileHandler!;
fileHandler({
detail: files[0]
- })
+ });
+ }
+ if (uploadEl) {
+ uploadEl.value = '';
}
- if (uploadEl) uploadEl.value = '';
})
}
}
diff --git a/ide/src/trace/component/chart/SpAbilityMonitorChart.ts b/ide/src/trace/component/chart/SpAbilityMonitorChart.ts
index e2ab376ce0f7d596756b2e364c153a5ff5310759..54a03e64dfd341c4cba17429c876d9a3ae18220f 100644
--- a/ide/src/trace/component/chart/SpAbilityMonitorChart.ts
+++ b/ide/src/trace/component/chart/SpAbilityMonitorChart.ts
@@ -221,7 +221,7 @@ export class SpAbilityMonitorChart {
context = userTraceRow.collect ? this.trace.canvasFavoritePanelCtx! : this.trace.canvasPanelCtx!;
}
userTraceRow.canvasSave(context);
- (renders['monitorCpu'] as CpuAbilityRender).renderMainThread(
+ (renders.monitorCpu as CpuAbilityRender).renderMainThread(
{
context: context,
useCache: useCache,
@@ -268,7 +268,7 @@ export class SpAbilityMonitorChart {
context = traceRow.collect ? this.trace.canvasFavoritePanelCtx! : this.trace.canvasPanelCtx!;
}
traceRow.canvasSave(context);
- (renders['monitorCpu'] as CpuAbilityRender).renderMainThread(
+ (renders.monitorCpu as CpuAbilityRender).renderMainThread(
{
context: context,
useCache: useCache,
@@ -318,7 +318,7 @@ export class SpAbilityMonitorChart {
context = sysTraceRow.collect ? this.trace.canvasFavoritePanelCtx! : this.trace.canvasPanelCtx!;
}
sysTraceRow.canvasSave(context);
- (renders['monitorCpu'] as CpuAbilityRender).renderMainThread(
+ (renders.monitorCpu as CpuAbilityRender).renderMainThread(
{
context: context,
useCache: useCache,
@@ -345,7 +345,7 @@ export class SpAbilityMonitorChart {
context = memoryUsedRow.collect ? this.trace.canvasFavoritePanelCtx! : this.trace.canvasPanelCtx!;
}
memoryUsedRow.canvasSave(context);
- (renders['monitorMemory'] as MemoryAbilityRender).renderMainThread(
+ (renders.monitorMemory as MemoryAbilityRender).renderMainThread(
{
context: context,
useCache: useCache,
diff --git a/ide/src/trace/component/chart/SpBpftraceChart.ts b/ide/src/trace/component/chart/SpBpftraceChart.ts
index 0cc9ed002625e19fd3ce9d0563bb24f2f521b4ca..282ddcd0f9c308e1b50b2267630fa3a4fdd441f0 100644
--- a/ide/src/trace/component/chart/SpBpftraceChart.ts
+++ b/ide/src/trace/component/chart/SpBpftraceChart.ts
@@ -51,7 +51,9 @@ export class SpBpftraceChart {
traceRow.selectChangeHandler = this.trace.selectChangeHandler;
traceRow.favoriteChangeHandler = this.trace.favoriteChangeHandler;
//添加上传按钮
- if (!file) traceRow.addRowSampleUpload();
+ if (!file) {
+ traceRow.addRowSampleUpload();
+ }
this.addTraceRowEventListener(traceRow, start_ts);
//单独上传
if (file) {
diff --git a/ide/src/trace/component/chart/SpChartManager.ts b/ide/src/trace/component/chart/SpChartManager.ts
index f577f8c66c73d3cbcc801201d7ac054fb855ce68..8b506184019bb8a0f45ec741453750c6879c1b12 100644
--- a/ide/src/trace/component/chart/SpChartManager.ts
+++ b/ide/src/trace/component/chart/SpChartManager.ts
@@ -57,7 +57,7 @@ import { sliceSender } from '../../database/data-trafic/SliceSender';
import { BaseStruct } from '../../bean/BaseStruct';
import { SpGpuCounterChart } from './SpGpuCounterChart';
import { SpUserFileChart } from './SpUserPluginChart'
-import { queryDmaFenceIdAndCat } from '../../database/sql/dmaFence.sql'
+import { queryDmaFenceIdAndCat } from '../../database/sql/dmaFence.sql';
import { queryAllFuncNames } from '../../database/sql/Func.sql';
export class SpChartManager {
@@ -130,7 +130,7 @@ export class SpChartManager {
appStartUpPids.forEach((it) => SpChartManager.APP_STARTUP_PID_ARR.push(it.pid));
}
await this.initTraceConfig(); //@ts-ignore
- dict.map((d) => SpSystemTrace.DATA_DICT.set(d['id'], d['data']));
+ dict.map((d) => SpSystemTrace.DATA_DICT.set(d.id, d.data));
await this.cacheDataDictToWorker();
SpSystemTrace.DATA_TASK_POOL_CALLSTACK.clear();
let taskPoolCallStack = await queryTaskPoolCallStack();
@@ -233,8 +233,8 @@ export class SpChartManager {
async initDistributedChart(progress: Function, file1: string, file2: string): Promise {
let funArr1 = await queryAllFuncNames('1');
let funArr2 = await queryAllFuncNames('2');
- this.handleFuncName(funArr1,'1');
- this.handleFuncName(funArr2,'2');
+ this.handleFuncName(funArr1, '1');
+ this.handleFuncName(funArr2, '2');
progress('load data dict', 50);
SpSystemTrace.DATA_DICT.clear();
SpChartManager.APP_STARTUP_PID_ARR = [];
@@ -252,7 +252,8 @@ export class SpChartManager {
info(`trace 2 load completed`);
}
- async initDistributedTraceRow(traceId: string, traceFolder: TraceRow, progress: Function): Promise {
+ // @ts-ignore
+ async initDistributedTraceRow(traceId: string, traceFolder: TraceRow, progress: Function): Promise {
let ptArr = await queryThreadAndProcessName(traceId);
// @ts-ignore
this.handleProcessThread(ptArr, traceId);
@@ -263,12 +264,15 @@ export class SpChartManager {
await this.cpu.init(count.cpu, traceFolder, traceId);
info(`initData trace ${traceId} cpu Data initialized`);
progress(`trace ${traceId} cpu freq`, 75);
+ // @ts-ignore
await this.freq.init(traceFolder, traceId);
info(`initData trace ${traceId} cpu freq Data initialized`);
progress(`trace ${traceId} clock`, 80);
+ // @ts-ignore
await this.clockChart.init(traceFolder, traceId);
info(`initData trace ${traceId} clock Data initialized`);
progress(`trace ${traceId} Irq`, 85);
+ // @ts-ignore
await this.irqChart.init(traceFolder, traceId);
info(`initData trace ${traceId} irq Data initialized`);
progress(`trace ${traceId} process`, 92);
@@ -301,7 +305,7 @@ export class SpChartManager {
await this.spBpftraceChart.init(ev);
}
- async initGpuCounter(ev: File) {
+ async initGpuCounter(ev: File): Promise {
const res = await this.initSampleTime(ev, 'gpucounter');
//@ts-ignore
await this.spGpuCounterChart.init(res);
@@ -310,7 +314,7 @@ export class SpChartManager {
async importSoFileUpdate(): Promise {
SpSystemTrace.DATA_DICT.clear();
let dict = await queryDataDICT(); //@ts-ignore
- dict.map((d) => SpSystemTrace.DATA_DICT.set(d['id'], d['data']));
+ dict.map((d) => SpSystemTrace.DATA_DICT.set(d.id, d.data));
await this.cacheDataDictToWorker();
await perfDataQuery.initPerfCache();
await this.nativeMemory.initNativeMemory();
@@ -331,13 +335,13 @@ export class SpChartManager {
}
// 将callstatck表信息转为map存入utils
- handleFuncName(funcNameArray: Array,traceId?:string) {
- if(traceId){
+ handleFuncName(funcNameArray: Array, traceId?: string): void {
+ if (traceId) {
funcNameArray.forEach((it) => {
//@ts-ignore
- Utils.getInstance().getCallStatckMap().set(`${traceId}_${it.id!}`,it.name);
+ Utils.getInstance().getCallStatckMap().set(`${traceId}_${it.id!}`, it.name);
});
- }else {
+ } else {
funcNameArray.forEach((it) => {
//@ts-ignore
Utils.getInstance().getCallStatckMap().set(it.id, it.name);
@@ -376,8 +380,11 @@ export class SpChartManager {
let endNS = 30_000_000_000;
if (type === 'gpucounter') {
res = await this.spGpuCounterChart.getCsvData(ev);
+ // @ts-ignore
const endTime = Number(res[res.length - 1].split(',')[0]);
+ // @ts-ignore
const minIndex = this.spGpuCounterChart.getMinData(res) + 1;
+ // @ts-ignore
const startTime = Number(res[minIndex].split(',')[0]);
endNS = Number((endTime - startTime).toString().slice(0, 11));
}
@@ -395,7 +402,7 @@ export class SpChartManager {
return res;
};
- initCpuRate = async (rates: Array<{ cpu: number; ro: number; rate: number;}>): Promise => {
+ initCpuRate = async (rates: Array<{ cpu: number; ro: number; rate: number; }>): Promise => {
if (this.trace.timerShaftEL) {
this.trace.timerShaftEL.cpuUsage = rates;
}
@@ -425,7 +432,8 @@ export class SpChartManager {
});
}
- createFolderRow(rowId: string, rowType: string, rowName: string, traceId?: string): TraceRow {
+ // @ts-ignore
+ createFolderRow(rowId: string, rowType: string, rowName: string, traceId?: string): TraceRow {
let row = TraceRow.skeleton(traceId);
row.setAttribute('disabled-check', '');
row.rowId = rowId;
@@ -446,7 +454,7 @@ export class SpChartManager {
}
//存名字
- handleDmaFenceName(arr: T[]) {
+ handleDmaFenceName(arr: T[]): void {
Utils.DMAFENCECAT_MAP.clear();
for (let item of arr) {
Utils.DMAFENCECAT_MAP.set(item.id, item);
diff --git a/ide/src/trace/component/chart/SpClockChart.ts b/ide/src/trace/component/chart/SpClockChart.ts
index 7071b74e4ca7e4b3f6a746bebc5ad94363132a49..9f4aa584c809ddbc15c9e15b1fedbac94e375096 100644
--- a/ide/src/trace/component/chart/SpClockChart.ts
+++ b/ide/src/trace/component/chart/SpClockChart.ts
@@ -25,7 +25,7 @@ import { clockDataSender } from '../../database/data-trafic/ClockDataSender';
import { queryClockData } from '../../database/sql/Clock.sql';
import { DmaFenceRender, DmaFenceStruct } from '../../database/ui-worker/ProcedureWorkerDmaFence';
import { dmaFenceSender } from '../../database/data-trafic/dmaFenceSender';
-import { queryDmaFenceName } from '../../database/sql/dmaFence.sql'
+import { queryDmaFenceName } from '../../database/sql/dmaFence.sql';
import { BaseStruct } from '../../bean/BaseStruct';
export class SpClockChart {
@@ -117,7 +117,7 @@ export class SpClockChart {
context = traceRow.collect ? this.trace.canvasFavoritePanelCtx! : this.trace.canvasPanelCtx!;
}
traceRow.canvasSave(context);
- (renders['clock'] as ClockRender).renderMainThread(
+ (renders.clock as ClockRender).renderMainThread(
{
context: context,
useCache: useCache,
@@ -189,8 +189,9 @@ export class SpClockChart {
info('The time to load the ClockData is: ', durTime);
}
- async initDmaFence(folder: TraceRow) {
- let dmaFenceNameList = await queryDmaFenceName()
+ // @ts-ignore
+ async initDmaFence(folder: TraceRow): void {
+ let dmaFenceNameList = await queryDmaFenceName();
if (dmaFenceNameList.length) {
let dmaFenceList = [];
const timelineValues = dmaFenceNameList.map(obj => obj.timeline);
@@ -209,19 +210,24 @@ export class SpClockChart {
// @ts-ignore
traceRow.supplierFrame = () => {
return dmaFenceSender('dma_fence_init', `${timelineValues[i]}`, traceRow).then((res) => {
- res.forEach((item: any) => {
+ res.forEach((item: unknown) => {
+ // @ts-ignore
let detail = Utils.DMAFENCECAT_MAP.get(item.id!);
if (detail) {
let catValue = (detail.cat.match(/^dma_(.*)$/))![1];
+ // @ts-ignore
item.sliceName = catValue.endsWith('ed') ? `${catValue.slice(0, -2)}(${detail.seqno})` : `${catValue}(${detail.seqno})`;
+ // @ts-ignore
item.driver = detail.driver;
+ // @ts-ignore
item.context = detail.context;
+ // @ts-ignore
item.depth = 0;
}
- })
+ });
return dmaFenceList = res;
- })
+ });
};
traceRow.onThreadHandler = (useCache) => {
@@ -232,7 +238,7 @@ export class SpClockChart {
context = traceRow.collect ? this.trace.canvasFavoritePanelCtx! : this.trace.canvasPanelCtx!;
}
traceRow.canvasSave(context);
- (renders['dmaFence'] as DmaFenceRender).renderMainThread(
+ (renders.dmaFence as DmaFenceRender).renderMainThread(
{
dmaFenceContext: context,
useCache: useCache,
@@ -270,7 +276,7 @@ export class SpClockChart {
if (clockFolder.expansion) {
this.trace.canvasPanelCtx?.clearRect(0, 0, clockFolder.frame.width, clockFolder.frame.height);
} else {
- (renders['empty'] as EmptyRender).renderMainThread(
+ (renders.empty as EmptyRender).renderMainThread(
{
context: this.trace.canvasPanelCtx,
useCache: useCache,
diff --git a/ide/src/trace/component/chart/SpCpuChart.ts b/ide/src/trace/component/chart/SpCpuChart.ts
index 0e73a3c2c2c0d4ce2757a0c868e6bbdf0704a9bb..872c6bb09bbf8bfd8d38abfb6bf8cc1341585730 100644
--- a/ide/src/trace/component/chart/SpCpuChart.ts
+++ b/ide/src/trace/component/chart/SpCpuChart.ts
@@ -77,7 +77,8 @@ export class SpCpuChart {
};
}
- async init(cpuDataCount?: Map, parentRow?: TraceRow, traceId?: string): Promise {
+ // @ts-ignore
+ async init(cpuDataCount?: Map, parentRow?: TraceRow, traceId?: string): Promise {
let CpuStartTime = new Date().getTime();
let array = await queryCpuMax(traceId);
let cpuCountResult = await queryCpuCount(traceId);
@@ -143,10 +144,8 @@ export class SpCpuChart {
this.trace?.displayTip(
traceRow,
CpuStruct.hoverCpuStruct,
- `P:${CpuStruct.hoverCpuStruct?.processName || 'Process'} [${
- CpuStruct.hoverCpuStruct?.processId
- }]T:${CpuStruct.hoverCpuStruct?.name} [${CpuStruct.hoverCpuStruct?.tid}] [Prio:${
- CpuStruct.hoverCpuStruct?.priority || 0
+ `P:${CpuStruct.hoverCpuStruct?.processName || 'Process'} [${CpuStruct.hoverCpuStruct?.processId
+ }]T:${CpuStruct.hoverCpuStruct?.name} [${CpuStruct.hoverCpuStruct?.tid}] [Prio:${CpuStruct.hoverCpuStruct?.priority || 0
}]`
);
};
@@ -163,7 +162,7 @@ export class SpCpuChart {
initProcessThreadStateData = async (progress: Function): Promise => {
let time = new Date().getTime();
progress('StateProcessThread', 93);
- procedurePool.submitWithName('logic0', 'spt-init', {}, undefined, (res: unknown) => {});
+ procedurePool.submitWithName('logic0', 'spt-init', {}, undefined, (res: unknown) => { });
let durTime = new Date().getTime() - time;
info('The time to load the first ProcessThreadState data is: ', durTime);
};
@@ -180,7 +179,7 @@ export class SpCpuChart {
total: (window as unknown).totalNS,
},
undefined,
- (res: unknown) => {}
+ (res: unknown) => { }
);
let durTime = new Date().getTime() - time;
info('The time to load the first CPU Idle0 data is: ', durTime);
@@ -190,14 +189,14 @@ export class SpCpuChart {
Utils.getInstance().getSchedSliceMap(traceId).clear();
arr.forEach((value) => {
Utils.getInstance().getSchedSliceMap(traceId). // @ts-ignore
- set(`${value.itid}-${value.ts}`, { endState: value.endState, priority: value.priority });
+ set(`${value.itid}-${value.ts}`, { endState: value.endState, priority: value.priority });
});
}
initSchedulingPTData = async (progress: Function): Promise => {
let time = new Date().getTime();
progress('CPU Idle', 94);
- procedurePool.submitWithName('logic0', 'scheduling-getProcessAndThread', {}, undefined, (res: unknown) => {});
+ procedurePool.submitWithName('logic0', 'scheduling-getProcessAndThread', {}, undefined, (res: unknown) => { });
let durTime = new Date().getTime() - time;
info('The time to load the first CPU Idle0 data is: ', durTime);
};
@@ -205,7 +204,7 @@ export class SpCpuChart {
initSchedulingFreqData = async (progress: Function): Promise => {
let time = new Date().getTime();
progress('CPU Scheduling Freq', 94);
- procedurePool.submitWithName('logic0', 'scheduling-initFreqData', {}, undefined, (res: unknown) => {});
+ procedurePool.submitWithName('logic0', 'scheduling-initFreqData', {}, undefined, (res: unknown) => { });
let durTime = new Date().getTime() - time;
info('The time to load the first CPU Idle0 data is: ', durTime);
};
diff --git a/ide/src/trace/component/chart/SpFpsChart.ts b/ide/src/trace/component/chart/SpFpsChart.ts
index c87a607182e68e169626fdbf8b710620016f7f26..5c083ccba9e0bca5cffdfa9e58c0a4c8b0e784e5 100644
--- a/ide/src/trace/component/chart/SpFpsChart.ts
+++ b/ide/src/trace/component/chart/SpFpsChart.ts
@@ -61,7 +61,7 @@ export class SpFpsChart {
context = fpsRow.collect ? this.trace.canvasFavoritePanelCtx! : this.trace.canvasPanelCtx!;
}
fpsRow.canvasSave(context);
- (renders['fps'] as FpsRender).renderMainThread(
+ (renders.fps as FpsRender).renderMainThread(
{
context: context,
useCache: useCache,
diff --git a/ide/src/trace/component/chart/SpGpuCounterChart.ts b/ide/src/trace/component/chart/SpGpuCounterChart.ts
index 37e3a8169b2a99e8e6633eb886fdacf80568c93a..ca3cd6b9d1a8b498d5517eaef66180202eb9e338 100644
--- a/ide/src/trace/component/chart/SpGpuCounterChart.ts
+++ b/ide/src/trace/component/chart/SpGpuCounterChart.ts
@@ -18,8 +18,8 @@ import { TraceRow } from '../trace/base/TraceRow';
import { renders } from '../../database/ui-worker/ProcedureWorker';
import {
GpuCounterStruct,
- maleoon_counter_obj,
- gpu_counter_type,
+ Maleoon_counter_obj,
+ Gpu_counter_type,
GpuCounterRender,
} from '../../database/ui-worker/ProcedureWorkerGpuCounter';
import { folderSupplier, folderThreadHandler } from './SpChartManager';
@@ -27,25 +27,27 @@ import { queryRangeTime } from '../../database/sql/SqlLite.sql';
export class SpGpuCounterChart {
trace: SpSystemTrace;
- private folderRow: TraceRow | undefined;
+ // @ts-ignore
+ private folderRow: TraceRow | undefined;
constructor(trace: SpSystemTrace) {
this.trace = trace;
}
- async init(res: Array) {
+ async init(res: Array): Promise {
if (res.length === 0) {
let startTime = await queryRangeTime();
this.initFolder(res, false);
//@ts-ignore
this.addTraceRowEventListener(startTime[0].start_ts, startTime[0].end_ts);
} else {
+ // @ts-ignore
const { gpuCounterType, start_time } = this.handleCsvData(res);
this.initFolder(res, true);
await this.initGpuCounters(gpuCounterType, start_time);
}
}
- initFolder(res: Array, isSimpleUpload: boolean): void {
+ initFolder(res: Array, isSimpleUpload: boolean): void {
this.folderRow = TraceRow.skeleton();
this.folderRow.rowId = 'GpuCounter';
this.folderRow.index = 0;
@@ -58,13 +60,17 @@ export class SpGpuCounterChart {
this.folderRow.name = 'Gpu counter';
//@ts-ignore
this.folderRow.supplier = folderSupplier();
+ // @ts-ignore
this.folderRow.onThreadHandler = folderThreadHandler(this.folderRow, this.trace);
- if (!isSimpleUpload) this.folderRow.addRowSampleUpload('.csv');
+ if (!isSimpleUpload) {
+ this.folderRow.addRowSampleUpload('.csv');
+ }
this.folderRow.addEventListener('expansion-change', this.trace.extracted(this.folderRow));
this.trace.rowsEL?.appendChild(this.folderRow);
}
- async initGpuCounters(gpuCounterType: any, start_time: number) {
+ async initGpuCounters(gpuCounterType: unknown, start_time: number): Promise {
+ // @ts-ignore
for (const key in gpuCounterType) {
let typeRows = TraceRow.skeleton();
typeRows.rowId = key;
@@ -80,14 +86,17 @@ export class SpGpuCounterChart {
typeRows.supplier = folderSupplier();
typeRows.onThreadHandler = folderThreadHandler(typeRows, this.trace);
this.folderRow!.addChildTraceRow(typeRows);
+ // @ts-ignore
this.initTypeRow(gpuCounterType[key], key, typeRows, start_time);
}
}
- initTypeRow(rowList: any, key: string, parentRow: any, start_time: number) {
+ initTypeRow(rowList: unknown, key: string, parentRow: unknown, start_time: number): void {
const typeName = this.getKeyTypeName(key);
+ // @ts-ignore
for (let i = 0; i < rowList.length; i++) {
let typeRow = TraceRow.skeleton();
+ // @ts-ignore
let maxValue = Math.max(...rowList[i].map((it: GpuCounterStruct) => Number(it.height)));
typeRow.rowId = `${typeName[i]}`;
typeRow.rowType = TraceRow.ROW_TYPE_GPU_COUNTER;
@@ -95,20 +104,22 @@ export class SpGpuCounterChart {
typeRow.folder = false;
typeRow.folderTextLeft = 40;
typeRow.style.height = '40px';
+ // @ts-ignore
typeRow.rowHidden = !parentRow.expansion;
typeRow.setAttribute('children', '');
typeRow.name = `${typeName[i]}`;
typeRow.selectChangeHandler = this.trace.selectChangeHandler;
typeRow.favoriteChangeHandler = this.trace.favoriteChangeHandler;
- typeRow.focusHandler = () => this.focusHandler(typeRow, GpuCounterStruct.hoverGpuCounterStruct!);
- typeRow.findHoverStruct = () => {
+ typeRow.focusHandler = (): void => this.focusHandler(typeRow, GpuCounterStruct.hoverGpuCounterStruct!);
+ typeRow.findHoverStruct = (): void => {
GpuCounterStruct.hoverGpuCounterStruct = typeRow.getHoverStruct(false);
};
- typeRow.supplierFrame = () =>
+ typeRow.supplierFrame = (): Promise =>
new Promise((resolve): void => {
+ // @ts-ignore
resolve(rowList[i]);
});
- typeRow.onThreadHandler = (useCache) => {
+ typeRow.onThreadHandler = (useCache): void => {
let context: CanvasRenderingContext2D;
if (typeRow.currentContext) {
context = typeRow.currentContext;
@@ -128,11 +139,12 @@ export class SpGpuCounterChart {
);
typeRow.canvasRestore(context);
};
+ // @ts-ignore
parentRow.addChildTraceRow(typeRow);
}
}
- focusHandler(row: TraceRow, struct: GpuCounterStruct) {
+ focusHandler(row: TraceRow, struct: GpuCounterStruct): void {
let tip = '';
if (struct) {
tip = `
@@ -142,7 +154,7 @@ export class SpGpuCounterChart {
this.trace?.displayTip(row, struct, tip);
}
- getKeyTypeName(key: string) {
+ getKeyTypeName(key: string): Array {
const typeName: { [key: string]: Array } = {
cycle: ['gpu clocks', 'tiler utilization', 'binning utilization', 'rendering utilization', 'compute utilization'],
drawcall: [
@@ -167,14 +179,20 @@ export class SpGpuCounterChart {
return typeName[key];
}
- handleCsvData(res: any, start_ts: number = 0, end_ts: number = 0) {
+ handleCsvData(res: unknown, start_ts: number = 0, end_ts: number = 0): unknown {
+ // @ts-ignore
const minIndex = this.getMinData(res) + 1;
const gpuCounterMap = this.initGpuCounterMap();
+ // @ts-ignore
this.maleoon_gpu_counter_init(gpuCounterMap, res[0]);
+ // @ts-ignore
let start_time_data = res[minIndex].split(',');
+ // @ts-ignore
let start_time = Number(start_time_data[gpuCounterMap.timestamp]);
let last_record_time = 0;
+ // @ts-ignore
let maleoonCounter = new maleoon_counter_obj();
+ // @ts-ignore
let read_line_num = res.length - 1;
let utilization_array = [
'tiler_utilization',
@@ -207,38 +225,53 @@ export class SpGpuCounterChart {
];
for (let i = minIndex; i < read_line_num; i++) {
+ // @ts-ignore
let datas = res[i].split(',');
- if (datas.length != 25) continue;
+ if (datas.length !== 25) {
+ continue;
+ }
if (
+ // @ts-ignore
(start_ts > 0 && Number(datas[gpuCounterMap.timestamp]) < start_ts) ||
+ // @ts-ignore
(end_ts > 0 && Number(datas[gpuCounterMap.timestamp]) > end_ts)
- )
+ ) {
continue;
+ }
+ // @ts-ignore
let time_passed = Number(datas[gpuCounterMap.timestamp]) - start_time;
//去重
- if (time_passed <= last_record_time) continue;
+ if (time_passed <= last_record_time) {
+ continue;
+ }
time_passed -= last_record_time;
last_record_time += time_passed;
utilization_array.forEach((item) => {
maleoonCounter[item].push({
+ // @ts-ignore
startNS: Number(datas[gpuCounterMap.timestamp]),
+ // @ts-ignore
height: gpuCounterMap[item] === -1 ? 0 : Math.floor(Number(datas[gpuCounterMap[item]])),
});
});
count_array.forEach((item) => {
maleoonCounter[item].push({
+ // @ts-ignore
startNS: Number(datas[gpuCounterMap.timestamp]),
+ // @ts-ignore
height: gpuCounterMap[item] === -1 ? 0 : Math.floor(Number(datas[gpuCounterMap[item]])),
});
});
}
utilization_array.forEach((item) => {
for (let i = 0; i < maleoonCounter[item].length; i++) {
+ //@ts-ignore
maleoonCounter[item][i].dur = maleoonCounter[item][i + 1]?.startNS - maleoonCounter[item][i].startNS || 0;
}
});
count_array.forEach((item) => {
for (let i = 0; i < maleoonCounter[item].length; i++) {
+ //@ts-ignore
maleoonCounter[item][i].dur = maleoonCounter[item][i + 1]?.startNS - maleoonCounter[item][i].startNS || 0;
}
});
@@ -246,7 +279,7 @@ export class SpGpuCounterChart {
return { gpuCounterType, start_time };
}
- initGpuCounterMap(): any {
+ initGpuCounterMap(): unknown {
let gpu_counter_map = {
timestamp: -1,
@@ -282,91 +315,188 @@ export class SpGpuCounterChart {
return gpu_counter_map;
}
- maleoon_gpu_counter_init(gpu_counter_map: any, head_line: string) {
+ maleoon_gpu_counter_init(gpu_counter_map: unknown, head_line: string): void {
+ // @ts-ignore
gpu_counter_map.timestamp = -1;
-
+ // @ts-ignore
gpu_counter_map.gpu_clocks = -1;
+ // @ts-ignore
gpu_counter_map.tiler_utilization = -1;
+ // @ts-ignore
gpu_counter_map.binning_utilization = -1;
+ // @ts-ignore
gpu_counter_map.rendering_utilization = -1;
+ // @ts-ignore
gpu_counter_map.compute_utilization = -1;
+ // @ts-ignore
gpu_counter_map.drawcall_count = -1;
+ // @ts-ignore
gpu_counter_map.vertex_count = -1;
+ // @ts-ignore
gpu_counter_map.primitives_count = -1;
+ // @ts-ignore
gpu_counter_map.visible_primitives_count = -1;
+ // @ts-ignore
gpu_counter_map.compute_invocations_count = -1;
+ // @ts-ignore
gpu_counter_map.shader_utilization = -1;
+ // @ts-ignore
gpu_counter_map.eu_utilization = -1;
+ // @ts-ignore
gpu_counter_map.eu_stall_utilization = -1;
+ // @ts-ignore
gpu_counter_map.eu_idle_utilization = -1;
+ // @ts-ignore
gpu_counter_map.control_flow_instr_utilization = -1;
+ // @ts-ignore
gpu_counter_map.half_float_instr_utilization = -1;
+ // @ts-ignore
gpu_counter_map.tu_utilization = -1;
+ // @ts-ignore
gpu_counter_map.concurrent_warps = -1;
+ // @ts-ignore
gpu_counter_map.instruction_count = -1;
+ // @ts-ignore
gpu_counter_map.quads_count = -1;
+ // @ts-ignore
gpu_counter_map.texels_count = -1;
+ // @ts-ignore
gpu_counter_map.memory_read = -1;
+ // @ts-ignore
gpu_counter_map.memory_write = -1;
+ // @ts-ignore
gpu_counter_map.memory_traffic = -1;
let paras = head_line.split(',');
for (let i = 0; i < paras.length; i++) {
+ // @ts-ignore
if (paras[i] === 'TIMESTAMP') gpu_counter_map.timestamp = i;
- if (paras[i] === 'GPU Clocks') gpu_counter_map.gpu_clocks = i;
- if (paras[i] === 'Tiler Utilization') gpu_counter_map.tiler_utilization = i;
- if (paras[i] === 'Binning Queue Utilization') gpu_counter_map.binning_utilization = i;
- if (paras[i] === 'Rendering Queue Utilization') gpu_counter_map.rendering_utilization = i;
- if (paras[i] === 'Compute Queue Utilization') gpu_counter_map.compute_utilization = i;
-
- if (paras[i] === 'Drawcalls Count') gpu_counter_map.drawcall_count = i;
- if (paras[i] === 'Vertex Count') gpu_counter_map.vertex_count = i;
- if (paras[i] === 'Primitive Count') gpu_counter_map.primitives_count = i;
- if (paras[i] === 'Visible Primitive Count') gpu_counter_map.visible_primitives_count = i;
- if (paras[i] === 'Compute Shader Invocations') gpu_counter_map.compute_invocations_count = i;
-
- if (paras[i] === 'Shader Core Utilization') gpu_counter_map.shader_utilization = i;
- if (paras[i] === 'EU Utilization') gpu_counter_map.eu_utilization = i;
- if (paras[i] === 'EU Stall') gpu_counter_map.eu_stall_utilization = i;
- if (paras[i] === 'EU Idle') gpu_counter_map.eu_idle_utilization = i;
- if (paras[i] === 'Instructions Diverged') gpu_counter_map.control_flow_instr_utilization = i;
- if (paras[i] === 'Half-float Instructions') gpu_counter_map.half_float_instr_utilization = i;
- if (paras[i] === 'TU Utilization') gpu_counter_map.tu_utilization = i;
-
- if (paras[i] === 'Concurrent Warps') gpu_counter_map.concurrent_warps = i;
- if (paras[i] === 'Instructions Executed') gpu_counter_map.instruction_count = i;
- if (paras[i] === 'Quads Shaded') gpu_counter_map.quads_count = i;
- if (paras[i] === 'Texels Sampled') gpu_counter_map.texels_count = i;
-
- if (paras[i] === 'External Memory Read') gpu_counter_map.memory_read = i;
- if (paras[i] === 'External Memory Write') gpu_counter_map.memory_write = i;
- if (paras[i] === 'External Memory Traffic') gpu_counter_map.memory_traffic = i;
+ if (paras[i] === 'GPU Clocks') {
+ // @ts-ignore
+ gpu_counter_map.gpu_clocks = i;
+ }
+ if (paras[i] === 'Tiler Utilization') {
+ // @ts-ignore
+ gpu_counter_map.tiler_utilization = i;
+ }
+ if (paras[i] === 'Binning Queue Utilization') {
+ // @ts-ignore
+ gpu_counter_map.binning_utilization = i;
+ }
+ if (paras[i] === 'Rendering Queue Utilization') {
+ // @ts-ignore
+ gpu_counter_map.rendering_utilization = i;
+ }
+ if (paras[i] === 'Compute Queue Utilization') {
+ // @ts-ignore
+ gpu_counter_map.compute_utilization = i;
+ }
+
+ if (paras[i] === 'Drawcalls Count') {
+ // @ts-ignore
+ gpu_counter_map.drawcall_count = i;
+ }
+ if (paras[i] === 'Vertex Count') {
+ // @ts-ignore
+ gpu_counter_map.vertex_count = i;
+ }
+ if (paras[i] === 'Primitive Count') {
+ // @ts-ignore
+ gpu_counter_map.primitives_count = i;
+ }
+ if (paras[i] === 'Visible Primitive Count') {
+ // @ts-ignore
+ gpu_counter_map.visible_primitives_count = i;
+ }
+ if (paras[i] === 'Compute Shader Invocations') {
+ // @ts-ignore
+ gpu_counter_map.compute_invocations_count = i;
+ }
+
+ if (paras[i] === 'Shader Core Utilization') {
+ // @ts-ignore
+ gpu_counter_map.shader_utilization = i;
+ }
+ if (paras[i] === 'EU Utilization') {
+ // @ts-ignore
+ gpu_counter_map.eu_utilization = i;
+ }
+ if (paras[i] === 'EU Stall') {
+ // @ts-ignore
+ gpu_counter_map.eu_stall_utilization = i;
+ }
+ if (paras[i] === 'EU Idle') {
+ // @ts-ignore
+ gpu_counter_map.eu_idle_utilization = i;
+ }
+ if (paras[i] === 'Instructions Diverged') {
+ // @ts-ignore
+ gpu_counter_map.control_flow_instr_utilization = i;
+ }
+ if (paras[i] === 'Half-float Instructions') {
+ // @ts-ignore
+ gpu_counter_map.half_float_instr_utilization = i;
+ }
+ if (paras[i] === 'TU Utilization') {
+ // @ts-ignore
+ gpu_counter_map.tu_utilization = i;
+ }
+
+ if (paras[i] === 'Concurrent Warps') {
+ // @ts-ignore
+ gpu_counter_map.concurrent_warps = i;
+ }
+ if (paras[i] === 'Instructions Executed') {
+ // @ts-ignore
+ gpu_counter_map.instruction_count = i;
+ }
+ if (paras[i] === 'Quads Shaded') {
+ // @ts-ignore
+ gpu_counter_map.quads_count = i;
+ }
+ if (paras[i] === 'Texels Sampled') {
+ // @ts-ignore
+ gpu_counter_map.texels_count = i;
+ }
+
+ if (paras[i] === 'External Memory Read') {
+ // @ts-ignore
+ gpu_counter_map.memory_read = i;
+ }
+ if (paras[i] === 'External Memory Write') {
+ // @ts-ignore
+ gpu_counter_map.memory_write = i;
+ }
+ if (paras[i] === 'External Memory Traffic') {
+ // @ts-ignore
+ gpu_counter_map.memory_traffic = i;
+ }
}
}
- groupByGpuCounterType(maleoonCounter: maleoon_counter_obj) {
- const gpuCounterType = new gpu_counter_type();
+ groupByGpuCounterType(maleoonCounter: Maleoon_counter_obj) {
+ const gpuCounterType = new Gpu_counter_type();
let index = 0;
for (const key in maleoonCounter) {
if (index < 5) {
- gpuCounterType['cycle'].push(maleoonCounter[key]);
+ gpuCounterType.cycle.push(maleoonCounter[key]);
}
if (index >= 5 && index < 10) {
- gpuCounterType['drawcall'].push(maleoonCounter[key]);
+ gpuCounterType.drawcall.push(maleoonCounter[key]);
}
if (index >= 10 && index < 17) {
- gpuCounterType['shader_cycle'].push(maleoonCounter[key]);
+ gpuCounterType.shader_cycle.push(maleoonCounter[key]);
}
if (index >= 17 && index < 21) {
- gpuCounterType['local_count'].push(maleoonCounter[key]);
+ gpuCounterType.local_count.push(maleoonCounter[key]);
}
if (index >= 21 && index < 24) {
- gpuCounterType['local_wr'].push(maleoonCounter[key]);
+ gpuCounterType.local_wr.push(maleoonCounter[key]);
}
index++;
}
@@ -378,13 +508,16 @@ export class SpGpuCounterChart {
* @param row
* @param start_ts
*/
- addTraceRowEventListener(startTime: number, endTime: number) {
- this.folderRow?.uploadEl?.addEventListener('sample-file-change', (e: any) => {
- this.getCsvData(e).then((res: any) => {
+ addTraceRowEventListener(startTime: number, endTime: number): void {
+ this.folderRow?.uploadEl?.addEventListener('sample-file-change', (e: unknown) => {
+ this.getCsvData(e).then((res: unknown) => {
this.resetChartData(this.folderRow!);
+ // @ts-ignore
const { gpuCounterType } = this.handleCsvData(res, startTime, endTime);
this.initGpuCounters(gpuCounterType, startTime);
- if (!this.folderRow!.folder) this.folderRow!.folder = true;
+ if (!this.folderRow!.folder) {
+ this.folderRow!.folder = true;
+ }
});
});
}
@@ -393,12 +526,16 @@ export class SpGpuCounterChart {
* 清空缓存
* @param row
*/
- resetChartData(row: TraceRow) {
- if (row.expansion) row.describeEl?.click();
+ // @ts-ignore
+ resetChartData(row: TraceRow): void {
+ if (row.expansion) {
+ row.describeEl?.click();
+ }
row.childrenList = [];
}
- getMinData(list: Array) {
+ getMinData(list: Array): number {
+ // @ts-ignore
const sliceList = list.slice(1, 11).map((item) => Number(item.split(',')[0]));
const nonZeroList = sliceList.filter((item) => item !== 0).sort((a, b) => a - b);
const minIndex = sliceList.findIndex((item) => item === nonZeroList[0]);
@@ -410,11 +547,13 @@ export class SpGpuCounterChart {
* @param file
* @returns
*/
- getCsvData(file: any): Promise {
+ getCsvData(file: unknown): Promise {
return new Promise((resolve, reject) => {
let reader = new FileReader();
+ // @ts-ignore
reader.readAsText(file.detail || file);
- reader.onloadend = (e: any) => {
+ reader.onloadend = (e: unknown): void => {
+ // @ts-ignore
const fileContent = e.target?.result.split(/[\r\n]/).filter(Boolean);
try {
resolve(fileContent);
diff --git a/ide/src/trace/component/chart/SpHiPerf.ts b/ide/src/trace/component/chart/SpHiPerf.ts
index 92d811e2388e60121d9035c34e186215affb2de8..86a97676eba555d053d73d2c68be51f150254650 100644
--- a/ide/src/trace/component/chart/SpHiPerf.ts
+++ b/ide/src/trace/component/chart/SpHiPerf.ts
@@ -574,7 +574,7 @@ export class SpHiPerf {
resetAllChartData(): void {
const callChartRow = this.rowList?.find(row => row.rowId === 'HiPerf-callchart');
- if (callChartRow){
+ if (callChartRow) {
this.resetChartData(callChartRow);
}
}
diff --git a/ide/src/trace/component/chart/SpLTPO.ts b/ide/src/trace/component/chart/SpLTPO.ts
index 3c1ca8ac6e550a9dddf7b15546a432651038f8cd..63b23c74fbcfdb6e3b245e0e725a73fd18fa8c8d 100644
--- a/ide/src/trace/component/chart/SpLTPO.ts
+++ b/ide/src/trace/component/chart/SpLTPO.ts
@@ -431,7 +431,7 @@ export class SpLtpoChart {
ltpoDataIndex++;
tempRsNowTimeIndex++;
}
- }else{
+ } else {
break;
}
}
@@ -555,7 +555,7 @@ export class SpLtpoChart {
}
let mathValue = (tmpDur * Number(SpLtpoChart.sendHitchDataArr[i].fps)) / 1000 - 1;
- let finalValue = (tmpVale! /(1000 / SpLtpoChart.sendHitchDataArr[i].fps!)) < 0.7 ? 0 : tmpVale;
+ let finalValue = (tmpVale! / (1000 / SpLtpoChart.sendHitchDataArr[i].fps!)) < 0.7 ? 0 : tmpVale;
SpLtpoChart.sendHitchDataArr[i].value = Number(finalValue.toFixed(1));
SpLtpoChart.sendHitchDataArr[i].name = this.specialValue(mathValue)!.toString();
}
diff --git a/ide/src/trace/component/chart/SpSegmentationChart.ts b/ide/src/trace/component/chart/SpSegmentationChart.ts
index d0c862de9dcbd15bc70f01cee48e27b0d7ae7fd2..bb3de0f36d5da7c74376f819e1d7f0520298bb3d 100644
--- a/ide/src/trace/component/chart/SpSegmentationChart.ts
+++ b/ide/src/trace/component/chart/SpSegmentationChart.ts
@@ -34,7 +34,7 @@ export class SpSegmentationChart {
static binderRow: TraceRow | undefined;
static schedRow: TraceRow | undefined;
static freqInfoMapData = new Map>();
- static hoverLine: Array = [];
+ static hoverLine: Array = [];
static tabHoverObj: { key: string, cycle: number };
private rowFolder!: TraceRow;
static chartData: Array