--- nono/vm/syncer.cpp 2026/04/29 17:05:54 1.1.1.8 +++ nono/vm/syncer.cpp 2026/04/29 17:05:59 1.1.1.9 @@ -52,7 +52,7 @@ Syncer::Init() dmac_idle = 1; // 高速モード指定 - bool fast_mode = gConfig->Find("fast-mode").AsInt(); + bool fast_mode = gConfig->Find("fast-mode").AsBool(); NotifyFullSpeed(fast_mode); // クロックの同期方法 @@ -102,7 +102,7 @@ Syncer::StartTime() // Restart() は経過時間をリセットしてからタイマーを開始の意。 realtime.Restart(); - rtime = realtime.Elapsed(); + rtime = nsec_to_tsec(realtime.Elapsed_nsec()); rtime_epoch = rtime; vtime_epoch = scheduler->GetVirtTime(); @@ -276,7 +276,7 @@ void Syncer::DoSync() { // 実時間をここで更新 - rtime = realtime.Elapsed(); + rtime = nsec_to_tsec(realtime.Elapsed_nsec()); DPRINTF("Sync begin rtime=%s\n", SecToStr(rtime).c_str()); // 統計情報 @@ -304,7 +304,7 @@ Syncer::DoSync() // スリープしすぎた時間を計測。 // この時間にはスリープ時間を計算するための時間も含む。 - rtime = realtime.Elapsed(); + rtime = nsec_to_tsec(realtime.Elapsed_nsec()); DPRINTF("Sync wakeup rtime=%s\n", SecToStr(rtime).c_str()); uint64 realslept = rtime - prev; if (realslept > diff) { @@ -359,6 +359,10 @@ Syncer::CalcPerf() mpu680x0->CalcStat(); } + uint64 mpu_exec = mpu->GetExecCount(); + last_mpu_exec_per_sec = mpu_exec - last_mpu_exec; + last_mpu_exec = mpu_exec; + // ついでにここで各スレッドの CPU 利用率も調べる。 thman->CalcPerf(rtime); @@ -374,9 +378,8 @@ Syncer::PutlogRealtime() uint64 vtime = scheduler->GetVirtTime(); // 電源オン時からここまでの時間を表示するだけでリセット等はしない。 - putlog(0, "Elapsed since power-on: %u.%03u sec, %6.2f%%", - (uint)(rtime / (1000 * 1000 * 1000)), - (uint)((rtime / (1000 * 1000)) % 1000), + putlog(0, "Elapsed since power-on: %.3f sec, %6.2f%%", + (double)rtime / 1_sec, (double)vtime / rtime * 100); #if 0 @@ -385,13 +388,14 @@ Syncer::PutlogRealtime() for (const auto e : events) { sum += e->count; } - putlog(0, "%lu events done, %6.3fM/sec", sum, (double)sum / rtime * 1000); + putlog(0, "%lu events done, %6.3fM/sec", sum, + (double)sum / rtime * 1_usec); #endif } // モニタ更新の下請け (Scheduler から呼ばれる) int -Syncer::MonitorUpdateSub(TextScreen& screen, uint64 tmp_vtime) +Syncer::MonitorScreenSub(TextScreen& screen, uint64 tmp_vtime) { int y = 0; @@ -458,6 +462,8 @@ Syncer::MonitorUpdateSub(TextScreen& scr int y1 = 0; screen.Print(x, y1++, "Max OverSlept: %13s", SecToStr(overslept).c_str()); screen.Print(x, y1++, "Sync per sec : %4u", last_sync_count); + std::string mpu_str = format_number(last_mpu_exec_per_sec); + screen.Print(x, y1++, "MPU Exec/sec : %13s", mpu_str.c_str()); return y; }