Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
e941fa8d
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,发现更多精彩内容 >>
提交
e941fa8d
编写于
4月 19, 2020
作者:
D
David Poeschl
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Change Signature telemetry
上级
cf881c66
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
303 addition
and
1 deletion
+303
-1
src/Features/Core/Portable/ChangeSignature/AbstractChangeSignatureService.cs
...ortable/ChangeSignature/AbstractChangeSignatureService.cs
+10
-0
src/Features/Core/Portable/ChangeSignature/ChangeSignatureTelemetryLogger.cs
...ortable/ChangeSignature/ChangeSignatureTelemetryLogger.cs
+213
-0
src/Features/Core/Portable/ChangeSignature/SignatureChange.cs
...Features/Core/Portable/ChangeSignature/SignatureChange.cs
+64
-0
src/VisualStudio/Core/Def/Implementation/ChangeSignature/ChangeSignatureDialog.xaml.cs
...lementation/ChangeSignature/ChangeSignatureDialog.xaml.cs
+5
-0
src/VisualStudio/Core/Def/Implementation/ChangeSignature/VisualStudioChangeSignatureOptionsService.cs
...ngeSignature/VisualStudioChangeSignatureOptionsService.cs
+8
-1
src/VisualStudio/Core/Def/RoslynPackage.cs
src/VisualStudio/Core/Def/RoslynPackage.cs
+1
-0
src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Log/FunctionId.cs
...redUtilitiesAndExtensions/Compiler/Core/Log/FunctionId.cs
+2
-0
未找到文件。
src/Features/Core/Portable/ChangeSignature/AbstractChangeSignatureService.cs
浏览文件 @
e941fa8d
...
...
@@ -252,6 +252,8 @@ internal ChangeSignatureResult ChangeSignatureWithContext(ChangeSignatureAnalysi
private
bool
TryCreateUpdatedSolution
(
ChangeSignatureAnalysisSucceededContext
context
,
ChangeSignatureOptionsResult
options
,
CancellationToken
cancellationToken
,
[
NotNullWhen
(
true
)]
out
Solution
?
updatedSolution
)
{
var
telemetryTimer
=
Stopwatch
.
StartNew
();
updatedSolution
=
null
;
var
currentSolution
=
context
.
Solution
;
...
...
@@ -268,6 +270,9 @@ internal ChangeSignatureResult ChangeSignatureWithContext(ChangeSignatureAnalysi
var
declaredSymbolParametersCount
=
declaredSymbol
.
GetParameters
().
Length
;
int
telemetryNumberOfDeclarationsToUpdate
=
0
;
int
telemetryNumberOfReferencesToUpdate
=
0
;
foreach
(
var
symbol
in
symbols
)
{
var
methodSymbol
=
symbol
.
Definition
as
IMethodSymbol
;
...
...
@@ -348,6 +353,7 @@ internal ChangeSignatureResult ChangeSignatureWithContext(ChangeSignatureAnalysi
nodesToUpdate
.
Add
(
documentId
,
new
List
<
SyntaxNode
>());
}
telemetryNumberOfDeclarationsToUpdate
++;
AddUpdatableNodeToDictionaries
(
nodesToUpdate
,
documentId
,
nodeToUpdate
,
definitionToUse
,
symbolWithSemanticParameters
);
}
}
...
...
@@ -371,6 +377,7 @@ internal ChangeSignatureResult ChangeSignatureWithContext(ChangeSignatureAnalysi
nodesToUpdate
.
Add
(
documentId2
,
new
List
<
SyntaxNode
>());
}
telemetryNumberOfReferencesToUpdate
++;
AddUpdatableNodeToDictionaries
(
nodesToUpdate
,
documentId2
,
nodeToUpdate2
,
definitionToUse
,
symbolWithSemanticParameters
);
}
}
...
...
@@ -433,6 +440,9 @@ internal ChangeSignatureResult ChangeSignatureWithContext(ChangeSignatureAnalysi
currentSolution
=
currentSolution
.
WithDocumentSyntaxRoot
(
docId
,
formattedDoc
.
GetSyntaxRootSynchronously
(
cancellationToken
)!);
}
telemetryTimer
.
Stop
();
ChangeSignatureLogger
.
LogCommitInformation
(
telemetryNumberOfDeclarationsToUpdate
,
telemetryNumberOfReferencesToUpdate
,
(
int
)
telemetryTimer
.
ElapsedMilliseconds
);
updatedSolution
=
currentSolution
;
return
true
;
}
...
...
src/Features/Core/Portable/ChangeSignature/ChangeSignatureTelemetryLogger.cs
0 → 100644
浏览文件 @
e941fa8d
// 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
Microsoft.CodeAnalysis.Internal.Log
;
namespace
Microsoft.CodeAnalysis
{
internal
class
ChangeSignatureLogger
{
private
const
string
Maximum
=
nameof
(
Maximum
);
private
const
string
Minimum
=
nameof
(
Minimum
);
private
const
string
Mean
=
nameof
(
Mean
);
private
static
readonly
LogAggregator
s_logAggregator
=
new
LogAggregator
();
private
static
readonly
StatisticLogAggregator
s_statisticLogAggregator
=
new
StatisticLogAggregator
();
private
static
readonly
HistogramLogAggregator
s_histogramLogAggregator
=
new
HistogramLogAggregator
(
bucketSize
:
50
,
maxBucketValue
:
1000
);
internal
enum
ActionInfo
{
// Calculate % of successful dialog launches
ChangeSignatureDialogLaunched
,
ChangeSignatureDialogCommitted
,
ChangeSignatureCommitCompleted
,
// Calculate % of successful dialog launches
AddParameterDialogLaunched
,
AddParameterDialogCommitted
,
// Which transformations were done
CommittedSessionAddedRemovedReordered
,
CommittedSessionAddedRemovedOnly
,
CommittedSessionAddedReorderedOnly
,
CommittedSessionRemovedReorderedOnly
,
CommittedSessionAddedOnly
,
CommittedSessionRemovedOnly
,
CommittedSessionReorderedOnly
,
// Signature change specification details
CommittedSession_OriginalParameterCount
,
CommittedSessionWithRemoved_NumberRemoved
,
CommittedSessionWithAdded_NumberAdded
,
// Signature change commit information
CommittedSessionNumberOfDeclarationsUpdated
,
CommittedSessionNumberOfCallSitesUpdated
,
CommittedSessionCommitElapsedMS
,
// Added parameter binds or doesn't bind
AddedParameterTypeBinds
,
// Added parameter required or optional w/default
AddedParameterRequired
,
// Added parameter callsite value options
AddedParameterValueExplicit
,
AddedParameterValueExplicitNamed
,
AddedParameterValueTODO
,
AddedParameterValueOmitted
}
internal
static
void
LogChangeSignatureDialogLaunched
()
=>
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
ChangeSignatureDialogLaunched
);
internal
static
void
LogChangeSignatureDialogCommitted
()
=>
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
ChangeSignatureDialogCommitted
);
internal
static
void
LogAddParameterDialogLaunched
()
=>
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
AddParameterDialogLaunched
);
internal
static
void
LogAddParameterDialogCommitted
()
=>
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
AddParameterDialogCommitted
);
internal
static
void
LogTransformationInformation
(
int
numOriginalParameters
,
int
numParametersAdded
,
int
numParametersRemoved
,
bool
anyParametersReordered
)
{
LogTransformationCombination
(
numParametersAdded
>
0
,
numParametersRemoved
>
0
,
anyParametersReordered
);
s_logAggregator
.
IncreaseCountBy
((
int
)
ActionInfo
.
CommittedSession_OriginalParameterCount
,
numOriginalParameters
);
if
(
numParametersAdded
>
0
)
{
s_logAggregator
.
IncreaseCountBy
((
int
)
ActionInfo
.
CommittedSessionWithAdded_NumberAdded
,
numParametersAdded
);
}
if
(
numParametersRemoved
>
0
)
{
s_logAggregator
.
IncreaseCountBy
((
int
)
ActionInfo
.
CommittedSessionWithRemoved_NumberRemoved
,
numParametersRemoved
);
}
}
private
static
void
LogTransformationCombination
(
bool
parametersAdded
,
bool
parametersRemoved
,
bool
parametersReordered
)
{
// All three transformations
if
(
parametersAdded
&&
parametersRemoved
&&
parametersReordered
)
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
CommittedSessionAddedRemovedReordered
);
return
;
}
// Two transformations
if
(
parametersAdded
&&
parametersRemoved
)
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
CommittedSessionAddedRemovedOnly
);
return
;
}
if
(
parametersAdded
&&
parametersReordered
)
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
CommittedSessionAddedReorderedOnly
);
return
;
}
if
(
parametersRemoved
&&
parametersReordered
)
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
CommittedSessionRemovedReorderedOnly
);
return
;
}
// One transformation
if
(
parametersAdded
)
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
CommittedSessionAddedOnly
);
return
;
}
if
(
parametersRemoved
)
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
CommittedSessionRemovedOnly
);
return
;
}
if
(
parametersReordered
)
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
CommittedSessionReorderedOnly
);
return
;
}
}
internal
static
void
LogCommitInformation
(
int
numDeclarationsUpdated
,
int
numCallSitesUpdated
,
int
elapsedMS
)
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
ChangeSignatureCommitCompleted
);
s_logAggregator
.
IncreaseCountBy
((
int
)
ActionInfo
.
CommittedSessionNumberOfDeclarationsUpdated
,
numDeclarationsUpdated
);
s_logAggregator
.
IncreaseCountBy
((
int
)
ActionInfo
.
CommittedSessionNumberOfCallSitesUpdated
,
numCallSitesUpdated
);
s_statisticLogAggregator
.
AddDataPoint
((
int
)
ActionInfo
.
CommittedSessionCommitElapsedMS
,
elapsedMS
);
s_histogramLogAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
CommittedSessionCommitElapsedMS
,
elapsedMS
);
}
internal
static
void
LogAddedParameterTypeBinds
()
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
AddedParameterTypeBinds
);
}
internal
static
void
LogAddedParameterRequired
()
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
AddedParameterRequired
);
}
internal
static
void
LogAddedParameter_ValueExplicit
()
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
AddedParameterValueExplicit
);
}
internal
static
void
LogAddedParameter_ValueExplicitNamed
()
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
AddedParameterValueExplicitNamed
);
}
internal
static
void
LogAddedParameter_ValueTODO
()
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
AddedParameterValueTODO
);
}
internal
static
void
LogAddedParameter_ValueOmitted
()
{
s_logAggregator
.
IncreaseCount
((
int
)
ActionInfo
.
AddedParameterValueOmitted
);
}
internal
static
void
ReportTelemetry
()
{
Logger
.
Log
(
FunctionId
.
ChangeSignature_Data
,
KeyValueLogMessage
.
Create
(
m
=>
{
foreach
(
var
kv
in
s_logAggregator
)
{
var
info
=
((
ActionInfo
)
kv
.
Key
).
ToString
(
"f"
);
m
[
info
]
=
kv
.
Value
.
GetCount
();
}
foreach
(
var
kv
in
s_statisticLogAggregator
)
{
var
info
=
((
ActionInfo
)
kv
.
Key
).
ToString
(
"f"
);
var
statistics
=
kv
.
Value
.
GetStatisticResult
();
m
[
CreateProperty
(
info
,
Maximum
)]
=
statistics
.
Maximum
;
m
[
CreateProperty
(
info
,
Minimum
)]
=
statistics
.
Minimum
;
m
[
CreateProperty
(
info
,
Mean
)]
=
statistics
.
Mean
;
}
foreach
(
var
kv
in
s_histogramLogAggregator
)
{
var
info
=
((
ActionInfo
)
kv
.
Key
).
ToString
(
"f"
);
m
[
$"
{
info
}
.BucketSize"
]
=
kv
.
Value
.
BucketSize
;
m
[
$"
{
info
}
.MaxBucketValue"
]
=
kv
.
Value
.
MaxBucketValue
;
m
[
$"
{
info
}
.Buckets"
]
=
kv
.
Value
.
GetBucketsAsString
();
}
}));
}
private
static
string
CreateProperty
(
string
parent
,
string
child
)
=>
parent
+
"."
+
child
;
}
}
src/Features/Core/Portable/ChangeSignature/SignatureChange.cs
浏览文件 @
e941fa8d
...
...
@@ -6,7 +6,10 @@
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Immutable
;
using
System.Linq
;
using
Microsoft.CodeAnalysis.Shared.Extensions
;
using
Roslyn.Utilities
;
namespace
Microsoft.CodeAnalysis.ChangeSignature
{
...
...
@@ -55,5 +58,66 @@ public SignatureChange(ParameterConfiguration originalConfiguration, ParameterCo
internal
SignatureChange
WithoutAddedParameters
()
=>
new
SignatureChange
(
OriginalConfiguration
,
UpdatedConfiguration
.
WithoutAddedParameters
());
internal
void
LogTelemetry
()
{
var
originalListOfParameters
=
OriginalConfiguration
.
ToListOfParameters
();
var
updatedListOfParameters
=
UpdatedConfiguration
.
ToListOfParameters
();
ChangeSignatureLogger
.
LogTransformationInformation
(
numOriginalParameters
:
originalListOfParameters
.
Length
,
numParametersAdded
:
updatedListOfParameters
.
Count
(
p
=>
p
is
AddedParameter
),
numParametersRemoved
:
originalListOfParameters
.
Count
(
p
=>
!
updatedListOfParameters
.
Contains
(
p
)),
anyParametersReordered
:
AnyParametersReordered
(
originalListOfParameters
,
updatedListOfParameters
));
foreach
(
var
addedParameter
in
updatedListOfParameters
.
OfType
<
AddedParameter
>())
{
if
(
addedParameter
.
IsRequired
)
{
ChangeSignatureLogger
.
LogAddedParameterRequired
();
}
if
(
addedParameter
.
TypeBinds
)
{
ChangeSignatureLogger
.
LogAddedParameterTypeBinds
();
}
if
(
addedParameter
.
IsCallsiteTodo
)
{
ChangeSignatureLogger
.
LogAddedParameter_ValueTODO
();
}
else
if
(
addedParameter
.
IsCallsiteOmitted
)
{
ChangeSignatureLogger
.
LogAddedParameter_ValueOmitted
();
}
else
{
if
(
addedParameter
.
UseNamedArguments
)
{
ChangeSignatureLogger
.
LogAddedParameter_ValueExplicitNamed
();
}
else
{
ChangeSignatureLogger
.
LogAddedParameter_ValueExplicit
();
}
}
}
}
private
bool
AnyParametersReordered
(
ImmutableArray
<
Parameter
>
originalListOfParameters
,
ImmutableArray
<
Parameter
>
updatedListOfParameters
)
{
var
originalListWithoutRemovedOrAdded
=
originalListOfParameters
.
Where
(
p
=>
updatedListOfParameters
.
Contains
(
p
)).
ToImmutableArray
();
var
updatedListWithoutRemovedOrAdded
=
updatedListOfParameters
.
Where
(
p
=>
originalListOfParameters
.
Contains
(
p
)).
ToImmutableArray
();
for
(
int
i
=
0
;
i
<
originalListWithoutRemovedOrAdded
.
Length
;
i
++)
{
if
(
originalListWithoutRemovedOrAdded
[
i
]
!=
updatedListWithoutRemovedOrAdded
[
i
])
{
return
true
;
}
}
return
false
;
}
}
}
src/VisualStudio/Core/Def/Implementation/ChangeSignature/ChangeSignatureDialog.xaml.cs
浏览文件 @
e941fa8d
...
...
@@ -7,6 +7,7 @@
using
System.Windows.Controls
;
using
System.Windows.Input
;
using
System.Windows.Media
;
using
Microsoft.CodeAnalysis
;
using
Microsoft.CodeAnalysis.ChangeSignature
;
using
Microsoft.VisualStudio.PlatformUI
;
...
...
@@ -133,8 +134,12 @@ private void Add_Click(object sender, RoutedEventArgs e)
var
dialog
=
new
AddParameterDialog
(
addParameterViewModel
);
var
result
=
dialog
.
ShowModal
();
ChangeSignatureLogger
.
LogAddParameterDialogLaunched
();
if
(
result
.
HasValue
&&
result
.
Value
)
{
ChangeSignatureLogger
.
LogAddParameterDialogCommitted
();
var
addedParameter
=
new
AddedParameter
(
addParameterViewModel
.
TypeSymbol
,
addParameterViewModel
.
TypeName
,
...
...
src/VisualStudio/Core/Def/Implementation/ChangeSignature/VisualStudioChangeSignatureOptionsService.cs
浏览文件 @
e941fa8d
...
...
@@ -44,12 +44,19 @@ internal class VisualStudioChangeSignatureOptionsService : IChangeSignatureOptio
_classificationFormatMap
,
_classificationTypeMap
);
ChangeSignatureLogger
.
LogChangeSignatureDialogLaunched
();
var
dialog
=
new
ChangeSignatureDialog
(
viewModel
);
var
result
=
dialog
.
ShowModal
();
if
(
result
.
HasValue
&&
result
.
Value
)
{
return
new
ChangeSignatureOptionsResult
(
new
SignatureChange
(
parameters
,
viewModel
.
GetParameterConfiguration
()),
previewChanges
:
viewModel
.
PreviewChanges
);
ChangeSignatureLogger
.
LogChangeSignatureDialogCommitted
();
var
signatureChange
=
new
SignatureChange
(
parameters
,
viewModel
.
GetParameterConfiguration
());
signatureChange
.
LogTelemetry
();
return
new
ChangeSignatureOptionsResult
(
signatureChange
,
previewChanges
:
viewModel
.
PreviewChanges
);
}
return
null
;
...
...
src/VisualStudio/Core/Def/RoslynPackage.cs
浏览文件 @
e941fa8d
...
...
@@ -271,6 +271,7 @@ private void ReportSessionWideTelemetry()
SolutionLogger
.
ReportTelemetry
();
AsyncCompletionLogger
.
ReportTelemetry
();
CompletionProvidersLogger
.
ReportTelemetry
();
ChangeSignatureLogger
.
ReportTelemetry
();
SyntacticLspLogger
.
ReportTelemetry
();
}
...
...
src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Log/FunctionId.cs
浏览文件 @
e941fa8d
...
...
@@ -479,5 +479,7 @@ internal enum FunctionId
CodeFixes_AddExplicitCast
=
384
,
ToolsOptions_GenerateEditorconfig
=
385
,
ChangeSignature_Data
=
386
,
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录