ruvector_memopt/apps/
mod.rs1pub mod browser;
11pub mod electron;
12pub mod docker;
13pub mod leaks;
14pub mod suggestions;
15
16pub use browser::BrowserOptimizer;
17pub use electron::ElectronManager;
18pub use docker::DockerManager;
19pub use leaks::LeakDetector;
20pub use suggestions::SmartSuggestions;
21
22use serde::{Deserialize, Serialize};
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
26pub enum AppCategory {
27 Browser,
28 Electron,
29 Development,
30 Creative,
31 Communication,
32 Media,
33 System,
34 Container,
35 AI,
36 Other,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct AppProcess {
42 pub pid: u32,
43 pub name: String,
44 pub category: AppCategory,
45 pub memory_mb: f64,
46 pub cpu_percent: f32,
47 pub parent_app: Option<String>,
48 pub is_main_process: bool,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct AppInfo {
54 pub name: String,
55 pub category: AppCategory,
56 pub process_count: usize,
57 pub total_memory_mb: f64,
58 pub total_cpu_percent: f32,
59 pub main_pid: Option<u32>,
60 pub pids: Vec<u32>,
61 pub is_idle: bool,
62 pub idle_duration_secs: u64,
63}
64
65impl AppInfo {
66 pub fn is_memory_hog(&self) -> bool {
68 self.total_memory_mb > 500.0
69 }
70
71 pub fn is_cpu_intensive(&self) -> bool {
73 self.total_cpu_percent > 10.0
74 }
75
76 pub fn optimization_priority(&self) -> f64 {
78 let mut priority = 0.0;
79
80 priority += self.total_memory_mb / 100.0;
82
83 priority += self.total_cpu_percent as f64 * 0.5;
85
86 if self.is_idle {
88 priority *= 1.5;
89 }
90
91 priority += self.process_count as f64 * 2.0;
93
94 priority
95 }
96}
97
98#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
100pub enum OptimizationAction {
101 Close,
103 Suspend,
105 TrimMemory,
107 Restart,
109 ReduceTabs { suggested_count: usize },
111 SuspendTabs,
113 StopContainer,
115 PauseContainer,
117 ClearCache,
119 None,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize)]
125pub struct OptimizationResult {
126 pub app_name: String,
127 pub action: OptimizationAction,
128 pub success: bool,
129 pub memory_freed_mb: f64,
130 pub message: String,
131}