diff --git a/plugin/Cargo.lock b/plugin/Cargo.lock index 078a0bc..134d244 100644 --- a/plugin/Cargo.lock +++ b/plugin/Cargo.lock @@ -97,6 +97,16 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "ctor" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3429e8f8e3ce0ffe475c411850f70468c70d7a87d2ac3d15dd44703fb885aede" +dependencies = [ + "link-section", + "linktime-proc-macro", +] + [[package]] name = "cxx" version = "1.0.194" @@ -328,6 +338,18 @@ dependencies = [ "cc", ] +[[package]] +name = "link-section" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2c24837c4fd5ab6a31d64133eae954f5199247523cf29586117e85245c0dd3" + +[[package]] +name = "linktime-proc-macro" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44cd706ff0d503ee32b2071166510ca27e281228de10cd3aa8d35ff94560f81" + [[package]] name = "memchr" version = "2.8.0" @@ -338,6 +360,7 @@ checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" name = "nova-plugin" version = "0.1.0" dependencies = [ + "ctor", "cxx", "cxx-qt", "cxx-qt-build", diff --git a/plugin/Cargo.toml b/plugin/Cargo.toml index 81f7021..cdf4ef5 100644 --- a/plugin/Cargo.toml +++ b/plugin/Cargo.toml @@ -16,6 +16,7 @@ cast_sign_loss = "allow" cxx = "1.0" cxx-qt = "0.8.1" cxx-qt-lib = { version = "0.8.1", features = ["qt_full"] } +ctor = "0.13" libc = "0.2" [build-dependencies] diff --git a/plugin/src/cpu_service.rs b/plugin/src/cpu_service.rs index 21b7b67..cf5fc59 100644 --- a/plugin/src/cpu_service.rs +++ b/plugin/src/cpu_service.rs @@ -77,6 +77,7 @@ impl Default for CpuServiceRust { impl cxx_qt::Initialize for qobject::CpuService { fn initialize(mut self: Pin<&mut Self>) { + eprintln!("[nova-plugin] CpuService::initialize"); let max_freqs = read_core_max_freqs(); let types = infer_core_types(&max_freqs); @@ -93,6 +94,7 @@ impl cxx_qt::Initialize for qobject::CpuService { impl qobject::CpuService { fn poll(mut self: Pin<&mut Self>) { + eprintln!("[nova-plugin] CpuService::poll"); let curr = cpu::read_stat(); let freqs = cpu::read_core_freqs(); let prev = self.as_ref().rust().prev_stat.clone(); diff --git a/plugin/src/lib.rs b/plugin/src/lib.rs index f0fd243..9155649 100644 --- a/plugin/src/lib.rs +++ b/plugin/src/lib.rs @@ -1,3 +1,10 @@ pub mod cpu_service; pub mod stats; pub mod system_stats; + +// Fires when the .so is dlopen'd. Tells us the plugin file actually loaded, +// independent of whether qml_register_types runs. +#[ctor::ctor(unsafe)] +fn on_dylib_load() { + eprintln!("[nova-plugin] dylib loaded (libNovaStats.so)"); +} diff --git a/plugin/src/system_stats.rs b/plugin/src/system_stats.rs index 6e5f295..a48f482 100644 --- a/plugin/src/system_stats.rs +++ b/plugin/src/system_stats.rs @@ -116,6 +116,7 @@ impl Default for SystemStatsServiceRust { impl cxx_qt::Initialize for qobject::SystemStatsService { fn initialize(mut self: Pin<&mut Self>) { + eprintln!("[nova-plugin] SystemStatsService::initialize"); let backend = gpu::detect_gpu(); let available = !matches!(backend, gpu::GpuBackend::None); let vendor = match &backend { @@ -132,6 +133,7 @@ impl cxx_qt::Initialize for qobject::SystemStatsService { impl qobject::SystemStatsService { fn poll(mut self: Pin<&mut Self>) { + eprintln!("[nova-plugin] SystemStatsService::poll"); self.as_mut().poll_mem(); self.as_mut().poll_temp(); self.as_mut().poll_gpu(); @@ -142,8 +144,15 @@ impl qobject::SystemStatsService { } fn poll_mem(mut self: Pin<&mut Self>) { - let Some(m) = mem::read_meminfo() else { return }; + let Some(m) = mem::read_meminfo() else { + eprintln!("[nova-plugin] poll_mem: read_meminfo returned None"); + return; + }; let pct = m.percent as i32; + eprintln!( + "[nova-plugin] poll_mem: pct={pct} used={:.2}gb total={:.2}gb", + m.used_gb, m.total_gb + ); self.as_mut().set_mem_percent(pct); self.as_mut().set_mem_used_gb(m.used_gb); self.as_mut().set_mem_total_gb(m.total_gb);