@@ -44,6 +44,8 @@ class Summary < Samovar::Command
4444 options do
4545 option "--pid <integer>" , "Report on a single process id." , type : Integer , required : true
4646 option "-p/--ppid <integer>" , "Report on all children of this process id." , type : Integer , required : true
47+
48+ option "--total-memory <integer>" , "Set the total memory relative to the usage (MiB)." , type : Integer
4749 end
4850
4951 def terminal
@@ -87,7 +89,7 @@ def format_size(value, units: UNITS)
8789 return "#{ value . round ( unit ) } #{ units [ unit ] } "
8890 end
8991
90- def format_memory_usage ( value , total , terminal )
92+ def format_memory ( value , total , terminal )
9193 if value > ( total * 0.8 )
9294 intensity = :high
9395 elsif value > ( total * 0.5 )
@@ -101,15 +103,23 @@ def format_memory_usage(value, total, terminal)
101103 terminal . print ( formatted , intensity , "[" , Bar . format ( value / total . to_f , 60 ) , "]" , :reset )
102104 end
103105
106+ def total_memory
107+ if total_memory = @options [ :total_memory ]
108+ return total_memory * 1024
109+ else
110+ return Process ::Metrics ::Memory . total_size
111+ end
112+ end
113+
104114 def call
105115 terminal = self . terminal
106116
107117 summary = Process ::Metrics ::General . capture ( pid : @options [ :pid ] , ppid : @options [ :ppid ] )
108118
109- format_memory_usage = self . method ( :format_memory_usage ) . curry
110- shared_memory_usage = 0
111- private_memory_usage = 0
112- total_memory_usage = Process :: Metrics :: Memory . total_size
119+ format_memory = self . method ( :format_memory ) . curry
120+ shared_memory = 0
121+ private_memory = 0
122+ total_memory = self . total_memory
113123
114124 proportional = true
115125
@@ -121,25 +131,25 @@ def call
121131 terminal . print_line
122132
123133 if memory = general . memory
124- shared_memory_usage += memory . proportional_size
125- private_memory_usage += memory . unique_size
134+ shared_memory += memory . proportional_size
135+ private_memory += memory . unique_size
126136
127137 terminal . print_line (
128- :key , "Shared Memory: " . rjust ( 20 ) , :reset ,
129- format_memory_usage [ memory . proportional_size , total_memory_usage ]
138+ :key , "Memory: " . rjust ( 20 ) , :reset ,
139+ format_memory [ memory . proportional_size , total_memory ]
130140 )
131141
132142 terminal . print_line (
133143 :key , "Private Memory: " . rjust ( 20 ) , :reset ,
134- format_memory_usage [ memory . unique_size , total_memory_usage ]
144+ format_memory [ memory . unique_size , total_memory ]
135145 )
136146 else
137- shared_memory_usage += general . resident_size
147+ shared_memory += general . resident_size
138148 proportional = false
139149
140150 terminal . print_line (
141151 :key , "Memory: " . rjust ( 20 ) , :reset ,
142- format_memory_usage [ general . resident_size , total_memory_usage ]
152+ format_memory [ general . resident_size , total_memory ]
143153 )
144154 end
145155 end
@@ -148,24 +158,24 @@ def call
148158
149159 if proportional
150160 terminal . print_line (
151- :key , "Shared Memory: " . rjust ( 20 ) , :reset ,
152- format_memory_usage [ shared_memory_usage , total_memory_usage ]
161+ :key , "Memory: " . rjust ( 20 ) , :reset ,
162+ format_memory [ shared_memory , total_memory ]
153163 )
154164
155165 terminal . print_line (
156166 :key , "Private Memory: " . rjust ( 20 ) , :reset ,
157- format_memory_usage [ private_memory_usage , total_memory_usage ]
167+ format_memory [ private_memory , total_memory ]
158168 )
159169 else
160170 terminal . print_line (
161171 :key , "Memory: " . rjust ( 20 ) , :reset ,
162- format_memory_usage [ memory_usage , total_memory_usage ]
172+ format_memory [ memory , total_memory ]
163173 )
164174 end
165175
166176 terminal . print_line (
167177 :key , "Memory (Total): " . rjust ( 20 ) , :reset ,
168- format_memory_usage [ shared_memory_usage + private_memory_usage , total_memory_usage ]
178+ format_memory [ shared_memory + private_memory , total_memory ]
169179 )
170180 end
171181 end
0 commit comments