Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
762cd261
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
762cd261
编写于
8月 06, 2020
作者:
R
Rikki Gibson
提交者:
GitHub
8月 06, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #45151 from ryzngard/issue/telemetry_determinism
Fix possible problem with TelemetryId
上级
4aaaed7a
25d02cdb
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
55 addition
and
4 deletion
+55
-4
src/EditorFeatures/CSharpTest/Extensions/TelemetryExtensionTests.cs
...Features/CSharpTest/Extensions/TelemetryExtensionTests.cs
+34
-0
src/EditorFeatures/Core/Shared/Extensions/TelemetryExtensions.cs
...torFeatures/Core/Shared/Extensions/TelemetryExtensions.cs
+21
-4
未找到文件。
src/EditorFeatures/CSharpTest/Extensions/TelemetryExtensionTests.cs
0 → 100644
浏览文件 @
762cd261
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using
System
;
using
Microsoft.CodeAnalysis.Editor.Shared.Extensions
;
using
Xunit
;
namespace
Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Extensions
{
public
class
TelemetryExtensionTests
{
[
Fact
]
public
void
TestConstantTelemetryId
()
{
var
expected
=
Guid
.
Parse
(
"00000000-0000-0000-c4c5-914100000000"
);
var
actual
=
typeof
(
TelemetryExtensionTests
).
GetTelemetryId
();
var
actualBytes
=
actual
.
ToByteArray
();
// The first 4 bytes are using platform dependent hashcode and
// are not deterministic. This is a known limitation and corrected
// with the last 8 bytes of the GUID
for
(
int
i
=
0
;
i
<
4
;
i
++)
{
actualBytes
[
i
]
=
0
;
}
// If the assertion fails then telemetry ids could be changing
// making them hard to track. It's important to not regress
// the ability to track telemetry across versions of Roslyn.
Assert
.
Equal
(
new
Guid
(
actualBytes
),
expected
);
}
}
}
src/EditorFeatures/Core/Shared/Extensions/TelemetryExtensions.cs
浏览文件 @
762cd261
...
...
@@ -12,14 +12,31 @@ namespace Microsoft.CodeAnalysis.Editor.Shared.Extensions
internal
static
class
TelemetryExtensions
{
public
static
Guid
GetTelemetryId
(
this
Type
type
,
short
scope
=
0
)
=>
new
Guid
(
type
.
GetTelemetryPrefix
(),
scope
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
);
public
static
int
GetTelemetryPrefix
(
this
Type
type
)
{
type
=
GetTypeForTelemetry
(
type
);
// AssemblyQualifiedName will change across version numbers, FullName won't
return
type
.
FullName
.
GetHashCode
();
// GetHashCode on string is not stable. From documentation:
// The hash code itself is not guaranteed to be stable.
// Hash codes for identical strings can differ across .NET implementations, across .NET versions,
// and across .NET platforms (such as 32-bit and 64-bit) for a single version of .NET. In some cases,
// they can even differ by application domain.
// This implies that two subsequent runs of the same program may return different hash codes.
//
// As such, we keep the original prefix that was being used for legacy purposes, but
// use a stable hashing algorithm (FNV) that doesn't depend on platform
// or .NET implementation. We can map the prefix across legacy versions, but
// as we support more platforms and variations of builds the suffix will be constant
// and usable
var
prefix
=
type
.
FullName
.
GetHashCode
();
var
suffix
=
Roslyn
.
Utilities
.
Hash
.
GetFNVHashCode
(
type
.
FullName
);
// Suffix is the remaining 8 bytes, and the hash code only makes up 4. Pad
// the remainder with an empty byte array
var
suffixBytes
=
BitConverter
.
GetBytes
(
suffix
).
Concat
(
new
byte
[
4
]).
ToArray
();
return
new
Guid
(
prefix
,
scope
,
0
,
suffixBytes
);
}
public
static
Type
GetTypeForTelemetry
(
this
Type
type
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录