From b63b6791aa1e43350957a702ae32dcb3114a9ac9 Mon Sep 17 00:00:00 2001 From: fyears <1142836+fyears@users.noreply.github.com> Date: Sun, 1 Sep 2024 18:28:08 +0800 Subject: [PATCH] re-enable profiler --- README.md | 4 +++- README.zh-cn.md | 6 ++++-- docs/check_performance/README.md | 13 +++++++++++++ docs/check_performance/profiler_exported.png | 3 +++ docs/check_performance/profiler_settings.png | 3 +++ src/baseTypes.ts | 1 + src/langs/en.json | 2 ++ src/langs/zh_cn.json | 6 ++++++ src/langs/zh_tw.json | 6 ++++++ src/main.ts | 19 ++++++++++++------- src/profiler.ts | 1 + src/settings.ts | 19 +++++++++++++++++++ 12 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 docs/check_performance/README.md create mode 100644 docs/check_performance/profiler_exported.png create mode 100644 docs/check_performance/profiler_settings.png diff --git a/README.md b/README.md index 8e9e7fd..1a7c71f 100644 --- a/README.md +++ b/README.md @@ -201,7 +201,9 @@ See [PRO](./docs/pro/README.md) for more details. ## How To Debug -See [here](./docs/how_to_debug/README.md) for more details. +If you see any errors, please check the doc [here](./docs/how_to_debug/README.md) for more details. + +Moreover, sometimes the program runs but slowly, you want to check the performance by [enabling the profiler](./docs/check_performance/README). ## Bonus: Import And Export Not-Oauth2 Plugin Settings By QR Code diff --git a/README.zh-cn.md b/README.zh-cn.md index 72ee75c..0186190 100644 --- a/README.zh-cn.md +++ b/README.zh-cn.md @@ -199,9 +199,11 @@ PRO(付费)功能“智能冲突”为用户提供了另一个选项:合 详见[PRO](./docs/pro/README.md)了解更多详情。 -## 如何调试 +## 如何调试(debug) -详见[这里](./docs/how_to_debug/README.md)了解更多详情。 +如发生错误,查看[这里文档](./docs/how_to_debug/README.md)了解调试方式。 + +如果没有发生错误,但是运行起来很慢,你需要[开启“性能收集”](./docs/check_performance/README)来看看有没有哪一步特别慢。 ## 额外功能:通过 QR 码导入和导出非 OAuth2 插件设置 diff --git a/docs/check_performance/README.md b/docs/check_performance/README.md new file mode 100644 index 0000000..8f44e06 --- /dev/null +++ b/docs/check_performance/README.md @@ -0,0 +1,13 @@ +# Check performance + +1. Go to settings, scroll to the very end, and enable the "Enable Profiler" option. +2. Also enable "Enable Profiler Printing". +3. Check Console Output (directly or via `vConsole` plugin). More details are [here](../how_to_debug/README.md). +4. Sync! +5. You can also "Export Profiler Results" afterwards. A new file `_debug_remotely_save/profiler_results_exported_on_xxxx.md` will be generated. + +In the console or exported files, you can see the time cost of each steps. + +![profiler settings](./profiler_settings.png) + +![profiler exported](./profiler_exported.png) diff --git a/docs/check_performance/profiler_exported.png b/docs/check_performance/profiler_exported.png new file mode 100644 index 0000000..5ef6711 --- /dev/null +++ b/docs/check_performance/profiler_exported.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a71d0746a75c93aa4cb5be3f7964bfdf74722a10505f5a1965790738eaebdc4 +size 265289 diff --git a/docs/check_performance/profiler_settings.png b/docs/check_performance/profiler_settings.png new file mode 100644 index 0000000..4e3f842 --- /dev/null +++ b/docs/check_performance/profiler_settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ffd1557c2f714c56bfacd8166b85749d6bfa15c2f9c7363942b443d51288083 +size 81259 diff --git a/src/baseTypes.ts b/src/baseTypes.ts index 2f86ca3..42e32bf 100644 --- a/src/baseTypes.ts +++ b/src/baseTypes.ts @@ -140,6 +140,7 @@ export type CipherMethodType = "rclone-base64" | "openssl-base64" | "unknown"; export type QRExportType = "basic_and_advanced" | SUPPORTED_SERVICES_TYPE; export interface ProfilerConfig { + enable?: boolean; enablePrinting?: boolean; recordSize?: boolean; } diff --git a/src/langs/en.json b/src/langs/en.json index 64a16a7..05e8a26 100644 --- a/src/langs/en.json +++ b/src/langs/en.json @@ -361,6 +361,8 @@ "settings_profiler_results_desc": "The plugin records the time cost of each steps. Here you can export them to know which step is slow.", "settings_profiler_results_notice": "Profiler results exported.", "settings_profiler_results_button_all": "Export All", + "settings_profiler_enableprofiler": "Enable Profiler", + "settings_profiler_enableprofiler_desc": "Collect performance data or not?", "settings_profiler_enabledebugprint": "Enable Profiler Printing", "settings_profiler_enabledebugprint_desc": "Print profiler result in each insertion to console or not?", "settings_profiler_recordsize": "Enable Profiler Recording Size", diff --git a/src/langs/zh_cn.json b/src/langs/zh_cn.json index 40a04a4..8adf7da 100644 --- a/src/langs/zh_cn.json +++ b/src/langs/zh_cn.json @@ -360,6 +360,12 @@ "settings_profiler_results_desc": "插件记录了每次同步每一步的耗时。这里可以导出记录得知哪一步最慢。", "settings_profiler_results_notice": "性能数据已导出", "settings_profiler_results_button_all": "导出所有", + "settings_profiler_enableprofiler": "性能收集", + "settings_profiler_enableprofiler_desc": "是否开启性能收集功能?", + "settings_profiler_enabledebugprint": "性能收集输出", + "settings_profiler_enabledebugprint_desc": "是否直接输出性能收集结果到终端里?", + "settings_profiler_recordsize": "性能收集统计对象大小", + "settings_profiler_recordsize_desc": "是否收集对象的大小?", "settings_outputbasepathvaultid": "输出资料库对应的位置和随机分配的 ID", "settings_outputbasepathvaultid_desc": "用于调试。", "settings_outputbasepathvaultid_button": "输出", diff --git a/src/langs/zh_tw.json b/src/langs/zh_tw.json index ccbe396..d374030 100644 --- a/src/langs/zh_tw.json +++ b/src/langs/zh_tw.json @@ -359,6 +359,12 @@ "settings_profiler_results_desc": "外掛記錄了每次同步每一步的耗時。這裡可以匯出記錄得知哪一步最慢。", "settings_profiler_results_notice": "效能資料已匯出", "settings_profiler_results_button_all": "匯出所有", + "settings_profiler_enableprofiler": "效能收集", + "settings_profiler_enableprofiler_desc": "是否開啟效能收集功能?", + "settings_profiler_enabledebugprint": "效能收集輸出", + "settings_profiler_enabledebugprint_desc": "是否直接輸出效能收集結果到終端裡?", + "settings_profiler_recordsize": "效能收集統計物件大小", + "settings_profiler_recordsize_desc": "是否收集物件的大小?", "settings_outputbasepathvaultid": "輸出資料庫對應的位置和隨機分配的 ID", "settings_outputbasepathvaultid_desc": "用於除錯。", "settings_outputbasepathvaultid_button": "輸出", diff --git a/src/main.ts b/src/main.ts index 729031d..897dca8 100644 --- a/src/main.ts +++ b/src/main.ts @@ -108,7 +108,7 @@ import { upsertPluginVersionByVault, } from "./localdb"; import { changeMobileStatusBar } from "./misc"; -import { DEFAULT_PROFILER_CONFIG, type Profiler } from "./profiler"; +import { DEFAULT_PROFILER_CONFIG, Profiler } from "./profiler"; import { RemotelySaveSettingTab } from "./settings"; import { SyncAlgoV3Modal } from "./syncAlgoV3Notice"; @@ -232,12 +232,14 @@ export default class RemotelySavePlugin extends Plugin { appContainerObserver?: MutationObserver; async syncRun(triggerSource: SyncTriggerSourceType = "manual") { - // const profiler = new Profiler( - // undefined, - // this.settings.profiler?.enablePrinting ?? false, - // this.settings.profiler?.recordSize ?? false - // ); - const profiler: Profiler | undefined = undefined; + let profiler: Profiler | undefined = undefined; + if (this.settings.profiler?.enable ?? false) { + profiler = new Profiler( + undefined, + this.settings.profiler?.enablePrinting ?? false, + this.settings.profiler?.recordSize ?? false + ); + } const fsLocal = new FakeFsLocal( this.app.vault, this.settings.syncConfigDir ?? false, @@ -1471,6 +1473,9 @@ export default class RemotelySavePlugin extends Plugin { if (this.settings.profiler === undefined) { this.settings.profiler = DEFAULT_PROFILER_CONFIG; } + if (this.settings.profiler.enable === undefined) { + this.settings.profiler.enable = false; + } if (this.settings.profiler.enablePrinting === undefined) { this.settings.profiler.enablePrinting = false; } diff --git a/src/profiler.ts b/src/profiler.ts index 0935232..8073bb1 100644 --- a/src/profiler.ts +++ b/src/profiler.ts @@ -10,6 +10,7 @@ interface BreakPoint { } export const DEFAULT_PROFILER_CONFIG: ProfilerConfig = { + enable: false, enablePrinting: false, recordSize: false, }; diff --git a/src/settings.ts b/src/settings.ts index e2a59db..a29e468 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -2940,6 +2940,25 @@ export class RemotelySaveSettingTab extends PluginSettingTab { }); }); + new Setting(debugDiv) + .setName(t("settings_profiler_enableprofiler")) + .setDesc(t("settings_profiler_enableprofiler_desc")) + .addDropdown((dropdown) => { + dropdown.addOption("enable", t("enable")); + dropdown.addOption("disable", t("disable")); + dropdown + .setValue( + this.plugin.settings.profiler?.enable ? "enable" : "disable" + ) + .onChange(async (val: string) => { + if (this.plugin.settings.profiler === undefined) { + this.plugin.settings.profiler = DEFAULT_PROFILER_CONFIG; + } + this.plugin.settings.profiler.enable = val === "enable"; + await this.plugin.saveSettings(); + }); + }); + new Setting(debugDiv) .setName(t("settings_profiler_enabledebugprint")) .setDesc(t("settings_profiler_enabledebugprint_desc"))