Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
runtime
提交
207bb77a
R
runtime
项目概览
dotNET Platform
/
runtime
12 个月 前同步成功
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
runtime
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
207bb77a
编写于
6月 10, 2021
作者:
J
John Salem
提交者:
GitHub
6月 10, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Handle Counter Polling Interval of 0 (#53836)
上级
31a389f3
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
119 addition
and
4 deletion
+119
-4
src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/CounterGroup.cs
...te.CoreLib/src/System/Diagnostics/Tracing/CounterGroup.cs
+3
-4
src/tests/tracing/eventcounter/gh53564.cs
src/tests/tracing/eventcounter/gh53564.cs
+99
-0
src/tests/tracing/eventcounter/gh53564.csproj
src/tests/tracing/eventcounter/gh53564.csproj
+17
-0
未找到文件。
src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/CounterGroup.cs
浏览文件 @
207bb77a
...
...
@@ -251,10 +251,9 @@ private void OnTimer()
lock
(
s_counterGroupLock
)
{
_timeStampSinceCollectionStarted
=
now
;
do
{
_nextPollingTimeStamp
+=
new
TimeSpan
(
0
,
0
,
0
,
0
,
_pollingIntervalInMilliseconds
);
}
while
(
_nextPollingTimeStamp
<=
now
);
TimeSpan
delta
=
now
-
_nextPollingTimeStamp
;
if
(
delta
>
TimeSpan
.
Zero
&&
_pollingIntervalInMilliseconds
>
0
)
_nextPollingTimeStamp
+=
TimeSpan
.
FromMilliseconds
(
_pollingIntervalInMilliseconds
*
Math
.
Ceiling
(
delta
.
TotalMilliseconds
/
_pollingIntervalInMilliseconds
));
}
}
}
...
...
src/tests/tracing/eventcounter/gh53564.cs
0 → 100644
浏览文件 @
207bb77a
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
#if USE_MDT_EVENTSOURCE
using
Microsoft.Diagnostics.Tracing
;
#else
using
System.Diagnostics.Tracing
;
#endif
using
System
;
using
System.Collections.Generic
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
System.Diagnostics
;
namespace
gh53564Tests
{
public
class
RuntimeCounterListener
:
EventListener
{
public
RuntimeCounterListener
(){}
private
DateTime
?
setToZeroTimestamp
=
null
;
private
DateTime
?
mostRecentTimestamp
=
null
;
public
ManualResetEvent
ReadyToVerify
{
get
;
}
=
new
ManualResetEvent
(
initialState
:
false
);
protected
override
void
OnEventSourceCreated
(
EventSource
source
)
{
if
(
source
.
Name
.
Equals
(
"System.Runtime"
))
{
Dictionary
<
string
,
string
>
refreshInterval
=
new
Dictionary
<
string
,
string
>();
Console
.
WriteLine
(
$"[
{
DateTime
.
Now
:
hh
:
mm
:
ss
.
fff
}
] Setting interval to 1"
);
// first set interval to 1 seconds
refreshInterval
[
"EventCounterIntervalSec"
]
=
"1"
;
EnableEvents
(
source
,
EventLevel
.
Informational
,
(
EventKeywords
)(-
1
),
refreshInterval
);
// wait a moment to get some events
Thread
.
Sleep
(
TimeSpan
.
FromSeconds
(
3
));
// then set interval to 0
Console
.
WriteLine
(
$"[
{
DateTime
.
Now
:
hh
:
mm
:
ss
.
fff
}
] Setting interval to 0"
);
refreshInterval
[
"EventCounterIntervalSec"
]
=
"0"
;
EnableEvents
(
source
,
EventLevel
.
Informational
,
(
EventKeywords
)(-
1
),
refreshInterval
);
setToZeroTimestamp
=
DateTime
.
Now
+
TimeSpan
.
FromSeconds
(
1
);
// Stash timestamp 1 second after setting to 0
// then attempt to set interval back to 1
Thread
.
Sleep
(
TimeSpan
.
FromSeconds
(
3
));
Console
.
WriteLine
(
$"[
{
DateTime
.
Now
:
hh
:
mm
:
ss
.
fff
}
] Setting interval to 1"
);
refreshInterval
[
"EventCounterIntervalSec"
]
=
"1"
;
EnableEvents
(
source
,
EventLevel
.
Informational
,
(
EventKeywords
)(-
1
),
refreshInterval
);
Thread
.
Sleep
(
TimeSpan
.
FromSeconds
(
3
));
Console
.
WriteLine
(
$"[
{
DateTime
.
Now
:
hh
:
mm
:
ss
.
fff
}
] Setting ReadyToVerify"
);
ReadyToVerify
.
Set
();
}
}
protected
override
void
OnEventWritten
(
EventWrittenEventArgs
eventData
)
{
mostRecentTimestamp
=
eventData
.
TimeStamp
;
}
public
bool
Verify
()
{
if
(!
ReadyToVerify
.
WaitOne
(
0
))
return
false
;
return
(
setToZeroTimestamp
is
null
||
mostRecentTimestamp
is
null
)
?
false
:
setToZeroTimestamp
<
mostRecentTimestamp
;
}
}
public
partial
class
TestRuntimeEventCounter
{
public
static
int
Main
(
string
[]
args
)
{
// Create an EventListener.
using
(
RuntimeCounterListener
myListener
=
new
RuntimeCounterListener
())
{
if
(
myListener
.
ReadyToVerify
.
WaitOne
(
TimeSpan
.
FromSeconds
(
15
)))
{
Console
.
WriteLine
(
$"[
{
DateTime
.
Now
:
hh
:
mm
:
ss
.
fff
}
] Ready to verify"
);
if
(
myListener
.
Verify
())
{
Console
.
WriteLine
(
"Test passed"
);
return
100
;
}
else
{
Console
.
WriteLine
(
$"Test Failed - did not see one or more of the expected runtime counters."
);
return
1
;
}
}
else
{
Console
.
WriteLine
(
"Test Failed - timed out waiting for reset"
);
return
1
;
}
}
}
}
}
src/tests/tracing/eventcounter/gh53564.csproj
0 → 100644
浏览文件 @
207bb77a
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<CLRTestKind>BuildAndRun</CLRTestKind>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CLRTestPriority>0</CLRTestPriority>
<GCStressIncompatible>true</GCStressIncompatible>
<!-- This test is timing sensitive and JIT timing affects the results of the test -->
<JitOptimizationSensitive>true</JitOptimizationSensitive>
<!-- This test has a secondary thread with an infinite loop -->
<UnloadabilityIncompatible>true</UnloadabilityIncompatible>
</PropertyGroup>
<ItemGroup>
<Compile Include="gh53564.cs" />
<ProjectReference Include="../common/common.csproj" />
</ItemGroup>
</Project>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录