Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
c14877d5
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,发现更多精彩内容 >>
提交
c14877d5
编写于
10月 02, 2019
作者:
D
David Barbet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Track local telemetry during remote LSP experimentation for comparison.
上级
1d2fd94a
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
41 addition
and
8 deletion
+41
-8
src/EditorFeatures/Core/Implementation/Classification/SyntacticClassificationTaggerProvider.TagComputer.cs
...tion/SyntacticClassificationTaggerProvider.TagComputer.cs
+38
-3
src/VisualStudio/LiveShare/Impl/Client/Tagger/SyntacticClassificationTaggerProvider.TagComputer.cs
...gger/SyntacticClassificationTaggerProvider.TagComputer.cs
+2
-3
src/Workspaces/Core/Portable/Log/RequestLatencyTracker.cs
src/Workspaces/Core/Portable/Log/RequestLatencyTracker.cs
+1
-2
未找到文件。
src/EditorFeatures/Core/Implementation/Classification/SyntacticClassificationTaggerProvider.TagComputer.cs
浏览文件 @
c14877d5
...
...
@@ -2,6 +2,7 @@
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Immutable
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
Microsoft.CodeAnalysis.Classification
;
...
...
@@ -9,6 +10,7 @@
using
Microsoft.CodeAnalysis.Editor.Shared.Tagging
;
using
Microsoft.CodeAnalysis.Editor.Shared.Threading
;
using
Microsoft.CodeAnalysis.Editor.Shared.Utilities
;
using
Microsoft.CodeAnalysis.Experiments
;
using
Microsoft.CodeAnalysis.Host
;
using
Microsoft.CodeAnalysis.Internal.Log
;
using
Microsoft.CodeAnalysis.Shared.TestHooks
;
...
...
@@ -38,6 +40,12 @@ internal partial class TagComputer
// parsed it yet, and we want to get back to a known state.
private
const
int
ReportChangeDelayInMilliseconds
=
TaggerConstants
.
ShortDelay
;
// TODO - Cleanup once experiment completed - https://github.com/dotnet/roslyn/projects/45#card-27261853
// LSP client language names
private
readonly
ImmutableArray
<
string
>
_lspClientLanguages
=
ImmutableArray
.
Create
(
"C#_LSP"
,
"VB_LSP"
);
// Cache if the LSP experiment is enabled.
private
bool
?
_areRemoteClassificationsEnabled
;
private
readonly
ITextBuffer
_subjectBuffer
;
private
readonly
WorkspaceRegistration
_workspaceRegistration
;
private
readonly
AsynchronousSerialWorkQueue
_workQueue
;
...
...
@@ -199,9 +207,20 @@ private async Task EnqueueProcessSnapshotWorkerAsync(Document document, Cancella
return
;
}
// preemptively parse file in background so that when we are called from tagger from UI thread, we have tree ready.
// F#/typescript and other languages that doesn't support syntax tree will return null here.
_
=
await
document
.
GetSyntaxTreeAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
// TODO - Cleanup once experiment completed - https://github.com/dotnet/roslyn/projects/45#card-27261853
if
(
ShouldLogLocalTelemetry
(
document
.
Project
.
Language
))
{
using
(
new
RequestLatencyTracker
(
SyntacticLspLogger
.
RequestType
.
SyntacticTagger
))
{
_
=
await
document
.
GetSyntaxTreeAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
}
}
else
{
// preemptively parse file in background so that when we are called from tagger from UI thread, we have tree ready.
// F#/typescript and other languages that doesn't support syntax tree will return null here.
_
=
await
document
.
GetSyntaxTreeAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
}
lock
(
_gate
)
{
...
...
@@ -220,6 +239,22 @@ private async Task EnqueueProcessSnapshotWorkerAsync(Document document, Cancella
_reportChangeCancellationSource
.
Token
);
}
/// <summary>
/// TODO - Cleanup once experiment completed - https://github.com/dotnet/roslyn/projects/45#card-27261853
/// Only capture local classification telemetry for experiment when in liveshare and remote classifications are not active.
/// </summary>
private
bool
ShouldLogLocalTelemetry
(
string
languageName
)
{
var
isLspContentType
=
_lspClientLanguages
.
Contains
(
languageName
);
if
(
_areRemoteClassificationsEnabled
==
null
)
{
var
experimentationService
=
_workspace
.
Services
.
GetService
<
IExperimentationService
>();
_areRemoteClassificationsEnabled
=
experimentationService
.
IsExperimentEnabled
(
WellKnownExperimentNames
.
SyntacticExp_LiveShareTagger_Remote
);
}
return
isLspContentType
&&
!(
bool
)
_areRemoteClassificationsEnabled
;
}
private
void
ReportChangedSpan
(
SnapshotSpan
changeSpan
)
{
lock
(
_gate
)
...
...
src/VisualStudio/LiveShare/Impl/Client/Tagger/SyntacticClassificationTaggerProvider.TagComputer.cs
浏览文件 @
c14877d5
...
...
@@ -179,8 +179,7 @@ private async Task EnqueueProcessSnapshotWorkerAsync(DocumentId documentId, Canc
return
;
}
var
tree
=
await
document
.
GetSyntaxTreeAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
var
text
=
await
tree
.
GetTextAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
var
text
=
await
document
.
GetTextAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
var
snapshot
=
text
.
FindCorrespondingEditorTextSnapshot
();
if
(
snapshot
==
null
)
{
...
...
@@ -188,7 +187,7 @@ private async Task EnqueueProcessSnapshotWorkerAsync(DocumentId documentId, Canc
}
var
classifiedSpans
=
ClassificationUtilities
.
GetOrCreateClassifiedSpanList
();
await
classificationService
.
AddRemoteSyntacticClassificationsAsync
(
document
,
TextSpan
.
FromBounds
(
0
,
t
ree
.
Length
),
classifiedSpans
,
cancellationToken
).
ConfigureAwait
(
false
);
await
classificationService
.
AddRemoteSyntacticClassificationsAsync
(
document
,
TextSpan
.
FromBounds
(
0
,
t
ext
.
Length
),
classifiedSpans
,
cancellationToken
).
ConfigureAwait
(
false
);
using
var
tagSpans
=
SharedPools
.
Default
<
List
<
ITagSpan
<
IClassificationTag
>>>().
GetPooledObject
();
ClassificationUtilities
.
Convert
(
_typeMap
,
snapshot
,
classifiedSpans
,
tagSpans
.
Object
.
Add
);
...
...
src/
VisualStudio/LiveShare/Impl/Client/Classification
/RequestLatencyTracker.cs
→
src/
Workspaces/Core/Portable/Log
/RequestLatencyTracker.cs
浏览文件 @
c14877d5
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using
System
;
using
Microsoft.CodeAnalysis.Internal.Log
;
namespace
Microsoft.
VisualStudio.LanguageServices.LiveShare.Client.Classification
namespace
Microsoft.
CodeAnalysis.Internal.Log
{
internal
sealed
class
RequestLatencyTracker
:
IDisposable
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录