CPU 使用率を常時監視する

Recipe ID: perf-007

アプリがアイドリング中に CPU を消費していないか、重い処理を行った際の負荷状況を監視します。

1. 外部ツールによる監視

OS 標準のモニターで確認するのが最も確実です。

  • Windows: タスクマネージャー / リソースモニター
  • macOS: アクティビティモニタ
    • 「エネルギー」タブを見ることで、バッテリー消費への影響も推測できます。
  • Linux: top, htop

2. アプリ内での自己監視

Rust 側 (src-tauri/src/lib.rs) で sysinfo を使い、自身のプロセスの CPU 使用率を取得してログ出力あるいはフロントエンドに送信します。

まず、src-tauri ディレクトリで以下のコマンドを実行してクレートを追加します。

cargo add sysinfo

以下は実装例です。

use sysinfo::{Pid, System};
use std::thread;
use std::time::Duration;

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    tauri::Builder::default()
        .setup(|_app| {
            // アプリ起動時に監視スレッドを開始
            monitor_cpu();
            Ok(())
        })
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

fn monitor_cpu() {
    let mut sys = System::new_all();
    let pid = Pid::from_u32(std::process::id());

    thread::spawn(move || {
        loop {
            // 前回計測からの差分を見るため、最低でも数百ミリ秒の間隔が必要
            sys.refresh_all();
            
            if let Some(process) = sys.process(pid) {
                // 使用率はコア数の合計 % (例: 2コアでフルなら 200%)
                println!("CPU Usage: {:.2}%", process.cpu_usage());
            }
            
            thread::sleep(Duration::from_secs(2));
        }
    });
}

3. 注意点 (WebView のプロセス)

Tauri アプリは「Rust のメインプロセス」と「WebView のレンダラープロセス (msedgewebview2.exe 等)」に分かれています。
上記コードで取得できるのは Rust プロセスの負荷のみです。
WebView 側の CPU 使用率は OS のタスクマネージャーで子プロセスを確認するか、Chrome DevTools の Performance モニターを使用してください。