It is currently March 28th, 2024, 12:22 pm

UsageMonitor Discussions

Share and get help with Plugins and Addons
User avatar
jsmorley
Developer
Posts: 22628
Joined: April 19th, 2009, 11:02 pm
Location: Fort Hunt, Virginia, USA

UsageMonitor Discussions

Post by jsmorley »

Let's use this thread to discuss bugs, suggestions, tips and tricks with the new UsageMonitor plugin.
User avatar
jsmorley
Developer
Posts: 22628
Joined: April 19th, 2009, 11:02 pm
Location: Fort Hunt, Virginia, USA

Re: UsageMonitor Discussions

Post by jsmorley »

Top Process

Code: Select all

[Rainmeter]
Update=1000
DynamicWindowSize=1
AccurateText=1

[Variables]

[MeasureAllCPU]
Measure=Plugin
Plugin=UsageMonitor
Alias=CPU
Index=0

[MeasureTop1]
Measure=Plugin
Plugin=UsageMonitor
Alias=CPU
Index=1
Substitute="":"---"

[MeasureTop2]
Measure=Plugin
Plugin=UsageMonitor
Alias=CPU
Index=2
Substitute="":"---"

[MeasureTop3]
Measure=Plugin
Plugin=UsageMonitor
Alias=CPU
Index=3
Substitute="":"---"

[MeasureTop4]
Measure=Plugin
Plugin=UsageMonitor
Alias=CPU
Index=4
Substitute="":"---"

[MeasureTop5]
Measure=Plugin
Plugin=UsageMonitor
Alias=CPU
Index=5
Substitute="":"---"

[MeterBack]
Meter=Shape
Shape=Rectangle 0.5,0.5,200,144,12 | Fill Color 47,47,47,255 | StrokeWidth 1.5 | Stroke Color 150,150,150,255
UpdateDivider=-1

[AllStyle]
X=10
Y=5R
FontSize=11
FontWeight=400
FontColor=255,255,255,255
DynamicVariables=1
AntiAlias=1

[RightStyle]
X=190
Y=0r
StringAlign=Right

[MeterAllCPUName]
Meter=String
MeterStyle=AllStyle
Y=10
FontWeight=700
Text=Total CPU

[MeterAllCPUValue]
Meter=String
MeterStyle=AllStyle | RightStyle
Text=[MeasureAllCPU:1]%

[MeterTop1Name]
Meter=String
MeasureName=MeasureTop1
MeterStyle=AllStyle
Y=10R

[MeterTop1Value]
Meter=String
MeterStyle=AllStyle | RightStyle
Text=[MeasureTop1:1]%

[MeterTop2Name]
Meter=String
MeasureName=MeasureTop2
MeterStyle=AllStyle

[MeterTop2Value]
Meter=String
MeterStyle=AllStyle | RightStyle
Text=[MeasureTop2:1]%

[MeterTop3Name]
Meter=String
MeasureName=MeasureTop3
MeterStyle=AllStyle

[MeterTop3Value]
Meter=String
MeterStyle=AllStyle | RightStyle
Text=[MeasureTop3:1]%

[MeterTop4Name]
Meter=String
MeasureName=MeasureTop4
MeterStyle=AllStyle

[MeterTop4Value]
Meter=String
MeterStyle=AllStyle | RightStyle
Text=[MeasureTop4:1]%

[MeterTop5Name]
Meter=String
MeasureName=MeasureTop5
MeterStyle=AllStyle

[MeterTop5Value]
Meter=String
MeterStyle=AllStyle | RightStyle
Text=[MeasureTop5:1]%
GIF.gif
If you want this without all the internal Windows OS processes, you can set something like:

Blacklist=_Total|Idle|dwm|wmpnetwk|csrss|svchost|lsass|System|system

On each measure where Index > 0. Then you can restrict it more to how much CPU the "applications" you are running are using. Your mileage will vary, you can watch it for a while add anything else you "don't want". My view is that a lot of those processes, like dwm and svchost, are pretty much always using a little CPU, but they are really just "background noise".

On the measure with Index=0, the "total" one, you want to include everything, so just leave the default for Blacklist, which is Blacklist=_Total|Idle. Any time you are using Index=0, the instance _Total is redundant, and the instance Idle that is part of the CPU counter generally isn't useful, as it in effect means "how much ISN'T being used?". That is why those two instances are always Blacklist'ed by default.
User avatar
jsmorley
Developer
Posts: 22628
Joined: April 19th, 2009, 11:02 pm
Location: Fort Hunt, Virginia, USA

Re: UsageMonitor Discussions

Post by jsmorley »

Drive Lights

Code: Select all

[Rainmeter]
Update=1000
DynamicWindowSize=1
AccurateText=1

[Variables]
Drive1=C:
Drive2=D:

OffLight=137,137,137,255
GreenLight=105,209,115,255
CoralLight=244,125,67,255

