mirror of https://github.com/grpc/grpc.git
parent
ba89ad4065
commit
3267108e52
5 changed files with 105 additions and 80 deletions
@ -0,0 +1,90 @@ |
||||
#region Copyright notice and license |
||||
|
||||
// Copyright 2015 gRPC authors. |
||||
// |
||||
// Licensed under the Apache License, Version 2.0 (the "License"); |
||||
// you may not use this file except in compliance with the License. |
||||
// You may obtain a copy of the License at |
||||
// |
||||
// http://www.apache.org/licenses/LICENSE-2.0 |
||||
// |
||||
// Unless required by applicable law or agreed to in writing, software |
||||
// distributed under the License is distributed on an "AS IS" BASIS, |
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
// See the License for the specific language governing permissions and |
||||
// limitations under the License. |
||||
|
||||
#endregion |
||||
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Diagnostics; |
||||
using System.IO; |
||||
using System.Linq; |
||||
using System.Text.RegularExpressions; |
||||
using System.Threading; |
||||
using System.Threading.Tasks; |
||||
using Google.Protobuf; |
||||
using Grpc.Core; |
||||
using Grpc.Core.Utils; |
||||
using NUnit.Framework; |
||||
using Grpc.Testing; |
||||
|
||||
namespace Grpc.IntegrationTesting |
||||
{ |
||||
/// <summary> |
||||
/// Snapshottable time statistics. |
||||
/// </summary> |
||||
public class TimeStats |
||||
{ |
||||
readonly object myLock = new object(); |
||||
DateTime lastWallClock; |
||||
TimeSpan lastUserTime; |
||||
TimeSpan lastPrivilegedTime; |
||||
|
||||
public TimeStats() |
||||
{ |
||||
lastWallClock = DateTime.UtcNow; |
||||
lastUserTime = Process.GetCurrentProcess().UserProcessorTime; |
||||
lastPrivilegedTime = Process.GetCurrentProcess().PrivilegedProcessorTime; |
||||
} |
||||
|
||||
public Snapshot GetSnapshot(bool reset) |
||||
{ |
||||
lock (myLock) |
||||
{ |
||||
var wallClock = DateTime.UtcNow; |
||||
var userTime = Process.GetCurrentProcess().UserProcessorTime; |
||||
var privilegedTime = Process.GetCurrentProcess().PrivilegedProcessorTime; |
||||
var snapshot = new Snapshot(wallClock - lastWallClock, userTime - lastUserTime, privilegedTime - lastPrivilegedTime); |
||||
|
||||
if (reset) |
||||
{ |
||||
lastWallClock = wallClock; |
||||
lastUserTime = userTime; |
||||
lastPrivilegedTime = privilegedTime; |
||||
} |
||||
return snapshot; |
||||
} |
||||
} |
||||
|
||||
public class Snapshot |
||||
{ |
||||
public TimeSpan WallClockTime { get; } |
||||
public TimeSpan UserProcessorTime { get; } |
||||
public TimeSpan PrivilegedProcessorTime { get; } |
||||
|
||||
public Snapshot(TimeSpan wallClockTime, TimeSpan userProcessorTime, TimeSpan privilegedProcessorTime) |
||||
{ |
||||
this.WallClockTime = wallClockTime; |
||||
this.UserProcessorTime = userProcessorTime; |
||||
this.PrivilegedProcessorTime = privilegedProcessorTime; |
||||
} |
||||
|
||||
public override string ToString() |
||||
{ |
||||
return string.Format("[TimeStats.Snapshot: wallClock {0}, userProcessor {1}, privilegedProcessor {2}]", WallClockTime, UserProcessorTime, PrivilegedProcessorTime); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -1,63 +0,0 @@ |
||||
#region Copyright notice and license |
||||
|
||||
// Copyright 2015 gRPC authors. |
||||
// |
||||
// Licensed under the Apache License, Version 2.0 (the "License"); |
||||
// you may not use this file except in compliance with the License. |
||||
// You may obtain a copy of the License at |
||||
// |
||||
// http://www.apache.org/licenses/LICENSE-2.0 |
||||
// |
||||
// Unless required by applicable law or agreed to in writing, software |
||||
// distributed under the License is distributed on an "AS IS" BASIS, |
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
// See the License for the specific language governing permissions and |
||||
// limitations under the License. |
||||
|
||||
#endregion |
||||
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Diagnostics; |
||||
using System.IO; |
||||
using System.Linq; |
||||
using System.Text.RegularExpressions; |
||||
using System.Threading; |
||||
using System.Threading.Tasks; |
||||
using Google.Protobuf; |
||||
using Grpc.Core; |
||||
using Grpc.Core.Utils; |
||||
using NUnit.Framework; |
||||
using Grpc.Testing; |
||||
|
||||
namespace Grpc.IntegrationTesting |
||||
{ |
||||
/// <summary> |
||||
/// Snapshottable wall clock stopwatch. |
||||
/// </summary> |
||||
public class WallClockStopwatch |
||||
{ |
||||
long startTicks; |
||||
|
||||
public WallClockStopwatch() |
||||
{ |
||||
this.startTicks = DateTime.UtcNow.Ticks; |
||||
} |
||||
|
||||
public TimeSpan GetElapsedSnapshot(bool reset) |
||||
{ |
||||
var utcNow = DateTime.UtcNow; |
||||
|
||||
long oldStartTicks; |
||||
if (reset) |
||||
{ |
||||
oldStartTicks = Interlocked.Exchange(ref this.startTicks, utcNow.Ticks); |
||||
} |
||||
else |
||||
{ |
||||
oldStartTicks = this.startTicks; |
||||
} |
||||
return utcNow - new DateTime(oldStartTicks, DateTimeKind.Utc); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue