Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
runtime
提交
1f736c15
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,发现更多精彩内容 >>
未验证
提交
1f736c15
编写于
1月 14, 2021
作者:
S
Sung Yoon Whang
提交者:
GitHub
1月 14, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix GC fragmentation counter to not return NaN (#46938)
* Fix fragmenetation counter to not return NaN * add regression test
上级
45be6750
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
104 addition
and
1 deletion
+104
-1
src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/RuntimeEventSource.cs
...eLib/src/System/Diagnostics/Tracing/RuntimeEventSource.cs
+1
-1
src/tests/tracing/eventcounter/regression-46938.cs
src/tests/tracing/eventcounter/regression-46938.cs
+86
-0
src/tests/tracing/eventcounter/regression-46938.csproj
src/tests/tracing/eventcounter/regression-46938.csproj
+17
-0
未找到文件。
src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/RuntimeEventSource.cs
浏览文件 @
1f736c15
...
...
@@ -73,7 +73,7 @@ protected override void OnEventCommand(EventCommandEventArgs command)
_timerCounter
??=
new
PollingCounter
(
"active-timer-count"
,
this
,
()
=>
Timer
.
ActiveCount
)
{
DisplayName
=
"Number of Active Timers"
};
_fragmentationCounter
??=
new
PollingCounter
(
"gc-fragmentation"
,
this
,
()
=>
{
var
gcInfo
=
GC
.
GetGCMemoryInfo
();
return
gcInfo
.
FragmentedBytes
*
100d
/
gcInfo
.
HeapSizeBytes
;
return
gcInfo
.
HeapSizeBytes
!=
0
?
gcInfo
.
FragmentedBytes
*
100d
/
gcInfo
.
HeapSizeBytes
:
0
;
})
{
DisplayName
=
"GC Fragmentation"
,
DisplayUnits
=
"%"
};
#if !MONO
_exceptionCounter
??=
new
IncrementingPollingCounter
(
"exception-count"
,
this
,
()
=>
Exception
.
GetExceptionCount
())
{
DisplayName
=
"Exception Count"
,
DisplayRateTimeScale
=
new
TimeSpan
(
0
,
0
,
1
)
};
...
...
src/tests/tracing/eventcounter/regression-46938.cs
0 → 100644
浏览文件 @
1f736c15
// 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
EventCounterRegressionTests
{
public
class
SimpleEventListener
:
EventListener
{
private
readonly
EventLevel
_level
=
EventLevel
.
Verbose
;
public
bool
SawNanFragmentation
=
false
;
public
SimpleEventListener
()
{
}
protected
override
void
OnEventSourceCreated
(
EventSource
source
)
{
if
(
source
.
Name
.
Equals
(
"System.Runtime"
))
{
Dictionary
<
string
,
string
>
refreshInterval
=
new
Dictionary
<
string
,
string
>();
refreshInterval
.
Add
(
"EventCounterIntervalSec"
,
"1"
);
EnableEvents
(
source
,
_level
,
(
EventKeywords
)(-
1
),
refreshInterval
);
}
}
protected
override
void
OnEventWritten
(
EventWrittenEventArgs
eventData
)
{
string
fragmentationReported
=
""
;
bool
isGCFragmentationCounter
=
false
;
for
(
int
i
=
0
;
i
<
eventData
.
Payload
.
Count
;
i
++)
{
IDictionary
<
string
,
object
>
eventPayload
=
eventData
.
Payload
[
i
]
as
IDictionary
<
string
,
object
>;
if
(
eventPayload
!=
null
)
{
foreach
(
KeyValuePair
<
string
,
object
>
payload
in
eventPayload
)
{
if
(
payload
.
Key
.
Equals
(
"Name"
)
&&
payload
.
Value
.
ToString
().
Equals
(
"gc-fragmentation"
))
isGCFragmentationCounter
=
true
;
if
(
payload
.
Key
.
Equals
(
"Mean"
))
{
fragmentationReported
=
payload
.
Value
.
ToString
();
}
}
if
(
isGCFragmentationCounter
&&
fragmentationReported
.
Equals
(
"NaN"
))
{
SawNanFragmentation
=
true
;
}
}
}
}
}
public
partial
class
TestEventCounter
{
public
static
int
Main
(
string
[]
args
)
{
// Create an EventListener.
using
(
SimpleEventListener
myListener
=
new
SimpleEventListener
())
{
Thread
.
Sleep
(
3000
);
if
(!
myListener
.
SawNanFragmentation
)
{
Console
.
WriteLine
(
"Test passed"
);
return
100
;
}
else
{
Console
.
WriteLine
(
$"Test Failed - GC fragmentation counter reported a NaN"
);
return
1
;
}
}
}
}
}
src/tests/tracing/eventcounter/regression-46938.csproj
0 → 100644
浏览文件 @
1f736c15
<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="regression-46938.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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录