[MeterAllBackground]
Meter=Shape
Shape=Rectangle 0.5,0.5,70,55,12 | Fill Color 47,47,47,255 | StrokeWidth 1.5 | Stroke Color 150,150,150,255
W=171
UpdateDivider=-1

[MeasureDrive1Reads]
Measure=Plugin
Plugin=UsageMonitor
Category=LogicalDisk
Counter=Disk Reads/sec
Name=#Drive1#
IfCondition=MeasureDrive1Reads > 0
IfTrueAction=[!SetOption MeterDrive1Reads Color "Fill Color #GreenLight#"][!UpdateMeter MeterDrive1Reads][!Redraw]
IfFalseAction=[!SetOption MeterDrive1Reads Color "Fill Color #OffLight#"][!UpdateMeter MeterDrive1Reads][!Redraw]

[MeasureDrive1Writes]
Measure=Plugin
Plugin=UsageMonitor
Category=LogicalDisk
Counter=Disk Writes/sec
Name=#Drive1#
IfCondition=MeasureDrive1Writes > 0
IfTrueAction=[!SetOption MeterDrive1Writes Color "Fill Color #CoralLight#"][!UpdateMeter MeterDrive1Writes][!Redraw]
IfFalseAction=[!SetOption MeterDrive1Writes Color "Fill Color #OffLight#"][!UpdateMeter MeterDrive1Writes][!Redraw]

[MeasureDrive2Reads]
Measure=Plugin
Plugin=UsageMonitor
Category=LogicalDisk
Counter=Disk Reads/sec
Name=#Drive2#
IfCondition=MeasureDrive2Reads > 0
IfTrueAction=[!SetOption MeterDrive2Reads Color "Fill Color #GreenLight#"][!UpdateMeter MeterDrive2Reads][!Redraw]
IfFalseAction=[!SetOption MeterDrive2Reads Color "Fill Color #OffLight#"][!UpdateMeter MeterDrive2Reads][!Redraw]

[MeasureDrive2Writes]
Measure=Plugin
Plugin=UsageMonitor
Category=LogicalDisk
Counter=Disk Writes/sec
Name=#Drive2#
IfCondition=MeasureDrive2Writes > 0
IfTrueAction=[!SetOption MeterDrive2Writes Color "Fill Color #CoralLight#"][!UpdateMeter MeterDrive2Writes][!Redraw]
IfFalseAction=[!SetOption MeterDrive2Writes Color "Fill Color #OffLight#"][!UpdateMeter MeterDrive2Writes][!Redraw]

[MeterDrive1]
Meter=String
X=10
Y=10
FontSize=11
FontWeight=400
FontColor=255,255,255,255
AntiAlias=1
Text=#Drive1#

[MeterDrive1Reads]
Meter=Shape
X=25r
Y=4r
W=8
H=8
Shape=Ellipse 4,4,4 | StrokeWidth 0 | Extend Color
Color=Fill Color 137,137,137,255
UpdateDivider=-1

[MeterDrive1Writes]
Meter=Shape
X=3R
Y=0r
W=8
H=8
Shape=Ellipse 4,4,4 | StrokeWidth 0 | Extend Color
Color=Fill Color 137,137,137,255
UpdateDivider=-1

[MeterDrive2]
Meter=String
X=10
Y=10R
FontSize=11
FontWeight=400
FontColor=255,255,255,255
AntiAlias=1
Text=#Drive2#

[MeterDrive2Reads]
Meter=Shape
X=25r
Y=4r
W=8
H=8
Shape=Ellipse 4,4,4 | StrokeWidth 0 | Extend Color
Color=Fill Color 137,137,137,255
UpdateDivider=-1

[MeterDrive2Writes]
Meter=Shape
X=3R
Y=0r
W=8
H=8
Shape=Ellipse 4,4,4 | StrokeWidth 0 | Extend Color
Color=Fill Color 137,137,137,255
UpdateDivider=-1
1.jpg
User avatar
tjhrulz
Developer
Posts: 267
Joined: October 13th, 2016, 1:28 am
Location: Earth
Contact:

Re: UsageMonitor Discussions

Post by tjhrulz »

Also a huge thing that this plugin brings to the table is the ability to get GPU & VRAM info without the need for a 3rd party program (Although it does require windows 10). So if you just change everywhere it says Alias=CPU to Alias=GPU that example skin will then give you your total GPU usage and the top 5 programs using GPU which is pretty awesome.
User avatar
SilverAzide
Rainmeter Sage
Posts: 2588
Joined: March 23rd, 2015, 5:26 pm
Contact:

Re: UsageMonitor Discussions - GPU oddity?

Post by SilverAzide »

Hello,

A question for the devs: I've noticed an oddity with the new UsageMonitor plugin... if you monitor the Rainmeter process, it appears that Rainmeter does use GPU, but the memory used is 0 bytes. Is this really true? (PerfMon shows the same thing, by the way...)

Code: Select all

[Rainmeter]
AccurateText=1
DynamicWindowSize=1
Update=1000

[MeasureGPU]
Measure=Plugin
Plugin=UsageMonitor
Alias=GPU
Percent=0
Name=Rainmeter

