181 lines
6.0 KiB
C#
181 lines
6.0 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="CounterSample.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Diagnostics {
|
|
|
|
using System.Diagnostics;
|
|
|
|
using System;
|
|
|
|
/// <devdoc>
|
|
/// A struct holding the raw data for a performance counter.
|
|
/// </devdoc>
|
|
public struct CounterSample {
|
|
private long rawValue;
|
|
private long baseValue;
|
|
private long timeStamp;
|
|
private long counterFrequency;
|
|
private PerformanceCounterType counterType;
|
|
private long timeStamp100nSec;
|
|
private long systemFrequency;
|
|
private long counterTimeStamp;
|
|
|
|
// Dummy holder for an empty sample
|
|
/// <devdoc>
|
|
/// <para>[To be supplied.]</para>
|
|
/// </devdoc>
|
|
public static CounterSample Empty = new CounterSample(0, 0, 0, 0, 0, 0, PerformanceCounterType.NumberOfItems32);
|
|
|
|
/// <devdoc>
|
|
/// <para>[To be supplied.]</para>
|
|
/// </devdoc>
|
|
public CounterSample(long rawValue, long baseValue, long counterFrequency, long systemFrequency, long timeStamp, long timeStamp100nSec, PerformanceCounterType counterType) {
|
|
this.rawValue = rawValue;
|
|
this.baseValue = baseValue;
|
|
this.timeStamp = timeStamp;
|
|
this.counterFrequency = counterFrequency;
|
|
this.counterType = counterType;
|
|
this.timeStamp100nSec = timeStamp100nSec;
|
|
this.systemFrequency = systemFrequency;
|
|
this.counterTimeStamp = 0;
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// <para>[To be supplied.]</para>
|
|
/// </devdoc>
|
|
public CounterSample(long rawValue, long baseValue, long counterFrequency, long systemFrequency, long timeStamp, long timeStamp100nSec, PerformanceCounterType counterType, long counterTimeStamp) {
|
|
this.rawValue = rawValue;
|
|
this.baseValue = baseValue;
|
|
this.timeStamp = timeStamp;
|
|
this.counterFrequency = counterFrequency;
|
|
this.counterType = counterType;
|
|
this.timeStamp100nSec = timeStamp100nSec;
|
|
this.systemFrequency = systemFrequency;
|
|
this.counterTimeStamp = counterTimeStamp;
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Raw value of the counter.
|
|
/// </devdoc>
|
|
public long RawValue {
|
|
get {
|
|
return this.rawValue;
|
|
}
|
|
}
|
|
|
|
internal ulong UnsignedRawValue {
|
|
get {
|
|
return (ulong)this.rawValue;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Optional base raw value for the counter (only used if multiple counter based).
|
|
/// </devdoc>
|
|
public long BaseValue {
|
|
get {
|
|
return this.baseValue;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Raw system frequency
|
|
/// </devdoc>
|
|
public long SystemFrequency {
|
|
get {
|
|
return this.systemFrequency;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Raw counter frequency
|
|
/// </devdoc>
|
|
public long CounterFrequency {
|
|
get {
|
|
return this.counterFrequency;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Raw counter frequency
|
|
/// </devdoc>
|
|
public long CounterTimeStamp {
|
|
get {
|
|
return this.counterTimeStamp;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Raw timestamp
|
|
/// </devdoc>
|
|
public long TimeStamp {
|
|
get {
|
|
return this.timeStamp;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Raw high fidelity timestamp
|
|
/// </devdoc>
|
|
public long TimeStamp100nSec {
|
|
get {
|
|
return this.timeStamp100nSec;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Counter type
|
|
/// </devdoc>
|
|
public PerformanceCounterType CounterType {
|
|
get {
|
|
return this.counterType;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Static functions to calculate the performance value off the sample
|
|
/// </devdoc>
|
|
public static float Calculate(CounterSample counterSample) {
|
|
return CounterSampleCalculator.ComputeCounterValue(counterSample);
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Static functions to calculate the performance value off the samples
|
|
/// </devdoc>
|
|
public static float Calculate(CounterSample counterSample, CounterSample nextCounterSample) {
|
|
return CounterSampleCalculator.ComputeCounterValue(counterSample, nextCounterSample);
|
|
}
|
|
|
|
public override bool Equals(Object o) {
|
|
return ( o is CounterSample) && Equals((CounterSample)o);
|
|
}
|
|
|
|
public bool Equals(CounterSample sample) {
|
|
return (rawValue == sample.rawValue) &&
|
|
(baseValue == sample.baseValue) &&
|
|
(timeStamp == sample.timeStamp) &&
|
|
(counterFrequency == sample.counterFrequency) &&
|
|
(counterType == sample.counterType) &&
|
|
(timeStamp100nSec == sample.timeStamp100nSec) &&
|
|
(systemFrequency == sample.systemFrequency) &&
|
|
(counterTimeStamp == sample.counterTimeStamp);
|
|
}
|
|
|
|
public override int GetHashCode() {
|
|
return rawValue.GetHashCode();
|
|
}
|
|
|
|
public static bool operator ==(CounterSample a, CounterSample b) {
|
|
return a.Equals(b);
|
|
}
|
|
|
|
public static bool operator !=(CounterSample a, CounterSample b) {
|
|
return !(a.Equals(b));
|
|
}
|
|
|
|
}
|
|
}
|