Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
runtime
提交
1ec8a0a5
R
runtime
项目概览
dotNET Platform
/
runtime
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
未验证
提交
1ec8a0a5
编写于
6月 07, 2021
作者:
A
Andrew Au
提交者:
GitHub
6月 07, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Implement descr_generations_to_profiler for regions (#53706)
上级
ad41de40
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
26 addition
and
46 deletion
+26
-46
src/coreclr/gc/gc.cpp
src/coreclr/gc/gc.cpp
+13
-6
src/coreclr/vm/proftoeeinterfaceimpl.cpp
src/coreclr/vm/proftoeeinterfaceimpl.cpp
+2
-2
src/tests/profiler/native/gcbasicprofiler/gcbasicprofiler.cpp
...tests/profiler/native/gcbasicprofiler/gcbasicprofiler.cpp
+11
-38
未找到文件。
src/coreclr/gc/gc.cpp
浏览文件 @
1ec8a0a5
...
...
@@ -15527,9 +15527,9 @@ int bgc_allocate_spin(size_t min_gc_size, size_t bgc_begin_size, size_t bgc_size
return 0;
}
if ((
(bgc_begin_size / end_size) >= 2
) || (bgc_size_increased >= bgc_begin_size))
if ((
bgc_begin_size >= (2 * end_size)
) || (bgc_size_increased >= bgc_begin_size))
{
if (
(bgc_begin_size / end_size) >= 2
)
if (
bgc_begin_size >= (2 * end_size)
)
{
dprintf (3, ("alloc-ed too much before bgc started"));
}
...
...
@@ -39732,9 +39732,6 @@ go_through_refs:
void gc_heap::descr_generations_to_profiler (gen_walk_fn fn, void *context)
{
#ifdef USE_REGIONS
assert (!"not impl!!");
#else
#ifdef MULTIPLE_HEAPS
for (int i = 0; i < n_heaps; i++)
{
...
...
@@ -39753,6 +39750,16 @@ void gc_heap::descr_generations_to_profiler (gen_walk_fn fn, void *context)
{
generation* gen = hp->generation_of (curr_gen_number);
heap_segment* seg = generation_start_segment (gen);
#ifdef USE_REGIONS
while (seg)
{
fn(context, curr_gen_number, heap_segment_mem (seg),
heap_segment_allocated (seg),
heap_segment_reserved (seg));
seg = heap_segment_next (seg);
}
#else
while (seg && (seg != hp->ephemeral_heap_segment))
{
assert (curr_gen_number > 0);
...
...
@@ -39805,9 +39812,9 @@ void gc_heap::descr_generations_to_profiler (gen_walk_fn fn, void *context)
heap_segment_reserved (hp->ephemeral_heap_segment) );
}
}
#endif //USE_REGIONS
}
}
#endif //USE_REGIONS
}
#ifdef TRACE_GC
src/coreclr/vm/proftoeeinterfaceimpl.cpp
浏览文件 @
1ec8a0a5
...
...
@@ -843,9 +843,9 @@ void __stdcall UpdateGenerationBounds()
RETURN
;
newGenerationTable
->
count
=
0
;
newGenerationTable
->
capacity
=
GenerationTable
::
defaultCapacity
;
// if there is already a current table, use its c
ount
as a guess for the capacity
// if there is already a current table, use its c
apacity
as a guess for the capacity
if
(
s_currentGenerationTable
!=
NULL
)
newGenerationTable
->
capacity
=
s_currentGenerationTable
->
c
ount
;
newGenerationTable
->
capacity
=
s_currentGenerationTable
->
c
apacity
;
newGenerationTable
->
prev
=
NULL
;
newGenerationTable
->
genDescTable
=
new
(
nothrow
)
GenerationDesc
[
newGenerationTable
->
capacity
];
if
(
newGenerationTable
->
genDescTable
==
NULL
)
...
...
src/tests/profiler/native/gcbasicprofiler/gcbasicprofiler.cpp
浏览文件 @
1ec8a0a5
...
...
@@ -50,9 +50,6 @@ HRESULT GCBasicProfiler::Shutdown()
return
S_OK
;
}
// filler for empty generations: x86 - 0xc; ia64 - 0x18
#define GEN_FILLER 0x18
HRESULT
GCBasicProfiler
::
GarbageCollectionStarted
(
int
cGenerations
,
BOOL
generationCollected
[],
COR_PRF_GC_REASON
reason
)
{
SHUTDOWNGUARD
();
...
...
@@ -79,49 +76,25 @@ HRESULT GCBasicProfiler::GarbageCollectionStarted(int cGenerations, BOOL generat
printf
(
"GCBasicProfiler::GarbageCollectionStarted: FAIL: GetGenerationBounds hr=0x%x
\n
"
,
hr
);
return
S_OK
;
}
// Assuming an initial gc heap like this.
//
// Generation: 3 Start: 1ee1000 Length: 2030 Reserved: fff000 // big objects
// Generation: 2 Start: 7a8d0bbc Length: 1fd1c Reserved: 1fd1c // frozen objects (per module)
// Generation: 2 Start: 3120004 Length: c Reserved: c // debug build only, internal
// Generation: 2 Start: 5ba29b7c Length: 465f0 Reserved: 465f0 // frozen objects (per module)
// Generation: 2 Start: ee1000 Length: c Reserved: c // empty, with filler
// Generation: 1 Start: ee100c Length: c Reserved: c // empty, with filler
// Generation: 0 Start: ee1018 Length: 15b8 Reserved: ffefe8 // new objects
// loop through generations from 0 to 3
// loop through all ranges
for
(
int
i
=
nObjectRanges
-
1
;
i
>=
0
;
i
--
)
{
switch
(
objectRanges
[
i
].
generation
)
{
case
0
:
case
3
:
case
4
:
// no useful verification
break
;
case
1
:
if
(
objectRanges
[
i
].
rangeLength
>
GEN_FILLER
)
if
(
0
>
objectRanges
[
i
].
generation
||
objectRanges
[
i
].
generation
>
4
)
{
_failures
++
;
printf
(
"GCBasicProfiler::GarbageCollectionStarted: FAIL: Expected initial gen1 rangeLength <= 0x%x. rangeLength=0x%p
\n
"
,
GEN_FILLER
,
(
void
*
)
objectRanges
[
i
].
rangeLength
);
printf
(
"GCBasicProfiler::GarbageCollectionStarted: FAIL: invalid generation: %d
\n
"
,
objectRanges
[
i
].
generation
);
}
if
(
objectRanges
[
i
].
rangeLengthReserved
>
GEN_FILLER
)
{
_failures
++
;
printf
(
"GCBasicProfiler::GarbageCollectionStarted: FAIL: Expected initial gen1 rangeLengthReserved <= 0x%x. rangeLengthReserved=0x%p
\n
"
,
GEN_FILLER
,
(
void
*
)
objectRanges
[
i
].
rangeLengthReserved
);
}
break
;
case
2
:
break
;
default:
if
(
nObjectRanges
>
3
&&
objectRanges
[
2
].
generation
==
2
&&
objectRanges
[
2
].
rangeLength
==
0x18
&&
objectRanges
[
2
].
generation
==
1
)
{
if
(
objectRanges
[
3
].
rangeLength
!=
0x18
)
{
_failures
++
;
printf
(
"GCBasicProfiler::GarbageCollectionStarted: FAIL: in
valid generation: %d
\n
"
,
objectRanges
[
i
].
generation
);
printf
(
"GCBasicProfiler::GarbageCollectionStarted: FAIL: in
the first GC for the segment case, gen 1 should have size 0x18"
);
}
}
}
return
S_OK
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录