[MeasureVRAM]
Measure=Plugin
Plugin=UsageMonitor
Alias=VRAM
Percent=0
Name=Rainmeter

[MeasureVRAMShared]
Measure=Plugin
Plugin=UsageMonitor
Alias=VRAMSHARED
Percent=0
Name=Rainmeter

[MeterText]
Meter=String
SolidColor=0,0,0,255
FontColor=255,255,255,255
FontSize=16
Padding=8,8,8,8
X=0
Y=0
Text="Rainmeter: [MeasureGPU:2]%, [MeasureVRAM:]B, [MeasureVRAMShared:]B"
DynamicVariables=1
buckb
Posts: 64
Joined: February 12th, 2018, 12:47 am

Re: UsageMonitor Discussions

Post by buckb »

Moderator:

This post is a duplicate of my post here https://forum.rainmeter.net/viewtopic.php?f=122&t=28353&start=41. This thread is a much better fit for my original post. Please feel free to delete the original post; I am unsure of the proper etiquette.



Original post:

I am preparing to convert some of my skins from PerfMon to UsageMonitor. From my reading of the documentation, I see two enhancements to UsageMonitor that I would find useful:

1) Option to match instance Name using a partial name

Example: Setting Name="C:" would match instance name "0 C:" (or "0 C: D:" or "1 C:")

Reason: On one of my machines which runs Windows 7, the instances of PhysicalDisk are:
"0 C: D:"
"1 F:"
"2 E:"

However, after rebooting, the instances may come up as follows:
"0 C: D:"
"1 E:"
"2 F:"

Notice that the disk numbers for E: and F: have swapped. The assignment is random from boot to boot. Partial matching of some variety would allow the skin to always pick up the correct physical disk.


2) Option to validate the existence of a given instance Name, with partial name matching as above

Example: Does the instance "0 C:" exist? Or with partial matching, does "C:" exist?

Reason: Again using PhysicalDisk as an example, removable disk drives come and go in the list of instances. However, the PerfMon plugin returns 0 both for a valid counter whose value is 0, and for a counter if the instance does not exist at all. I am assuming that UsageMonitor behaves the same way.

Having a means to determine if an instance Name is valid allows my skin to easily distinguish between a drive that is offline, and a drive with counters whose values are truly 0.

Currently, I am using an ever-so-slightly modified version of PerfMon that I compiled myself in order to do what I have described above. If there is a way to achieve what I want using UsageMonitor as it is right now, i would appreciate the feedback.


--buckb
User avatar
jsmorley
Developer
Posts: 22628
Joined: April 19th, 2009, 11:02 pm
Location: Fort Hunt, Virginia, USA

Re: UsageMonitor Discussions

Post by jsmorley »

We will keep these in mind, but to be honest, I don't think it is likely. The root of the problem is that an instance in the context of a counter is a unique thing, and any ideas about some kind of NameContains= or some such really can't work. A name must return a single exact instance name. I think the idea is fine if it doesn't match at all, or if it matches one instance, but falls apart when it matches two or ten.

We will keep in on the radar in case we have some epiphany.
User avatar
Brian
Developer
Posts: 2673
Joined: November 24th, 2011, 1:42 am
Location: Utah

Re: UsageMonitor Discussions

Post by Brian »

SilverAzide wrote:A question for the devs: I've noticed an oddity with the new UsageMonitor plugin... if you monitor the Rainmeter process, it appears that Rainmeter does use GPU, but the memory used is 0 bytes. Is this really true? (PerfMon shows the same thing, by the way...)
Rainmeter uses Direct2D to render a skin to the desktop. While Rainmeter does not directly use any hardware acceleration, Direct2D will use the GPU for certain optimizations that it performs. It is usually only noticeable with larger skin displaying lots of text or shapes. It does not store anything on the GPU, just uses GPU cycles to do some work.

For example, load the "complex" version of the the following skin and note the GPU it takes to "draw" it.
https://forum.rainmeter.net/viewtopic.php?p=147683#p147683

-Brian
User avatar
SilverAzide
Rainmeter Sage
Posts: 2588
Joined: March 23rd, 2015, 5:26 pm
Contact:

Re: UsageMonitor Discussions

Post by SilverAzide »

Brian wrote:For example, load the "complex" version of the the following skin and note the GPU it takes to "draw" it.
https://forum.rainmeter.net/viewtopic.php?p=147683#p147683
I'm not going to be able to unsee that.
buckb
Posts: 64
Joined: February 12th, 2018, 12:47 am

Re: UsageMonitor Discussions

Post by buckb »

jsmorley wrote:We will keep in on the radar in case we have some epiphany.
Thanks for considering the suggestions. I recognized the problem of multiple matches, but decided that could be left to the skin developer to resolve by providing sufficient "uniqueness" in the matching substring.

I think I should be able to achieve what I want by using UsageMonitor's ability to retrieve counters by instance Index. I can then iterate through index numbers looking for the instance Name I desire.


--buckb
Post Reply