From a1cb2e96838d1102850d08b3003d1bc776a0d06b Mon Sep 17 00:00:00 2001 From: wj32 Date: Tue, 30 Dec 2008 10:46:00 +0000 Subject: [PATCH] completed System Information Window git-svn-id: svn://svn.code.sf.net/p/processhacker/code@454 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- trunk/CHANGELOG.txt | 37 +- trunk/ProcessHacker/Components/Plotter.cs | 5 + trunk/ProcessHacker/Forms/HackerWindow.cs | 2 + .../Forms/OptionsWindow.Designer.cs | 78 +- trunk/ProcessHacker/Forms/OptionsWindow.cs | 4 + trunk/ProcessHacker/Forms/ProcessWindow.cs | 27 +- .../Forms/SysInfoWindow.Designer.cs | 1223 ++++++++++++++++- trunk/ProcessHacker/Forms/SysInfoWindow.cs | 134 +- trunk/ProcessHacker/Misc/DeltaManager.cs | 5 + trunk/ProcessHacker/Misc/Misc.cs | 19 +- .../Properties/Settings.Designer.cs | 12 + .../Properties/Settings.settings | 3 + .../Providers/ProcessSystemProvider.cs | 47 +- trunk/ProcessHacker/Structs/StructParser.cs | 6 + trunk/ProcessHacker/Win32/API/Functions.cs | 7 + trunk/ProcessHacker/Win32/API/Structs.cs | 27 +- trunk/ProcessHacker/app.config | 3 + trunk/ProcessHacker/structs.txt | 2 +- trunk/README.txt | 1 + .../Tree/Input/ResizeColumnState.cs | 1 + 20 files changed, 1513 insertions(+), 130 deletions(-) diff --git a/trunk/CHANGELOG.txt b/trunk/CHANGELOG.txt index ba03d4d80..b4108b317 100644 --- a/trunk/CHANGELOG.txt +++ b/trunk/CHANGELOG.txt @@ -1,26 +1,23 @@ Process Hacker 1.3.0.0 - * NEW: Process tree - * NEW: Process properties window - * NEW: Process performance information and graphs - * NEW: Displays more information about tokens - * NEW: Displays information about Events, Mutants, Sections and Tokens - other processes have handles to - * NEW: Terminator tool - tries to terminate processes using many different - techniques - * NEW: Highlighting for UAC elevated processes and processes in job objects - * NEW: Struct reader (with support for user-defined structs) - * NEW: Tray icon now displays the current CPU usage, and the tooltip is almost - exactly the same as Process Explorer's (current CPU usage + process using most - of the CPU) - * FIXED: Shows SIDs without names in SDDL format - * FIXED: Less "Access denied" errors - uses PROCESS_QUERY_LIMITED_INFORMATION - on Vista - * FIXED: Major refactoring of Win32 code - * FIXED: Symbols are now bound to each process - no more weird stack traces/symbol - names - * FIXED: Handle filtering is now much faster - uses a cache for session ID checking + * NEW: + * Process tree using TreeViewAdv + * Process properties window with statistics and graphs + * System Information Window with statistics and graphs + * Detailed token information, including source, owner and primary group + * Information about remote handles to events, mutants, sections and tokens + * Terminator tool - tries many techniques to terminate processes + * Highlighting for UAC elevated processes and processes in job objects + * Struct reader for examining PEBs and TEBs - note that this can be + extended by writing your own definitions + * Better tray icon - displays a graph, and the tooltip contains the current + CPU usage and the process using most of the CPU + * FIXED: + * Shows SIDs without names (like Logon IDs) in SDDL format + * Uses PROCESS_QUERY_LIMITED_INFORMATION on Windows Vista - e.g. on audiodg.exe + * Symbols are now bound to each process - no more weird stack traces/symbols + * Handle filtering is now much faster - uses a cache for session ID checking 1.2.6.5 * A new member of the project - Dean diff --git a/trunk/ProcessHacker/Components/Plotter.cs b/trunk/ProcessHacker/Components/Plotter.cs index 676fc92df..b0db276da 100644 --- a/trunk/ProcessHacker/Components/Plotter.cs +++ b/trunk/ProcessHacker/Components/Plotter.cs @@ -163,6 +163,11 @@ namespace ProcessHacker.Components /// A floating-point number less than or equal to 1. public void Add(float f1, float f2) { + if (f1 > 1.0f) + f1 = 1.0f; + if (f2 > 1.0f) + f2 = 1.0f; + _listData1.Add(f1); _listData2.Add(f2); diff --git a/trunk/ProcessHacker/Forms/HackerWindow.cs b/trunk/ProcessHacker/Forms/HackerWindow.cs index fa6660b15..48f4d40a5 100644 --- a/trunk/ProcessHacker/Forms/HackerWindow.cs +++ b/trunk/ProcessHacker/Forms/HackerWindow.cs @@ -272,8 +272,10 @@ namespace ProcessHacker { SysInfoWindow = new SysInfoWindow(); } + SysInfoWindow.Show(); SysInfoWindow.Activate(); + SysInfoWindow.Start(); } #endregion diff --git a/trunk/ProcessHacker/Forms/OptionsWindow.Designer.cs b/trunk/ProcessHacker/Forms/OptionsWindow.Designer.cs index 5bb3e7ff9..934146ce9 100644 --- a/trunk/ProcessHacker/Forms/OptionsWindow.Designer.cs +++ b/trunk/ProcessHacker/Forms/OptionsWindow.Designer.cs @@ -40,6 +40,8 @@ this.checkHideWhenMinimized = new System.Windows.Forms.CheckBox(); this.checkShowTrayIcon = new System.Windows.Forms.CheckBox(); this.tabHighlighting = new System.Windows.Forms.TabPage(); + this.label11 = new System.Windows.Forms.Label(); + this.colorJobProcesses = new ProcessHacker.Components.ColorModifier(); this.label10 = new System.Windows.Forms.Label(); this.colorElevatedProcesses = new ProcessHacker.Components.ColorModifier(); this.label9 = new System.Windows.Forms.Label(); @@ -70,8 +72,8 @@ this.label16 = new System.Windows.Forms.Label(); this.colorCPUKT = new ProcessHacker.Components.ColorModifier(); this.label17 = new System.Windows.Forms.Label(); - this.colorJobProcesses = new ProcessHacker.Components.ColorModifier(); - this.label11 = new System.Windows.Forms.Label(); + this.label18 = new System.Windows.Forms.Label(); + this.comboSizeUnits = new System.Windows.Forms.ComboBox(); ((System.ComponentModel.ISupportInitialize)(this.textUpdateInterval)).BeginInit(); this.tabControl.SuspendLayout(); this.tabGeneral.SuspendLayout(); @@ -133,7 +135,7 @@ // this.checkShowProcessDomains.AutoSize = true; this.checkShowProcessDomains.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkShowProcessDomains.Location = new System.Drawing.Point(6, 132); + this.checkShowProcessDomains.Location = new System.Drawing.Point(6, 159); this.checkShowProcessDomains.Name = "checkShowProcessDomains"; this.checkShowProcessDomains.Size = new System.Drawing.Size(156, 18); this.checkShowProcessDomains.TabIndex = 3; @@ -144,7 +146,7 @@ // this.checkWarnDangerous.AutoSize = true; this.checkWarnDangerous.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkWarnDangerous.Location = new System.Drawing.Point(6, 108); + this.checkWarnDangerous.Location = new System.Drawing.Point(6, 135); this.checkWarnDangerous.Name = "checkWarnDangerous"; this.checkWarnDangerous.Size = new System.Drawing.Size(228, 18); this.checkWarnDangerous.TabIndex = 4; @@ -164,9 +166,9 @@ // this.textSearchEngine.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.textSearchEngine.Location = new System.Drawing.Point(92, 33); + this.textSearchEngine.Location = new System.Drawing.Point(95, 33); this.textSearchEngine.Name = "textSearchEngine"; - this.textSearchEngine.Size = new System.Drawing.Size(241, 20); + this.textSearchEngine.Size = new System.Drawing.Size(238, 20); this.textSearchEngine.TabIndex = 6; // // tabControl @@ -185,6 +187,8 @@ // // tabGeneral // + this.tabGeneral.Controls.Add(this.comboSizeUnits); + this.tabGeneral.Controls.Add(this.label18); this.tabGeneral.Controls.Add(this.checkHideWhenMinimized); this.tabGeneral.Controls.Add(this.checkShowTrayIcon); this.tabGeneral.Controls.Add(this.label1); @@ -196,7 +200,7 @@ this.tabGeneral.Location = new System.Drawing.Point(4, 22); this.tabGeneral.Name = "tabGeneral"; this.tabGeneral.Padding = new System.Windows.Forms.Padding(3); - this.tabGeneral.Size = new System.Drawing.Size(339, 226); + this.tabGeneral.Size = new System.Drawing.Size(339, 244); this.tabGeneral.TabIndex = 0; this.tabGeneral.Text = "General"; this.tabGeneral.UseVisualStyleBackColor = true; @@ -205,7 +209,7 @@ // this.checkHideWhenMinimized.AutoSize = true; this.checkHideWhenMinimized.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkHideWhenMinimized.Location = new System.Drawing.Point(6, 83); + this.checkHideWhenMinimized.Location = new System.Drawing.Point(6, 110); this.checkHideWhenMinimized.Name = "checkHideWhenMinimized"; this.checkHideWhenMinimized.Size = new System.Drawing.Size(131, 18); this.checkHideWhenMinimized.TabIndex = 9; @@ -216,7 +220,7 @@ // this.checkShowTrayIcon.AutoSize = true; this.checkShowTrayIcon.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkShowTrayIcon.Location = new System.Drawing.Point(6, 59); + this.checkShowTrayIcon.Location = new System.Drawing.Point(6, 86); this.checkShowTrayIcon.Name = "checkShowTrayIcon"; this.checkShowTrayIcon.Size = new System.Drawing.Size(102, 18); this.checkShowTrayIcon.TabIndex = 7; @@ -252,6 +256,23 @@ this.tabHighlighting.Text = "Highlighting"; this.tabHighlighting.UseVisualStyleBackColor = true; // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(6, 217); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(79, 13); + this.label11.TabIndex = 9; + this.label11.Text = "Job Processes:"; + // + // colorJobProcesses + // + this.colorJobProcesses.Color = System.Drawing.Color.Transparent; + this.colorJobProcesses.Location = new System.Drawing.Point(127, 215); + this.colorJobProcesses.Name = "colorJobProcesses"; + this.colorJobProcesses.Size = new System.Drawing.Size(40, 20); + this.colorJobProcesses.TabIndex = 8; + // // label10 // this.label10.AutoSize = true; @@ -415,7 +436,7 @@ this.tabPlotting.Location = new System.Drawing.Point(4, 22); this.tabPlotting.Name = "tabPlotting"; this.tabPlotting.Padding = new System.Windows.Forms.Padding(3); - this.tabPlotting.Size = new System.Drawing.Size(339, 226); + this.tabPlotting.Size = new System.Drawing.Size(339, 244); this.tabPlotting.TabIndex = 2; this.tabPlotting.Text = "Plotting"; this.tabPlotting.UseVisualStyleBackColor = true; @@ -533,22 +554,31 @@ this.label17.TabIndex = 10; this.label17.Text = "CPU Kernel Time:"; // - // colorJobProcesses + // label18 // - this.colorJobProcesses.Color = System.Drawing.Color.Transparent; - this.colorJobProcesses.Location = new System.Drawing.Point(127, 215); - this.colorJobProcesses.Name = "colorJobProcesses"; - this.colorJobProcesses.Size = new System.Drawing.Size(40, 20); - this.colorJobProcesses.TabIndex = 8; + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(6, 62); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(75, 13); + this.label18.TabIndex = 10; + this.label18.Text = "Max Size Unit:"; // - // label11 + // comboSizeUnits // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(6, 217); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(79, 13); - this.label11.TabIndex = 9; - this.label11.Text = "Job Processes:"; + this.comboSizeUnits.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboSizeUnits.FormattingEnabled = true; + this.comboSizeUnits.Items.AddRange(new object[] { + "B", + "kB", + "MB", + "GB", + "TB", + "PB", + "EB"}); + this.comboSizeUnits.Location = new System.Drawing.Point(95, 59); + this.comboSizeUnits.Name = "comboSizeUnits"; + this.comboSizeUnits.Size = new System.Drawing.Size(67, 21); + this.comboSizeUnits.TabIndex = 11; // // OptionsWindow // @@ -625,5 +655,7 @@ private System.Windows.Forms.CheckBox checkPlotterAntialias; private System.Windows.Forms.Label label11; private ProcessHacker.Components.ColorModifier colorJobProcesses; + private System.Windows.Forms.ComboBox comboSizeUnits; + private System.Windows.Forms.Label label18; } } \ No newline at end of file diff --git a/trunk/ProcessHacker/Forms/OptionsWindow.cs b/trunk/ProcessHacker/Forms/OptionsWindow.cs index 73fbbe6eb..82e1c12e2 100644 --- a/trunk/ProcessHacker/Forms/OptionsWindow.cs +++ b/trunk/ProcessHacker/Forms/OptionsWindow.cs @@ -37,6 +37,8 @@ namespace ProcessHacker textUpdateInterval.Value = Properties.Settings.Default.RefreshInterval; textSearchEngine.Text = Properties.Settings.Default.SearchEngine; + comboSizeUnits.SelectedItem = + Misc.SizeUnitNames[Properties.Settings.Default.UnitSpecifier]; checkWarnDangerous.Checked = Properties.Settings.Default.WarnDangerous; checkShowProcessDomains.Checked = Properties.Settings.Default.ShowAccountDomains; checkShowTrayIcon.Checked = Properties.Settings.Default.ShowIcon; @@ -83,6 +85,8 @@ namespace ProcessHacker Properties.Settings.Default.ShowAccountDomains = checkShowProcessDomains.Checked; Properties.Settings.Default.ShowIcon = checkShowTrayIcon.Checked; Properties.Settings.Default.HideWhenMinimized = checkHideWhenMinimized.Checked; + Properties.Settings.Default.UnitSpecifier = + Array.IndexOf(Misc.SizeUnitNames, comboSizeUnits.SelectedItem); Program.HackerWindow.NotifyIcon.Visible = Properties.Settings.Default.ShowIcon; Program.HackerWindow.ProcessProvider.Interval = Properties.Settings.Default.RefreshInterval; diff --git a/trunk/ProcessHacker/Forms/ProcessWindow.cs b/trunk/ProcessHacker/Forms/ProcessWindow.cs index b38fb17b7..582169554 100644 --- a/trunk/ProcessHacker/Forms/ProcessWindow.cs +++ b/trunk/ProcessHacker/Forms/ProcessWindow.cs @@ -66,8 +66,10 @@ namespace ProcessHacker { ProcessItem item = Program.HackerWindow.ProcessProvider.Dictionary[_pid]; - _processStats.Add("System Idle", - Program.HackerWindow.ProcessProvider.ProcessorPerf.IdleTime); + _processStats.Add("System Other", + Program.HackerWindow.ProcessProvider.ProcessorPerf.IdleTime + + Program.HackerWindow.ProcessProvider.ProcessorPerf.DpcTime + + Program.HackerWindow.ProcessProvider.ProcessorPerf.InterruptTime); _processStats.Add("System Kernel", Program.HackerWindow.ProcessProvider.ProcessorPerf.KernelTime); _processStats.Add("System User", @@ -440,8 +442,10 @@ namespace ProcessHacker ProcessItem item = Program.HackerWindow.ProcessProvider.Dictionary[_pid]; // update deltas - _processStats.Update("System Idle", - Program.HackerWindow.ProcessProvider.ProcessorPerf.IdleTime); + _processStats.Update("System Other", + Program.HackerWindow.ProcessProvider.ProcessorPerf.IdleTime + + Program.HackerWindow.ProcessProvider.ProcessorPerf.DpcTime + + Program.HackerWindow.ProcessProvider.ProcessorPerf.InterruptTime); _processStats.Update("System Kernel", Program.HackerWindow.ProcessProvider.ProcessorPerf.KernelTime); _processStats.Update("System User", @@ -467,18 +471,15 @@ namespace ProcessHacker plotterIO.LineColor2 = Properties.Settings.Default.PlotterIOWColor; // update graphs - long sysTotal = _processStats.GetDelta("System Kernel") + _processStats.GetDelta("System User"); + long sysTotal = _processStats.GetDelta("System Kernel") + _processStats.GetDelta("System User") + + _processStats.GetDelta("System Other"); float procKernel = (float)_processStats.GetDelta("Process Kernel") / sysTotal; float procUser = (float)_processStats.GetDelta("Process User") / sysTotal; - int noProcs = Program.HackerWindow.ProcessProvider.System.NumberOfProcessors; - if (procKernel / noProcs <= 1 && procUser / noProcs <= 1) - { - plotterCPUUsage.Add(procKernel / noProcs, procUser / noProcs); - plotterCPUUsage.Text = ((procKernel + procUser) * 100 / noProcs).ToString("F2") + - "% (K: " + (procKernel * 100 / noProcs).ToString("F2") + - "%, U: " + (procUser * 100 / noProcs).ToString("F2") + "%)"; - } + plotterCPUUsage.Add(procKernel, procUser); + plotterCPUUsage.Text = ((procKernel + procUser) * 100).ToString("F2") + + "% (K: " + (procKernel * 100).ToString("F2") + + "%, U: " + (procUser * 100).ToString("F2") + "%)"; plotterMemory.Add(item.Process.VirtualMemoryCounters.PrivateBytes, item.Process.VirtualMemoryCounters.WorkingSetSize); diff --git a/trunk/ProcessHacker/Forms/SysInfoWindow.Designer.cs b/trunk/ProcessHacker/Forms/SysInfoWindow.Designer.cs index 2fbaf6726..1c29a5cf8 100644 --- a/trunk/ProcessHacker/Forms/SysInfoWindow.Designer.cs +++ b/trunk/ProcessHacker/Forms/SysInfoWindow.Designer.cs @@ -35,13 +35,115 @@ this.groupBox1 = new System.Windows.Forms.GroupBox(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.checkShowOneGraphPerCPU = new System.Windows.Forms.CheckBox(); + this.flowInfo = new System.Windows.Forms.FlowLayoutPanel(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.label6 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.labelTotalsProcesses = new System.Windows.Forms.Label(); + this.labelTotalsThreads = new System.Windows.Forms.Label(); + this.labelTotalsHandles = new System.Windows.Forms.Label(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.labelCCC = new System.Windows.Forms.Label(); + this.labelCCP = new System.Windows.Forms.Label(); + this.labelCCL = new System.Windows.Forms.Label(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.label4 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.labelPMC = new System.Windows.Forms.Label(); + this.labelPMT = new System.Windows.Forms.Label(); + this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.label15 = new System.Windows.Forms.Label(); + this.labelCacheMaximum = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.labelCacheMinimum = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.labelCacheCurrent = new System.Windows.Forms.Label(); + this.labelCachePeak = new System.Windows.Forms.Label(); + this.groupBox7 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); + this.label23 = new System.Windows.Forms.Label(); + this.labelKPNPF = new System.Windows.Forms.Label(); + this.label21 = new System.Windows.Forms.Label(); + this.labelKPNPA = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.labelKPNPU = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.label18 = new System.Windows.Forms.Label(); + this.labelKPPPU = new System.Windows.Forms.Label(); + this.labelKPPA = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.labelKPPVU = new System.Windows.Forms.Label(); + this.labelKPPF = new System.Windows.Forms.Label(); + this.groupBox8 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel6 = new System.Windows.Forms.TableLayoutPanel(); + this.label20 = new System.Windows.Forms.Label(); + this.labelPFCache = new System.Windows.Forms.Label(); + this.label24 = new System.Windows.Forms.Label(); + this.label25 = new System.Windows.Forms.Label(); + this.labelPFDZ = new System.Windows.Forms.Label(); + this.label27 = new System.Windows.Forms.Label(); + this.label28 = new System.Windows.Forms.Label(); + this.labelPFTotal = new System.Windows.Forms.Label(); + this.labelPFTrans = new System.Windows.Forms.Label(); + this.label31 = new System.Windows.Forms.Label(); + this.labelPFCOW = new System.Windows.Forms.Label(); + this.labelPFCacheTrans = new System.Windows.Forms.Label(); + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel7 = new System.Windows.Forms.TableLayoutPanel(); + this.label16 = new System.Windows.Forms.Label(); + this.labelIOOB = new System.Windows.Forms.Label(); + this.label22 = new System.Windows.Forms.Label(); + this.label26 = new System.Windows.Forms.Label(); + this.labelIOO = new System.Windows.Forms.Label(); + this.label30 = new System.Windows.Forms.Label(); + this.label32 = new System.Windows.Forms.Label(); + this.labelIOR = new System.Windows.Forms.Label(); + this.labelIOW = new System.Windows.Forms.Label(); + this.label35 = new System.Windows.Forms.Label(); + this.labelIORB = new System.Windows.Forms.Label(); + this.labelIOWB = new System.Windows.Forms.Label(); this.plotterMemory = new ProcessHacker.Components.Plotter(); this.plotterIO = new ProcessHacker.Components.Plotter(); this.plotterCPU = new ProcessHacker.Components.Plotter(); + this.groupBox10 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel8 = new System.Windows.Forms.TableLayoutPanel(); + this.label37 = new System.Windows.Forms.Label(); + this.label38 = new System.Windows.Forms.Label(); + this.labelCPUContextSwitches = new System.Windows.Forms.Label(); + this.labelCPUSystemCalls = new System.Windows.Forms.Label(); + this.label41 = new System.Windows.Forms.Label(); + this.labelCPUInterrupts = new System.Windows.Forms.Label(); this.gboxCPUPlotter.SuspendLayout(); this.tableGraphs.SuspendLayout(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); + this.flowInfo.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + this.groupBox6.SuspendLayout(); + this.tableLayoutPanel4.SuspendLayout(); + this.groupBox7.SuspendLayout(); + this.tableLayoutPanel5.SuspendLayout(); + this.groupBox8.SuspendLayout(); + this.tableLayoutPanel6.SuspendLayout(); + this.groupBox9.SuspendLayout(); + this.tableLayoutPanel7.SuspendLayout(); + this.groupBox10.SuspendLayout(); + this.tableLayoutPanel8.SuspendLayout(); this.SuspendLayout(); // // gboxCPUPlotter @@ -51,7 +153,7 @@ this.gboxCPUPlotter.Dock = System.Windows.Forms.DockStyle.Fill; this.gboxCPUPlotter.Location = new System.Drawing.Point(3, 3); this.gboxCPUPlotter.Name = "gboxCPUPlotter"; - this.gboxCPUPlotter.Size = new System.Drawing.Size(706, 109); + this.gboxCPUPlotter.Size = new System.Drawing.Size(812, 59); this.gboxCPUPlotter.TabIndex = 2; this.gboxCPUPlotter.TabStop = false; this.gboxCPUPlotter.Text = "CPU Usage (Kernel, User)"; @@ -70,7 +172,8 @@ // // tableGraphs // - this.tableGraphs.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.tableGraphs.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.tableGraphs.ColumnCount = 1; this.tableGraphs.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); @@ -86,16 +189,16 @@ this.tableGraphs.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); this.tableGraphs.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); this.tableGraphs.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableGraphs.Size = new System.Drawing.Size(712, 370); + this.tableGraphs.Size = new System.Drawing.Size(818, 219); this.tableGraphs.TabIndex = 3; // // groupBox1 // this.groupBox1.Controls.Add(this.plotterMemory); this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox1.Location = new System.Drawing.Point(3, 257); + this.groupBox1.Location = new System.Drawing.Point(3, 157); this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(706, 110); + this.groupBox1.Size = new System.Drawing.Size(812, 59); this.groupBox1.TabIndex = 7; this.groupBox1.TabStop = false; this.groupBox1.Text = "Commit, Physical Memory"; @@ -104,9 +207,9 @@ // this.groupBox2.Controls.Add(this.plotterIO); this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox2.Location = new System.Drawing.Point(3, 142); + this.groupBox2.Location = new System.Drawing.Point(3, 92); this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(706, 109); + this.groupBox2.Size = new System.Drawing.Size(812, 59); this.groupBox2.TabIndex = 5; this.groupBox2.TabStop = false; this.groupBox2.Text = "I/O (R+O, W)"; @@ -115,7 +218,7 @@ // this.checkShowOneGraphPerCPU.AutoSize = true; this.checkShowOneGraphPerCPU.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkShowOneGraphPerCPU.Location = new System.Drawing.Point(3, 118); + this.checkShowOneGraphPerCPU.Location = new System.Drawing.Point(3, 68); this.checkShowOneGraphPerCPU.Name = "checkShowOneGraphPerCPU"; this.checkShowOneGraphPerCPU.Size = new System.Drawing.Size(153, 18); this.checkShowOneGraphPerCPU.TabIndex = 3; @@ -123,6 +226,893 @@ this.checkShowOneGraphPerCPU.UseVisualStyleBackColor = true; this.checkShowOneGraphPerCPU.CheckedChanged += new System.EventHandler(this.checkShowOneGraphPerCPU_CheckedChanged); // + // flowInfo + // + this.flowInfo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.flowInfo.AutoScroll = true; + this.flowInfo.Controls.Add(this.groupBox3); + this.flowInfo.Controls.Add(this.groupBox4); + this.flowInfo.Controls.Add(this.groupBox5); + this.flowInfo.Controls.Add(this.groupBox6); + this.flowInfo.Controls.Add(this.groupBox7); + this.flowInfo.Controls.Add(this.groupBox8); + this.flowInfo.Controls.Add(this.groupBox9); + this.flowInfo.Controls.Add(this.groupBox10); + this.flowInfo.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.flowInfo.Location = new System.Drawing.Point(12, 237); + this.flowInfo.Name = "flowInfo"; + this.flowInfo.Size = new System.Drawing.Size(818, 260); + this.flowInfo.TabIndex = 4; + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.tableLayoutPanel1); + this.groupBox3.Location = new System.Drawing.Point(3, 3); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(195, 78); + this.groupBox3.TabIndex = 1; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Totals"; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.label6, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.label8, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.label9, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.labelTotalsProcesses, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.labelTotalsThreads, 1, 1); + this.tableLayoutPanel1.Controls.Add(this.labelTotalsHandles, 1, 2); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 16); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(189, 59); + this.tableLayoutPanel1.TabIndex = 1; + // + // label6 + // + this.label6.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(3, 3); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(56, 13); + this.label6.TabIndex = 1; + this.label6.Text = "Processes"; + // + // label8 + // + this.label8.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(3, 22); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(46, 13); + this.label8.TabIndex = 1; + this.label8.Text = "Threads"; + // + // label9 + // + this.label9.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(3, 42); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(46, 13); + this.label9.TabIndex = 1; + this.label9.Text = "Handles"; + // + // labelTotalsProcesses + // + this.labelTotalsProcesses.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelTotalsProcesses.AutoSize = true; + this.labelTotalsProcesses.Location = new System.Drawing.Point(153, 3); + this.labelTotalsProcesses.Name = "labelTotalsProcesses"; + this.labelTotalsProcesses.Size = new System.Drawing.Size(33, 13); + this.labelTotalsProcesses.TabIndex = 1; + this.labelTotalsProcesses.Text = "value"; + // + // labelTotalsThreads + // + this.labelTotalsThreads.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelTotalsThreads.AutoSize = true; + this.labelTotalsThreads.Location = new System.Drawing.Point(153, 22); + this.labelTotalsThreads.Name = "labelTotalsThreads"; + this.labelTotalsThreads.Size = new System.Drawing.Size(33, 13); + this.labelTotalsThreads.TabIndex = 1; + this.labelTotalsThreads.Text = "value"; + // + // labelTotalsHandles + // + this.labelTotalsHandles.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelTotalsHandles.AutoSize = true; + this.labelTotalsHandles.Location = new System.Drawing.Point(153, 42); + this.labelTotalsHandles.Name = "labelTotalsHandles"; + this.labelTotalsHandles.Size = new System.Drawing.Size(33, 13); + this.labelTotalsHandles.TabIndex = 1; + this.labelTotalsHandles.Text = "value"; + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.tableLayoutPanel2); + this.groupBox4.Location = new System.Drawing.Point(3, 87); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(195, 78); + this.groupBox4.TabIndex = 2; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "Commit Charge"; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 2; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.label1, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.label2, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.label3, 0, 2); + this.tableLayoutPanel2.Controls.Add(this.labelCCC, 1, 0); + this.tableLayoutPanel2.Controls.Add(this.labelCCP, 1, 1); + this.tableLayoutPanel2.Controls.Add(this.labelCCL, 1, 2); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 16); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 3; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(189, 59); + this.tableLayoutPanel2.TabIndex = 1; + // + // label1 + // + this.label1.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 3); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(41, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Current"; + // + // label2 + // + this.label2.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(3, 22); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(32, 13); + this.label2.TabIndex = 1; + this.label2.Text = "Peak"; + // + // label3 + // + this.label3.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(3, 42); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(28, 13); + this.label3.TabIndex = 1; + this.label3.Text = "Limit"; + // + // labelCCC + // + this.labelCCC.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelCCC.AutoSize = true; + this.labelCCC.Location = new System.Drawing.Point(153, 3); + this.labelCCC.Name = "labelCCC"; + this.labelCCC.Size = new System.Drawing.Size(33, 13); + this.labelCCC.TabIndex = 1; + this.labelCCC.Text = "value"; + // + // labelCCP + // + this.labelCCP.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelCCP.AutoSize = true; + this.labelCCP.Location = new System.Drawing.Point(153, 22); + this.labelCCP.Name = "labelCCP"; + this.labelCCP.Size = new System.Drawing.Size(33, 13); + this.labelCCP.TabIndex = 1; + this.labelCCP.Text = "value"; + // + // labelCCL + // + this.labelCCL.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelCCL.AutoSize = true; + this.labelCCL.Location = new System.Drawing.Point(153, 42); + this.labelCCL.Name = "labelCCL"; + this.labelCCL.Size = new System.Drawing.Size(33, 13); + this.labelCCL.TabIndex = 1; + this.labelCCL.Text = "value"; + // + // groupBox5 + // + this.groupBox5.Controls.Add(this.tableLayoutPanel3); + this.groupBox5.Location = new System.Drawing.Point(3, 171); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(195, 56); + this.groupBox5.TabIndex = 3; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "Physical Memory"; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.Controls.Add(this.label4, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.label7, 0, 1); + this.tableLayoutPanel3.Controls.Add(this.labelPMC, 1, 0); + this.tableLayoutPanel3.Controls.Add(this.labelPMT, 1, 1); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 16); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 2; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(189, 37); + this.tableLayoutPanel3.TabIndex = 1; + // + // label4 + // + this.label4.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(3, 2); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(41, 13); + this.label4.TabIndex = 1; + this.label4.Text = "Current"; + // + // label7 + // + this.label7.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(3, 21); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(31, 13); + this.label7.TabIndex = 1; + this.label7.Text = "Total"; + // + // labelPMC + // + this.labelPMC.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelPMC.AutoSize = true; + this.labelPMC.Location = new System.Drawing.Point(153, 2); + this.labelPMC.Name = "labelPMC"; + this.labelPMC.Size = new System.Drawing.Size(33, 13); + this.labelPMC.TabIndex = 1; + this.labelPMC.Text = "value"; + // + // labelPMT + // + this.labelPMT.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelPMT.AutoSize = true; + this.labelPMT.Location = new System.Drawing.Point(153, 21); + this.labelPMT.Name = "labelPMT"; + this.labelPMT.Size = new System.Drawing.Size(33, 13); + this.labelPMT.TabIndex = 1; + this.labelPMT.Text = "value"; + // + // groupBox6 + // + this.groupBox6.Controls.Add(this.tableLayoutPanel4); + this.groupBox6.Location = new System.Drawing.Point(204, 3); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.Size = new System.Drawing.Size(195, 84); + this.groupBox6.TabIndex = 4; + this.groupBox6.TabStop = false; + this.groupBox6.Text = "Cache"; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 2; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel4.Controls.Add(this.label15, 0, 3); + this.tableLayoutPanel4.Controls.Add(this.labelCacheMaximum, 0, 3); + this.tableLayoutPanel4.Controls.Add(this.label13, 0, 2); + this.tableLayoutPanel4.Controls.Add(this.labelCacheMinimum, 0, 2); + this.tableLayoutPanel4.Controls.Add(this.label5, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.label10, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.labelCacheCurrent, 1, 0); + this.tableLayoutPanel4.Controls.Add(this.labelCachePeak, 1, 1); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 16); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 4; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel4.Size = new System.Drawing.Size(189, 65); + this.tableLayoutPanel4.TabIndex = 1; + // + // label15 + // + this.label15.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(3, 50); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(51, 13); + this.label15.TabIndex = 5; + this.label15.Text = "Maximum"; + // + // labelCacheMaximum + // + this.labelCacheMaximum.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelCacheMaximum.AutoSize = true; + this.labelCacheMaximum.Location = new System.Drawing.Point(153, 50); + this.labelCacheMaximum.Name = "labelCacheMaximum"; + this.labelCacheMaximum.Size = new System.Drawing.Size(33, 13); + this.labelCacheMaximum.TabIndex = 4; + this.labelCacheMaximum.Text = "value"; + // + // label13 + // + this.label13.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(3, 33); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(48, 13); + this.label13.TabIndex = 3; + this.label13.Text = "Minimum"; + // + // labelCacheMinimum + // + this.labelCacheMinimum.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelCacheMinimum.AutoSize = true; + this.labelCacheMinimum.Location = new System.Drawing.Point(153, 33); + this.labelCacheMinimum.Name = "labelCacheMinimum"; + this.labelCacheMinimum.Size = new System.Drawing.Size(33, 13); + this.labelCacheMinimum.TabIndex = 2; + this.labelCacheMinimum.Text = "value"; + // + // label5 + // + this.label5.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(3, 1); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(41, 13); + this.label5.TabIndex = 1; + this.label5.Text = "Current"; + // + // label10 + // + this.label10.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(3, 17); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(32, 13); + this.label10.TabIndex = 1; + this.label10.Text = "Peak"; + // + // labelCacheCurrent + // + this.labelCacheCurrent.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelCacheCurrent.AutoSize = true; + this.labelCacheCurrent.Location = new System.Drawing.Point(153, 1); + this.labelCacheCurrent.Name = "labelCacheCurrent"; + this.labelCacheCurrent.Size = new System.Drawing.Size(33, 13); + this.labelCacheCurrent.TabIndex = 1; + this.labelCacheCurrent.Text = "value"; + // + // labelCachePeak + // + this.labelCachePeak.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelCachePeak.AutoSize = true; + this.labelCachePeak.Location = new System.Drawing.Point(153, 17); + this.labelCachePeak.Name = "labelCachePeak"; + this.labelCachePeak.Size = new System.Drawing.Size(33, 13); + this.labelCachePeak.TabIndex = 1; + this.labelCachePeak.Text = "value"; + // + // groupBox7 + // + this.groupBox7.Controls.Add(this.tableLayoutPanel5); + this.groupBox7.Location = new System.Drawing.Point(204, 93); + this.groupBox7.Name = "groupBox7"; + this.groupBox7.Size = new System.Drawing.Size(195, 141); + this.groupBox7.TabIndex = 5; + this.groupBox7.TabStop = false; + this.groupBox7.Text = "Kernel Pools"; + // + // tableLayoutPanel5 + // + this.tableLayoutPanel5.ColumnCount = 2; + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel5.Controls.Add(this.label23, 0, 6); + this.tableLayoutPanel5.Controls.Add(this.labelKPNPF, 0, 6); + this.tableLayoutPanel5.Controls.Add(this.label21, 0, 5); + this.tableLayoutPanel5.Controls.Add(this.labelKPNPA, 0, 5); + this.tableLayoutPanel5.Controls.Add(this.label11, 0, 4); + this.tableLayoutPanel5.Controls.Add(this.label14, 0, 3); + this.tableLayoutPanel5.Controls.Add(this.labelKPNPU, 0, 4); + this.tableLayoutPanel5.Controls.Add(this.label17, 0, 0); + this.tableLayoutPanel5.Controls.Add(this.label18, 0, 2); + this.tableLayoutPanel5.Controls.Add(this.labelKPPPU, 1, 0); + this.tableLayoutPanel5.Controls.Add(this.labelKPPA, 1, 2); + this.tableLayoutPanel5.Controls.Add(this.label12, 0, 1); + this.tableLayoutPanel5.Controls.Add(this.labelKPPVU, 1, 1); + this.tableLayoutPanel5.Controls.Add(this.labelKPPF, 1, 3); + this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel5.Location = new System.Drawing.Point(3, 16); + this.tableLayoutPanel5.Name = "tableLayoutPanel5"; + this.tableLayoutPanel5.RowCount = 7; + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel5.Size = new System.Drawing.Size(189, 122); + this.tableLayoutPanel5.TabIndex = 1; + // + // label23 + // + this.label23.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(3, 105); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(90, 13); + this.label23.TabIndex = 9; + this.label23.Text = "Non-Paged Frees"; + // + // labelKPNPF + // + this.labelKPNPF.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelKPNPF.AutoSize = true; + this.labelKPNPF.Location = new System.Drawing.Point(153, 105); + this.labelKPNPF.Name = "labelKPNPF"; + this.labelKPNPF.Size = new System.Drawing.Size(33, 13); + this.labelKPNPF.TabIndex = 8; + this.labelKPNPF.Text = "value"; + // + // label21 + // + this.label21.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label21.AutoSize = true; + this.label21.Location = new System.Drawing.Point(3, 87); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(92, 13); + this.label21.TabIndex = 7; + this.label21.Text = "Non-Paged Allocs"; + // + // labelKPNPA + // + this.labelKPNPA.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelKPNPA.AutoSize = true; + this.labelKPNPA.Location = new System.Drawing.Point(153, 87); + this.labelKPNPA.Name = "labelKPNPA"; + this.labelKPNPA.Size = new System.Drawing.Size(33, 13); + this.labelKPNPA.TabIndex = 6; + this.labelKPNPA.Text = "value"; + // + // label11 + // + this.label11.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(3, 70); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(95, 13); + this.label11.TabIndex = 5; + this.label11.Text = "Non-Paged Usage"; + // + // label14 + // + this.label14.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(3, 53); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(67, 13); + this.label14.TabIndex = 3; + this.label14.Text = "Paged Frees"; + // + // labelKPNPU + // + this.labelKPNPU.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelKPNPU.AutoSize = true; + this.labelKPNPU.Location = new System.Drawing.Point(153, 70); + this.labelKPNPU.Name = "labelKPNPU"; + this.labelKPNPU.Size = new System.Drawing.Size(33, 13); + this.labelKPNPU.TabIndex = 4; + this.labelKPNPU.Text = "value"; + // + // label17 + // + this.label17.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(3, 2); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(67, 13); + this.label17.TabIndex = 1; + this.label17.Text = "Paged Phys."; + // + // label18 + // + this.label18.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(3, 36); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(69, 13); + this.label18.TabIndex = 1; + this.label18.Text = "Paged Allocs"; + // + // labelKPPPU + // + this.labelKPPPU.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelKPPPU.AutoSize = true; + this.labelKPPPU.Location = new System.Drawing.Point(153, 2); + this.labelKPPPU.Name = "labelKPPPU"; + this.labelKPPPU.Size = new System.Drawing.Size(33, 13); + this.labelKPPPU.TabIndex = 1; + this.labelKPPPU.Text = "value"; + // + // labelKPPA + // + this.labelKPPA.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelKPPA.AutoSize = true; + this.labelKPPA.Location = new System.Drawing.Point(153, 36); + this.labelKPPA.Name = "labelKPPA"; + this.labelKPPA.Size = new System.Drawing.Size(33, 13); + this.labelKPPA.TabIndex = 1; + this.labelKPPA.Text = "value"; + // + // label12 + // + this.label12.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(3, 19); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(59, 13); + this.label12.TabIndex = 1; + this.label12.Text = "Paged Virt."; + // + // labelKPPVU + // + this.labelKPPVU.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelKPPVU.AutoSize = true; + this.labelKPPVU.Location = new System.Drawing.Point(153, 19); + this.labelKPPVU.Name = "labelKPPVU"; + this.labelKPPVU.Size = new System.Drawing.Size(33, 13); + this.labelKPPVU.TabIndex = 1; + this.labelKPPVU.Text = "value"; + // + // labelKPPF + // + this.labelKPPF.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelKPPF.AutoSize = true; + this.labelKPPF.Location = new System.Drawing.Point(153, 53); + this.labelKPPF.Name = "labelKPPF"; + this.labelKPPF.Size = new System.Drawing.Size(33, 13); + this.labelKPPF.TabIndex = 2; + this.labelKPPF.Text = "value"; + // + // groupBox8 + // + this.groupBox8.Controls.Add(this.tableLayoutPanel6); + this.groupBox8.Location = new System.Drawing.Point(405, 3); + this.groupBox8.Name = "groupBox8"; + this.groupBox8.Size = new System.Drawing.Size(195, 121); + this.groupBox8.TabIndex = 6; + this.groupBox8.TabStop = false; + this.groupBox8.Text = "Page Faults"; + // + // tableLayoutPanel6 + // + this.tableLayoutPanel6.ColumnCount = 2; + this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel6.Controls.Add(this.label20, 0, 5); + this.tableLayoutPanel6.Controls.Add(this.labelPFCache, 0, 5); + this.tableLayoutPanel6.Controls.Add(this.label24, 0, 4); + this.tableLayoutPanel6.Controls.Add(this.label25, 0, 3); + this.tableLayoutPanel6.Controls.Add(this.labelPFDZ, 0, 4); + this.tableLayoutPanel6.Controls.Add(this.label27, 0, 0); + this.tableLayoutPanel6.Controls.Add(this.label28, 0, 2); + this.tableLayoutPanel6.Controls.Add(this.labelPFTotal, 1, 0); + this.tableLayoutPanel6.Controls.Add(this.labelPFTrans, 1, 2); + this.tableLayoutPanel6.Controls.Add(this.label31, 0, 1); + this.tableLayoutPanel6.Controls.Add(this.labelPFCOW, 1, 1); + this.tableLayoutPanel6.Controls.Add(this.labelPFCacheTrans, 1, 3); + this.tableLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel6.Location = new System.Drawing.Point(3, 16); + this.tableLayoutPanel6.Name = "tableLayoutPanel6"; + this.tableLayoutPanel6.RowCount = 6; + this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel6.Size = new System.Drawing.Size(189, 102); + this.tableLayoutPanel6.TabIndex = 1; + // + // label20 + // + this.label20.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(3, 84); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(38, 13); + this.label20.TabIndex = 7; + this.label20.Text = "Cache"; + // + // labelPFCache + // + this.labelPFCache.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelPFCache.AutoSize = true; + this.labelPFCache.Location = new System.Drawing.Point(153, 84); + this.labelPFCache.Name = "labelPFCache"; + this.labelPFCache.Size = new System.Drawing.Size(33, 13); + this.labelPFCache.TabIndex = 6; + this.labelPFCache.Text = "value"; + // + // label24 + // + this.label24.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label24.AutoSize = true; + this.label24.Location = new System.Drawing.Point(3, 65); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(72, 13); + this.label24.TabIndex = 5; + this.label24.Text = "Demand Zero"; + // + // label25 + // + this.label25.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label25.AutoSize = true; + this.label25.Location = new System.Drawing.Point(3, 49); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(87, 13); + this.label25.TabIndex = 3; + this.label25.Text = "Cache Transition"; + // + // labelPFDZ + // + this.labelPFDZ.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelPFDZ.AutoSize = true; + this.labelPFDZ.Location = new System.Drawing.Point(153, 65); + this.labelPFDZ.Name = "labelPFDZ"; + this.labelPFDZ.Size = new System.Drawing.Size(33, 13); + this.labelPFDZ.TabIndex = 4; + this.labelPFDZ.Text = "value"; + // + // label27 + // + this.label27.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label27.AutoSize = true; + this.label27.Location = new System.Drawing.Point(3, 1); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(31, 13); + this.label27.TabIndex = 1; + this.label27.Text = "Total"; + // + // label28 + // + this.label28.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label28.AutoSize = true; + this.label28.Location = new System.Drawing.Point(3, 33); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(53, 13); + this.label28.TabIndex = 1; + this.label28.Text = "Transition"; + // + // labelPFTotal + // + this.labelPFTotal.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelPFTotal.AutoSize = true; + this.labelPFTotal.Location = new System.Drawing.Point(153, 1); + this.labelPFTotal.Name = "labelPFTotal"; + this.labelPFTotal.Size = new System.Drawing.Size(33, 13); + this.labelPFTotal.TabIndex = 1; + this.labelPFTotal.Text = "value"; + // + // labelPFTrans + // + this.labelPFTrans.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelPFTrans.AutoSize = true; + this.labelPFTrans.Location = new System.Drawing.Point(153, 33); + this.labelPFTrans.Name = "labelPFTrans"; + this.labelPFTrans.Size = new System.Drawing.Size(33, 13); + this.labelPFTrans.TabIndex = 1; + this.labelPFTrans.Text = "value"; + // + // label31 + // + this.label31.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label31.AutoSize = true; + this.label31.Location = new System.Drawing.Point(3, 17); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(76, 13); + this.label31.TabIndex = 1; + this.label31.Text = "Copy-On-Write"; + // + // labelPFCOW + // + this.labelPFCOW.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelPFCOW.AutoSize = true; + this.labelPFCOW.Location = new System.Drawing.Point(153, 17); + this.labelPFCOW.Name = "labelPFCOW"; + this.labelPFCOW.Size = new System.Drawing.Size(33, 13); + this.labelPFCOW.TabIndex = 1; + this.labelPFCOW.Text = "value"; + // + // labelPFCacheTrans + // + this.labelPFCacheTrans.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelPFCacheTrans.AutoSize = true; + this.labelPFCacheTrans.Location = new System.Drawing.Point(153, 49); + this.labelPFCacheTrans.Name = "labelPFCacheTrans"; + this.labelPFCacheTrans.Size = new System.Drawing.Size(33, 13); + this.labelPFCacheTrans.TabIndex = 2; + this.labelPFCacheTrans.Text = "value"; + // + // groupBox9 + // + this.groupBox9.Controls.Add(this.tableLayoutPanel7); + this.groupBox9.Location = new System.Drawing.Point(405, 130); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(195, 121); + this.groupBox9.TabIndex = 7; + this.groupBox9.TabStop = false; + this.groupBox9.Text = "I/O"; + // + // tableLayoutPanel7 + // + this.tableLayoutPanel7.ColumnCount = 2; + this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel7.Controls.Add(this.label16, 0, 5); + this.tableLayoutPanel7.Controls.Add(this.labelIOOB, 0, 5); + this.tableLayoutPanel7.Controls.Add(this.label22, 0, 4); + this.tableLayoutPanel7.Controls.Add(this.label26, 0, 3); + this.tableLayoutPanel7.Controls.Add(this.labelIOO, 0, 4); + this.tableLayoutPanel7.Controls.Add(this.label30, 0, 0); + this.tableLayoutPanel7.Controls.Add(this.label32, 0, 2); + this.tableLayoutPanel7.Controls.Add(this.labelIOR, 1, 0); + this.tableLayoutPanel7.Controls.Add(this.labelIOW, 1, 2); + this.tableLayoutPanel7.Controls.Add(this.label35, 0, 1); + this.tableLayoutPanel7.Controls.Add(this.labelIORB, 1, 1); + this.tableLayoutPanel7.Controls.Add(this.labelIOWB, 1, 3); + this.tableLayoutPanel7.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel7.Location = new System.Drawing.Point(3, 16); + this.tableLayoutPanel7.Name = "tableLayoutPanel7"; + this.tableLayoutPanel7.RowCount = 6; + this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel7.Size = new System.Drawing.Size(189, 102); + this.tableLayoutPanel7.TabIndex = 1; + // + // label16 + // + this.label16.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(3, 84); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(62, 13); + this.label16.TabIndex = 7; + this.label16.Text = "Other Bytes"; + // + // labelIOOB + // + this.labelIOOB.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelIOOB.AutoSize = true; + this.labelIOOB.Location = new System.Drawing.Point(153, 84); + this.labelIOOB.Name = "labelIOOB"; + this.labelIOOB.Size = new System.Drawing.Size(33, 13); + this.labelIOOB.TabIndex = 6; + this.labelIOOB.Text = "value"; + // + // label22 + // + this.label22.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(3, 65); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(33, 13); + this.label22.TabIndex = 5; + this.label22.Text = "Other"; + // + // label26 + // + this.label26.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label26.AutoSize = true; + this.label26.Location = new System.Drawing.Point(3, 49); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(61, 13); + this.label26.TabIndex = 3; + this.label26.Text = "Write Bytes"; + // + // labelIOO + // + this.labelIOO.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelIOO.AutoSize = true; + this.labelIOO.Location = new System.Drawing.Point(153, 65); + this.labelIOO.Name = "labelIOO"; + this.labelIOO.Size = new System.Drawing.Size(33, 13); + this.labelIOO.TabIndex = 4; + this.labelIOO.Text = "value"; + // + // label30 + // + this.label30.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label30.AutoSize = true; + this.label30.Location = new System.Drawing.Point(3, 1); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(38, 13); + this.label30.TabIndex = 1; + this.label30.Text = "Reads"; + // + // label32 + // + this.label32.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label32.AutoSize = true; + this.label32.Location = new System.Drawing.Point(3, 33); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(37, 13); + this.label32.TabIndex = 1; + this.label32.Text = "Writes"; + // + // labelIOR + // + this.labelIOR.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelIOR.AutoSize = true; + this.labelIOR.Location = new System.Drawing.Point(153, 1); + this.labelIOR.Name = "labelIOR"; + this.labelIOR.Size = new System.Drawing.Size(33, 13); + this.labelIOR.TabIndex = 1; + this.labelIOR.Text = "value"; + // + // labelIOW + // + this.labelIOW.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelIOW.AutoSize = true; + this.labelIOW.Location = new System.Drawing.Point(153, 33); + this.labelIOW.Name = "labelIOW"; + this.labelIOW.Size = new System.Drawing.Size(33, 13); + this.labelIOW.TabIndex = 1; + this.labelIOW.Text = "value"; + // + // label35 + // + this.label35.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label35.AutoSize = true; + this.label35.Location = new System.Drawing.Point(3, 17); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(62, 13); + this.label35.TabIndex = 1; + this.label35.Text = "Read Bytes"; + // + // labelIORB + // + this.labelIORB.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelIORB.AutoSize = true; + this.labelIORB.Location = new System.Drawing.Point(153, 17); + this.labelIORB.Name = "labelIORB"; + this.labelIORB.Size = new System.Drawing.Size(33, 13); + this.labelIORB.TabIndex = 1; + this.labelIORB.Text = "value"; + // + // labelIOWB + // + this.labelIOWB.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelIOWB.AutoSize = true; + this.labelIOWB.Location = new System.Drawing.Point(153, 49); + this.labelIOWB.Name = "labelIOWB"; + this.labelIOWB.Size = new System.Drawing.Size(33, 13); + this.labelIOWB.TabIndex = 2; + this.labelIOWB.Text = "value"; + // // plotterMemory // this.plotterMemory.BackColor = System.Drawing.Color.Black; @@ -135,14 +1125,14 @@ this.plotterMemory.Location = new System.Drawing.Point(3, 16); this.plotterMemory.MoveStep = 3; this.plotterMemory.Name = "plotterMemory"; - this.plotterMemory.Size = new System.Drawing.Size(700, 91); + this.plotterMemory.Size = new System.Drawing.Size(806, 40); this.plotterMemory.TabIndex = 5; this.plotterMemory.TextBoxColor = System.Drawing.Color.FromArgb(((int)(((byte)(127)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); this.plotterMemory.TextColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(255)))), ((int)(((byte)(0))))); this.plotterMemory.TextMargin = new System.Windows.Forms.Padding(3); this.plotterMemory.TextPadding = new System.Windows.Forms.Padding(3); this.plotterMemory.TextPosition = System.Drawing.ContentAlignment.TopLeft; - this.plotterMemory.UseSecondLine = false; + this.plotterMemory.UseSecondLine = true; // // plotterIO // @@ -156,14 +1146,14 @@ this.plotterIO.Location = new System.Drawing.Point(3, 16); this.plotterIO.MoveStep = 3; this.plotterIO.Name = "plotterIO"; - this.plotterIO.Size = new System.Drawing.Size(700, 90); + this.plotterIO.Size = new System.Drawing.Size(806, 40); this.plotterIO.TabIndex = 5; this.plotterIO.TextBoxColor = System.Drawing.Color.FromArgb(((int)(((byte)(127)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); this.plotterIO.TextColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(255)))), ((int)(((byte)(0))))); this.plotterIO.TextMargin = new System.Windows.Forms.Padding(3); this.plotterIO.TextPadding = new System.Windows.Forms.Padding(3); this.plotterIO.TextPosition = System.Drawing.ContentAlignment.TopLeft; - this.plotterIO.UseSecondLine = false; + this.plotterIO.UseSecondLine = true; // // plotterCPU // @@ -177,31 +1167,147 @@ this.plotterCPU.Location = new System.Drawing.Point(3, 16); this.plotterCPU.MoveStep = 3; this.plotterCPU.Name = "plotterCPU"; - this.plotterCPU.Size = new System.Drawing.Size(700, 90); + this.plotterCPU.Size = new System.Drawing.Size(806, 40); this.plotterCPU.TabIndex = 0; this.plotterCPU.TextBoxColor = System.Drawing.Color.FromArgb(((int)(((byte)(127)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); this.plotterCPU.TextColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(255)))), ((int)(((byte)(0))))); this.plotterCPU.TextMargin = new System.Windows.Forms.Padding(3); this.plotterCPU.TextPadding = new System.Windows.Forms.Padding(3); this.plotterCPU.TextPosition = System.Drawing.ContentAlignment.TopLeft; - this.plotterCPU.UseSecondLine = false; + this.plotterCPU.UseSecondLine = true; + // + // groupBox10 + // + this.groupBox10.Controls.Add(this.tableLayoutPanel8); + this.groupBox10.Location = new System.Drawing.Point(606, 3); + this.groupBox10.Name = "groupBox10"; + this.groupBox10.Size = new System.Drawing.Size(195, 76); + this.groupBox10.TabIndex = 8; + this.groupBox10.TabStop = false; + this.groupBox10.Text = "CPU"; + // + // tableLayoutPanel8 + // + this.tableLayoutPanel8.ColumnCount = 2; + this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel8.Controls.Add(this.label37, 0, 0); + this.tableLayoutPanel8.Controls.Add(this.label38, 0, 2); + this.tableLayoutPanel8.Controls.Add(this.labelCPUContextSwitches, 1, 0); + this.tableLayoutPanel8.Controls.Add(this.labelCPUSystemCalls, 1, 2); + this.tableLayoutPanel8.Controls.Add(this.label41, 0, 1); + this.tableLayoutPanel8.Controls.Add(this.labelCPUInterrupts, 1, 1); + this.tableLayoutPanel8.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel8.Location = new System.Drawing.Point(3, 16); + this.tableLayoutPanel8.Name = "tableLayoutPanel8"; + this.tableLayoutPanel8.RowCount = 3; + this.tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanel8.Size = new System.Drawing.Size(189, 57); + this.tableLayoutPanel8.TabIndex = 1; + // + // label37 + // + this.label37.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label37.AutoSize = true; + this.label37.Location = new System.Drawing.Point(3, 3); + this.label37.Name = "label37"; + this.label37.Size = new System.Drawing.Size(89, 13); + this.label37.TabIndex = 1; + this.label37.Text = "Context Switches"; + // + // label38 + // + this.label38.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label38.AutoSize = true; + this.label38.Location = new System.Drawing.Point(3, 41); + this.label38.Name = "label38"; + this.label38.Size = new System.Drawing.Size(66, 13); + this.label38.TabIndex = 1; + this.label38.Text = "System Calls"; + // + // labelCPUContextSwitches + // + this.labelCPUContextSwitches.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelCPUContextSwitches.AutoSize = true; + this.labelCPUContextSwitches.Location = new System.Drawing.Point(153, 3); + this.labelCPUContextSwitches.Name = "labelCPUContextSwitches"; + this.labelCPUContextSwitches.Size = new System.Drawing.Size(33, 13); + this.labelCPUContextSwitches.TabIndex = 1; + this.labelCPUContextSwitches.Text = "value"; + // + // labelCPUSystemCalls + // + this.labelCPUSystemCalls.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelCPUSystemCalls.AutoSize = true; + this.labelCPUSystemCalls.Location = new System.Drawing.Point(153, 41); + this.labelCPUSystemCalls.Name = "labelCPUSystemCalls"; + this.labelCPUSystemCalls.Size = new System.Drawing.Size(33, 13); + this.labelCPUSystemCalls.TabIndex = 1; + this.labelCPUSystemCalls.Text = "value"; + // + // label41 + // + this.label41.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label41.AutoSize = true; + this.label41.Location = new System.Drawing.Point(3, 22); + this.label41.Name = "label41"; + this.label41.Size = new System.Drawing.Size(51, 13); + this.label41.TabIndex = 1; + this.label41.Text = "Interrupts"; + // + // labelCPUInterrupts + // + this.labelCPUInterrupts.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelCPUInterrupts.AutoSize = true; + this.labelCPUInterrupts.Location = new System.Drawing.Point(153, 22); + this.labelCPUInterrupts.Name = "labelCPUInterrupts"; + this.labelCPUInterrupts.Size = new System.Drawing.Size(33, 13); + this.labelCPUInterrupts.TabIndex = 1; + this.labelCPUInterrupts.Text = "value"; // // SysInfoWindow // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(736, 549); + this.ClientSize = new System.Drawing.Size(842, 509); + this.Controls.Add(this.flowInfo); this.Controls.Add(this.tableGraphs); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "SysInfoWindow"; this.Text = "System Information"; - this.Load += new System.EventHandler(this.SysInfoWindow_Load); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.SysInfoWindow_FormClosing); this.gboxCPUPlotter.ResumeLayout(false); this.tableGraphs.ResumeLayout(false); this.tableGraphs.PerformLayout(); this.groupBox1.ResumeLayout(false); this.groupBox2.ResumeLayout(false); + this.flowInfo.ResumeLayout(false); + this.groupBox3.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.groupBox4.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.groupBox5.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel3.PerformLayout(); + this.groupBox6.ResumeLayout(false); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.groupBox7.ResumeLayout(false); + this.tableLayoutPanel5.ResumeLayout(false); + this.tableLayoutPanel5.PerformLayout(); + this.groupBox8.ResumeLayout(false); + this.tableLayoutPanel6.ResumeLayout(false); + this.tableLayoutPanel6.PerformLayout(); + this.groupBox9.ResumeLayout(false); + this.tableLayoutPanel7.ResumeLayout(false); + this.tableLayoutPanel7.PerformLayout(); + this.groupBox10.ResumeLayout(false); + this.tableLayoutPanel8.ResumeLayout(false); + this.tableLayoutPanel8.PerformLayout(); this.ResumeLayout(false); } @@ -217,5 +1323,90 @@ private ProcessHacker.Components.Plotter plotterIO; private System.Windows.Forms.GroupBox groupBox1; private ProcessHacker.Components.Plotter plotterMemory; + private System.Windows.Forms.FlowLayoutPanel flowInfo; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label labelTotalsProcesses; + private System.Windows.Forms.Label labelTotalsThreads; + private System.Windows.Forms.Label labelTotalsHandles; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label labelCCC; + private System.Windows.Forms.Label labelCCP; + private System.Windows.Forms.Label labelCCL; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label labelPMC; + private System.Windows.Forms.Label labelPMT; + private System.Windows.Forms.GroupBox groupBox6; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label labelCacheCurrent; + private System.Windows.Forms.Label labelCachePeak; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label labelCacheMaximum; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label labelCacheMinimum; + private System.Windows.Forms.GroupBox groupBox7; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label labelKPNPU; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label labelKPPF; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label labelKPPPU; + private System.Windows.Forms.Label labelKPPA; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label labelKPNPF; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.Label labelKPNPA; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label labelKPPVU; + private System.Windows.Forms.GroupBox groupBox8; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel6; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.Label labelPFCache; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.Label labelPFDZ; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.Label labelPFTotal; + private System.Windows.Forms.Label labelPFTrans; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.Label labelPFCOW; + private System.Windows.Forms.Label labelPFCacheTrans; + private System.Windows.Forms.GroupBox groupBox9; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel7; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label labelIOOB; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.Label labelIOO; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.Label labelIOR; + private System.Windows.Forms.Label labelIOW; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.Label labelIORB; + private System.Windows.Forms.Label labelIOWB; + private System.Windows.Forms.GroupBox groupBox10; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel8; + private System.Windows.Forms.Label label37; + private System.Windows.Forms.Label label38; + private System.Windows.Forms.Label labelCPUContextSwitches; + private System.Windows.Forms.Label labelCPUSystemCalls; + private System.Windows.Forms.Label label41; + private System.Windows.Forms.Label labelCPUInterrupts; } } \ No newline at end of file diff --git a/trunk/ProcessHacker/Forms/SysInfoWindow.cs b/trunk/ProcessHacker/Forms/SysInfoWindow.cs index 3308fdf9e..0af916c80 100644 --- a/trunk/ProcessHacker/Forms/SysInfoWindow.cs +++ b/trunk/ProcessHacker/Forms/SysInfoWindow.cs @@ -32,6 +32,7 @@ namespace ProcessHacker { private Components.Plotter[] _cpuPlotters; private int _noOfCPUs = Program.HackerWindow.ProcessProvider.System.NumberOfProcessors; + private int _pages = Program.HackerWindow.ProcessProvider.System.NumberOfPhysicalPages; private int _pageSize = Program.HackerWindow.ProcessProvider.System.PageSize; private DeltaManager _deltaManager = new DeltaManager(new Int64Subtractor()); private int _runCount = 0; @@ -40,9 +41,8 @@ namespace ProcessHacker { InitializeComponent(); - plotterCPU.UseSecondLine = true; - - // intializse delta manager + // intialize delta manager + _deltaManager.Add("clock", (long)Win32.GetTickCount() * 10000); _deltaManager.Add("cpu_kernel", 0); _deltaManager.Add("cpu_user", 0); _deltaManager.Add("cpu_other", 0); @@ -62,6 +62,7 @@ namespace ProcessHacker tableCPUs.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 1.0f / _noOfCPUs)); _cpuPlotters[i] = new ProcessHacker.Components.Plotter(); _cpuPlotters[i].BackColor = Color.Black; + _cpuPlotters[i].Dock = DockStyle.Fill; _cpuPlotters[i].UseSecondLine = true; tableCPUs.Controls.Add(_cpuPlotters[i], i, 0); @@ -69,14 +70,17 @@ namespace ProcessHacker _deltaManager.Add("cpu_" + i.ToString() + "_user", 0); _deltaManager.Add("cpu_" + i.ToString() + "_other", 0); } + + tableCPUs.Visible = true; + tableCPUs.Visible = false; + checkShowOneGraphPerCPU.Checked = Properties.Settings.Default.ShowOneGraphPerCPU; } - private void SysInfoWindow_Load(object sender, EventArgs e) + public void Start() { _runCount = 0; - checkShowOneGraphPerCPU.Checked = Properties.Settings.Default.ShowOneGraphPerCPU; Program.HackerWindow.ProcessProvider.PerformanceEnabled = true; - Program.HackerWindow.ProcessProvider.Updated += + Program.HackerWindow.ProcessProvider.Updated += new ProcessSystemProvider.ProviderUpdateOnce(ProcessProvider_Updated); } @@ -91,7 +95,22 @@ namespace ProcessHacker this.Hide(); } - private void UpdateInfo() + private void UpdateDeltas() + { + Win32.SYSTEM_PERFORMANCE_INFORMATION perfInfo = Program.HackerWindow.ProcessProvider.Performance; + + _deltaManager.Update("cpu_kernel", Program.HackerWindow.ProcessProvider.ProcessorPerf.KernelTime); + _deltaManager.Update("cpu_user", Program.HackerWindow.ProcessProvider.ProcessorPerf.UserTime); + _deltaManager.Update("cpu_other", Program.HackerWindow.ProcessProvider.ProcessorPerf.IdleTime + + Program.HackerWindow.ProcessProvider.ProcessorPerf.DpcTime + + Program.HackerWindow.ProcessProvider.ProcessorPerf.InterruptTime); + _deltaManager.Update("contextswitches", perfInfo.ContextSwitches); + _deltaManager.Update("io_r", perfInfo.IoReadTransferCount); + _deltaManager.Update("io_w", perfInfo.IoWriteTransferCount); + _deltaManager.Update("io_o", perfInfo.IoOtherTransferCount); + } + + private void UpdateGraphs() { Win32.SYSTEM_PERFORMANCE_INFORMATION perfInfo = Program.HackerWindow.ProcessProvider.Performance; @@ -102,17 +121,7 @@ namespace ProcessHacker plotterMemory.LineColor1 = Properties.Settings.Default.PlotterMemoryPrivateColor; plotterMemory.LineColor2 = Properties.Settings.Default.PlotterMemoryWSColor; - _deltaManager.Update("cpu_kernel", Program.HackerWindow.ProcessProvider.ProcessorPerf.KernelTime); - _deltaManager.Update("cpu_user", Program.HackerWindow.ProcessProvider.ProcessorPerf.UserTime); - _deltaManager.Update("cpu_other", Program.HackerWindow.ProcessProvider.ProcessorPerf.IdleTime + - Program.HackerWindow.ProcessProvider.ProcessorPerf.DpcTime + - Program.HackerWindow.ProcessProvider.ProcessorPerf.InterruptTime); - _deltaManager.Update("contextswitches", perfInfo.ContextSwitches); - _runCount++; - - if (_runCount < 1) - return; - + // update the CPU graph long sysKernel = _deltaManager.GetDelta("cpu_kernel"); long sysUser = _deltaManager.GetDelta("cpu_user"); long sysOther = _deltaManager.GetDelta("cpu_other"); @@ -124,6 +133,7 @@ namespace ProcessHacker "% (K: " + (kernelUsage * 100).ToString("F2") + "%, U: " + (userUsage * 100).ToString("F2") + "%)"; + // update the individual CPU graphs for (int i = 0; i < _noOfCPUs; i++) { _cpuPlotters[i].LineColor1 = Properties.Settings.Default.PlotterCPUKernelColor; @@ -149,11 +159,97 @@ namespace ProcessHacker "% (K: " + (cpuKernelUsage * 100).ToString("F2") + "%, U: " + (cpuUserUsage * 100).ToString("F2") + "%)"; } + + // this hack is needed for some reason + if (_runCount < 4) + { + _deltaManager.SetDelta("io_r", 0); + _deltaManager.SetDelta("io_w", 0); + _deltaManager.SetDelta("io_o", 0); + } + + // update the I/O graph + long ioR = _deltaManager.GetDelta("io_r"); + long ioW = _deltaManager.GetDelta("io_w"); + long ioO = _deltaManager.GetDelta("io_o"); + plotterIO.Add(ioR + ioO, ioW); + plotterIO.Text = "R+O: " + Misc.GetNiceSizeName(ioR + ioO) + + ", W: " + Misc.GetNiceSizeName(ioW); + + // update the memory graph + long commitSize = perfInfo.CommittedPages * _pageSize; + long physMemoryUsage = (_pages - perfInfo.AvailablePages) * _pageSize; + plotterMemory.Add(commitSize, physMemoryUsage); + plotterMemory.Text = "Commit: " + Misc.GetNiceSizeName(commitSize) + + ", Phys. Mem: " + Misc.GetNiceSizeName(physMemoryUsage); + + _runCount++; + } + + private void UpdateInfo() + { + Win32.SYSTEM_PERFORMANCE_INFORMATION perfInfo = Program.HackerWindow.ProcessProvider.Performance; + Win32.PERFORMANCE_INFORMATION info = new Win32.PERFORMANCE_INFORMATION(); + + Win32.GetPerformanceInfo(ref info, System.Runtime.InteropServices.Marshal.SizeOf(info)); + + Win32.SYSTEM_CACHE_INFORMATION cacheInfo = new Win32.SYSTEM_CACHE_INFORMATION(); + int retLen; + + Win32.ZwQuerySystemInformation(Win32.SYSTEM_INFORMATION_CLASS.SystemCacheInformation, + ref cacheInfo, System.Runtime.InteropServices.Marshal.SizeOf(cacheInfo), out retLen); + + labelTotalsProcesses.Text = info.ProcessCount.ToString("N0"); + labelTotalsThreads.Text = info.ThreadCount.ToString("N0"); + labelTotalsHandles.Text = info.HandlesCount.ToString("N0"); + + labelCCC.Text = Misc.GetNiceSizeName(perfInfo.CommittedPages * _pageSize); + labelCCP.Text = Misc.GetNiceSizeName(perfInfo.PeakCommitment * _pageSize); + labelCCL.Text = Misc.GetNiceSizeName(perfInfo.CommitLimit * _pageSize); + + labelPMC.Text = Misc.GetNiceSizeName((_pages - perfInfo.AvailablePages) * _pageSize); + labelPMT.Text = Misc.GetNiceSizeName(_pages * _pageSize); + + labelCacheCurrent.Text = Misc.GetNiceSizeName(cacheInfo.SystemCacheWsSize); + labelCachePeak.Text = Misc.GetNiceSizeName(cacheInfo.SystemCacheWsPeakSize); + labelCacheMinimum.Text = Misc.GetNiceSizeName(cacheInfo.SystemCacheWsMinimum * _pageSize); + labelCacheMaximum.Text = Misc.GetNiceSizeName(cacheInfo.SystemCacheWsMaximum * _pageSize); + + labelKPPPU.Text = Misc.GetNiceSizeName(perfInfo.PagedPoolPages * _pageSize); + labelKPPVU.Text = Misc.GetNiceSizeName(perfInfo.PagedPoolUsage * _pageSize); + labelKPPA.Text = perfInfo.PagedPoolAllocs.ToString("N0"); + labelKPPF.Text = perfInfo.PagedPoolFrees.ToString("N0"); + labelKPNPU.Text = Misc.GetNiceSizeName(perfInfo.NonPagedPoolUsage * _pageSize); + labelKPNPA.Text = perfInfo.NonPagedPoolAllocs.ToString("N0"); + labelKPNPF.Text = perfInfo.NonPagedPoolFrees.ToString("N0"); + + labelPFTotal.Text = perfInfo.PageFaults.ToString("N0"); + labelPFCOW.Text = perfInfo.CopyOnWriteFaults.ToString("N0"); + labelPFTrans.Text = perfInfo.TransitionFaults.ToString("N0"); + labelPFCacheTrans.Text = perfInfo.CacheTransitionFaults.ToString("N0"); + labelPFDZ.Text = perfInfo.CacheTransitionFaults.ToString("N0"); + labelPFCache.Text = cacheInfo.SystemCacheWsFaults.ToString("N0"); + + labelIOR.Text = perfInfo.IoReadOperationCount.ToString("N0"); + labelIORB.Text = Misc.GetNiceSizeName(perfInfo.IoReadTransferCount); + labelIOW.Text = perfInfo.IoWriteOperationCount.ToString("N0"); + labelIOWB.Text = Misc.GetNiceSizeName(perfInfo.IoWriteTransferCount); + labelIOO.Text = perfInfo.IoOtherOperationCount.ToString("N0"); + labelIOOB.Text = Misc.GetNiceSizeName(perfInfo.IoOtherTransferCount); + + labelCPUContextSwitches.Text = perfInfo.ContextSwitches.ToString("N0"); + labelCPUInterrupts.Text = Program.HackerWindow.ProcessProvider.ProcessorPerf.InterruptCount.ToString("N0"); + labelCPUSystemCalls.Text = perfInfo.SystemCalls.ToString("N0"); } private void ProcessProvider_Updated() { - this.BeginInvoke(new MethodInvoker(this.UpdateInfo)); + this.BeginInvoke(new MethodInvoker(delegate + { + this.UpdateDeltas(); + this.UpdateGraphs(); + this.UpdateInfo(); + })); } private void checkShowOneGraphPerCPU_CheckedChanged(object sender, EventArgs e) diff --git a/trunk/ProcessHacker/Misc/DeltaManager.cs b/trunk/ProcessHacker/Misc/DeltaManager.cs index 1df3f2674..4c9178d6c 100644 --- a/trunk/ProcessHacker/Misc/DeltaManager.cs +++ b/trunk/ProcessHacker/Misc/DeltaManager.cs @@ -95,6 +95,11 @@ namespace ProcessHacker _deltas.Add(key, initialValue); } + public void SetDelta(TKey key, TValue value) + { + _deltas[key] = value; + } + public TValue Update(TKey key, TValue value) { _deltas[key] = _subtractor.Subtract(value, _values[key]); diff --git a/trunk/ProcessHacker/Misc/Misc.cs b/trunk/ProcessHacker/Misc/Misc.cs index 256506896..485aaac00 100644 --- a/trunk/ProcessHacker/Misc/Misc.cs +++ b/trunk/ProcessHacker/Misc/Misc.cs @@ -32,6 +32,8 @@ namespace ProcessHacker { #region Constants + public static string[] SizeUnitNames = { "B", "kB", "MB", "GB", "TB", "PB", "EB" }; + public static string[] DangerousNames = { "csrss.exe", "dwm.exe", "lsass.exe", "lsm.exe", "services.exe", "smss.exe", "wininit.exe", "winlogon.exe" }; @@ -188,17 +190,7 @@ namespace ProcessHacker /// public static string GetNiceSizeName(long size) { - string[] names = { "B", "kB", "MB", "GB", "TB", "PB", "EB" }; - int i = 0; - decimal s = (decimal)size; - - while (s > 1024 && i < names.Length) - { - s /= 1024; - i++; - } - - return String.Format("{0:f2}", s) + " " + names[i]; + return GetNiceSizeName((ulong)size); } /// @@ -208,17 +200,16 @@ namespace ProcessHacker /// public static string GetNiceSizeName(ulong size) { - string[] names = { "B", "kB", "MB", "GB", "TB", "PB", "EB" }; int i = 0; decimal s = (decimal)size; - while (s > 1024 && i < names.Length) + while (s > 1024 && i < SizeUnitNames.Length && i < Properties.Settings.Default.UnitSpecifier) { s /= 1024; i++; } - return String.Format("{0:f2}", s) + " " + names[i]; + return String.Format("{0:f2}", s) + " " + SizeUnitNames[i]; } /// diff --git a/trunk/ProcessHacker/Properties/Settings.Designer.cs b/trunk/ProcessHacker/Properties/Settings.Designer.cs index eed51b0e8..3e2faa238 100644 --- a/trunk/ProcessHacker/Properties/Settings.Designer.cs +++ b/trunk/ProcessHacker/Properties/Settings.Designer.cs @@ -826,5 +826,17 @@ namespace ProcessHacker.Properties { this["ShowOneGraphPerCPU"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("6")] + public int UnitSpecifier { + get { + return ((int)(this["UnitSpecifier"])); + } + set { + this["UnitSpecifier"] = value; + } + } } } diff --git a/trunk/ProcessHacker/Properties/Settings.settings b/trunk/ProcessHacker/Properties/Settings.settings index 2bca13c60..27dcd0939 100644 --- a/trunk/ProcessHacker/Properties/Settings.settings +++ b/trunk/ProcessHacker/Properties/Settings.settings @@ -203,5 +203,8 @@ False + + 6 + \ No newline at end of file diff --git a/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs b/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs index 0b3688aa6..f7bba0e26 100644 --- a/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs +++ b/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs @@ -98,31 +98,33 @@ namespace ProcessHacker Win32.ZwQuerySystemInformation(Win32.SYSTEM_INFORMATION_CLASS.SystemProcessorTimes, data, data.Size, out retLen); - var newAverages = new Win32.SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION(); + var newSums = new Win32.SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION(); + // Thanks to: + // http://www.netperf.org/svn/netperf2/trunk/src/netcpu_ntperf.c + // for the critical information: + // "KernelTime needs to be fixed-up; it includes both idle & true kernel time". + // This is why I love free software. for (int i = 0; i < this.ProcessorPerfArray.Length; i++) { - this.ProcessorPerfArray[i] = data.ReadStruct( - i); - newAverages.DpcTime += this.ProcessorPerfArray[i].DpcTime - / this.ProcessorPerfArray.Length; - newAverages.IdleTime += this.ProcessorPerfArray[i].IdleTime - / this.ProcessorPerfArray.Length; - newAverages.InterruptCount += this.ProcessorPerfArray[i].InterruptCount - / this.ProcessorPerfArray.Length; - newAverages.InterruptTime += this.ProcessorPerfArray[i].InterruptTime - / this.ProcessorPerfArray.Length; - newAverages.KernelTime += this.ProcessorPerfArray[i].KernelTime - / this.ProcessorPerfArray.Length; - newAverages.UserTime += this.ProcessorPerfArray[i].UserTime - / this.ProcessorPerfArray.Length; + this.ProcessorPerfArray[i] = + data.ReadStruct(i); + + this.ProcessorPerfArray[i].KernelTime -= this.ProcessorPerfArray[i].IdleTime + + this.ProcessorPerfArray[i].DpcTime + this.ProcessorPerfArray[i].InterruptTime; + newSums.DpcTime += this.ProcessorPerfArray[i].DpcTime; + newSums.IdleTime += this.ProcessorPerfArray[i].IdleTime; + newSums.InterruptCount += this.ProcessorPerfArray[i].InterruptCount; + newSums.InterruptTime += this.ProcessorPerfArray[i].InterruptTime; + newSums.KernelTime += this.ProcessorPerfArray[i].KernelTime; + newSums.UserTime += this.ProcessorPerfArray[i].UserTime; } - this.ProcessorPerf = newAverages; + this.ProcessorPerf = newSums; } } - private void UpdatePerformance() + public void UpdatePerformance() { if (!this.PerformanceEnabled) return; @@ -160,7 +162,7 @@ namespace ProcessHacker { Win32.SystemProcess proc = procs[0]; - proc.Process.KernelTime = this.ProcessorPerf.IdleTime * this.System.NumberOfProcessors; + proc.Process.KernelTime = this.ProcessorPerf.IdleTime; procs.Remove(0); procs.Add(0, proc); } @@ -172,7 +174,7 @@ namespace ProcessHacker { ProcessId = -2, InheritedFromProcessId = 0, - KernelTime = this.ProcessorPerf.DpcTime * this.System.NumberOfProcessors, + KernelTime = this.ProcessorPerf.DpcTime, SessionId = -1 } }); @@ -184,7 +186,7 @@ namespace ProcessHacker { ProcessId = -3, InheritedFromProcessId = 0, - KernelTime = this.ProcessorPerf.InterruptTime * this.System.NumberOfProcessors, + KernelTime = this.ProcessorPerf.InterruptTime, SessionId = -1 } }); @@ -358,8 +360,7 @@ namespace ProcessHacker try { - newitem.CPUUsage = (float)(newitem.LastTime - item.LastTime) * 100 / sysTime / - this.System.NumberOfProcessors; + newitem.CPUUsage = (float)(newitem.LastTime - item.LastTime) * 100 / (sysTime + otherTime); if (pid != 0 && newitem.CPUUsage > mostCPUUsage) { @@ -412,7 +413,7 @@ namespace ProcessHacker } if (thisSysTime != 0) - this.CurrentCPUUsage = (float)(sysTime - otherTime) / sysTime; + this.CurrentCPUUsage = (float)sysTime / (sysTime + otherTime); Dictionary = newdictionary; diff --git a/trunk/ProcessHacker/Structs/StructParser.cs b/trunk/ProcessHacker/Structs/StructParser.cs index c328a4fff..54b36741b 100644 --- a/trunk/ProcessHacker/Structs/StructParser.cs +++ b/trunk/ProcessHacker/Structs/StructParser.cs @@ -99,6 +99,12 @@ namespace ProcessHacker.Structs if (_eatResult || includeFile == "") throw new ParserException(_fileName, _lineNumber, "String expected (file name)"); + _eatResult = EatWhitespace(text, ref i); + string endSemicolon = EatSymbol(text, ref i); + + if (_eatResult || endSemicolon != ";") + throw new ParserException(_fileName, _lineNumber, "Expected ';'"); + System.IO.FileInfo info = new System.IO.FileInfo(_fileName); // if the filename contains ':', use the absolute path. otherwise, append it to the diff --git a/trunk/ProcessHacker/Win32/API/Functions.cs b/trunk/ProcessHacker/Win32/API/Functions.cs index 39acb1f08..d39091421 100644 --- a/trunk/ProcessHacker/Win32/API/Functions.cs +++ b/trunk/ProcessHacker/Win32/API/Functions.cs @@ -97,6 +97,9 @@ namespace ProcessHacker #region Misc. + [DllImport("kernel32.dll")] + public static extern int GetTickCount(); + #endregion #region Processes @@ -626,6 +629,10 @@ namespace ProcessHacker public static extern uint ZwQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass, ref SYSTEM_BASIC_INFORMATION SystemInformation, int SystemInformationLength, out int ReturnLength); + [DllImport("ntdll.dll", SetLastError = true)] + public static extern uint ZwQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass, + ref SYSTEM_CACHE_INFORMATION SystemInformation, int SystemInformationLength, out int ReturnLength); + [DllImport("ntdll.dll", SetLastError = true)] public static extern uint ZwQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass, ref SYSTEM_PERFORMANCE_INFORMATION SystemInformation, int SystemInformationLength, out int ReturnLength); diff --git a/trunk/ProcessHacker/Win32/API/Structs.cs b/trunk/ProcessHacker/Win32/API/Structs.cs index 47adab062..0503fc1c7 100644 --- a/trunk/ProcessHacker/Win32/API/Structs.cs +++ b/trunk/ProcessHacker/Win32/API/Structs.cs @@ -346,7 +346,7 @@ namespace ProcessHacker public int HandlesCount; public int ProcessCount; - public int ThreadCouont; + public int ThreadCount; } [StructLayout(LayoutKind.Sequential)] @@ -623,6 +623,31 @@ namespace ProcessHacker public byte NumberOfProcessors; } + [StructLayout(LayoutKind.Sequential)] + public struct SYSTEM_CACHE_INFORMATION + { + /// + /// The size of the system working set, in bytes. + /// + public int SystemCacheWsSize; + public int SystemCacheWsPeakSize; + public int SystemCacheWsFaults; + + /// + /// Measured in pages. + /// + public int SystemCacheWsMinimum; + + /// + /// Measured in pages. + /// + public int SystemCacheWsMaximum; + public int TransitionSharedPages; + public int TransitionSharedPagesPeak; + public int Reserved1; + public int Reserved2; + } + [StructLayout(LayoutKind.Sequential)] public struct SYSTEM_HANDLE_INFORMATION { diff --git a/trunk/ProcessHacker/app.config b/trunk/ProcessHacker/app.config index fdd41e35f..4b70bfcb8 100644 --- a/trunk/ProcessHacker/app.config +++ b/trunk/ProcessHacker/app.config @@ -208,6 +208,9 @@ False + + 6 + \ No newline at end of file diff --git a/trunk/ProcessHacker/structs.txt b/trunk/ProcessHacker/structs.txt index e9d8d2087..33d77186c 100644 --- a/trunk/ProcessHacker/structs.txt +++ b/trunk/ProcessHacker/structs.txt @@ -5,7 +5,7 @@ * wj32. */ -include "base.txt" +include "base.txt"; typedef int handle; typedef int NTSTATUS; /* no enum support *yet* */ diff --git a/trunk/README.txt b/trunk/README.txt index 1e1f111df..347315c53 100644 --- a/trunk/README.txt +++ b/trunk/README.txt @@ -34,5 +34,6 @@ Process Hacker is brought to you by the small Process Hacker team: * wj32 (Project Manager) * Dean (Developer) * Plotter + * System Information Window * Speed improvements in handle filter * Paul Pacheco (Developer) diff --git a/trunk/TreeViewAdv/Tree/Input/ResizeColumnState.cs b/trunk/TreeViewAdv/Tree/Input/ResizeColumnState.cs index cc3585cd7..486ed3d39 100644 --- a/trunk/TreeViewAdv/Tree/Input/ResizeColumnState.cs +++ b/trunk/TreeViewAdv/Tree/Input/ResizeColumnState.cs @@ -46,6 +46,7 @@ namespace Aga.Controls.Tree { Column.Width = _initWidth + args.Location.X - _initLocation.X; Tree.UpdateView(); + Tree.Invalidate(); return true; } }