提交 9d135b60 编写于 作者: H Heejae Chang

more code clean up - rename, add logging scope and etc

上级 af08805d
......@@ -3,11 +3,11 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Execution;
using Microsoft.CodeAnalysis.Notification;
using Microsoft.CodeAnalysis.Remote;
using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.CodeAnalysis.SolutionCrawler;
using Microsoft.CodeAnalysis.Internal.Log;
namespace Microsoft.VisualStudio.LanguageServices.Remote
{
......@@ -125,11 +125,14 @@ private async Task SynchronizeAssets()
return;
}
var solution = _service.Workspace.CurrentSolution;
using (var session = await remoteHostClient.CreateServiceSessionAsync(WellKnownRemoteHostServices.RemoteHostService, solution, ShutdownCancellationToken).ConfigureAwait(false))
using (Logger.LogBlock(FunctionId.SolutionChecksumUpdater_SynchronizeAssets, ShutdownCancellationToken))
{
// ask remote host to sync initial asset
await session.InvokeAsync(WellKnownRemoteHostServices.RemoteHostService_SynchronizeAsync).ConfigureAwait(false);
var solution = _service.Workspace.CurrentSolution;
using (var session = await remoteHostClient.CreateServiceSessionAsync(WellKnownRemoteHostServices.RemoteHostService, solution, ShutdownCancellationToken).ConfigureAwait(false))
{
// ask remote host to sync initial asset
await session.InvokeAsync(WellKnownRemoteHostServices.RemoteHostService_SynchronizeAsync).ConfigureAwait(false);
}
}
}
......
......@@ -178,7 +178,7 @@ private async Task WriteOneAssetAsync(ObjectWriter writer, byte[] checksum)
{
var service = ChecksumScope.Workspace.Services.GetRequiredService<ISolutionSynchronizationService>();
var checksumObject = service.GetSynchronizationObject(new Checksum(checksum), _source.Token);
var checksumObject = service.GetRemotableData(new Checksum(checksum), _source.Token);
writer.WriteInt32(1);
writer.WriteValue(checksum);
......@@ -191,7 +191,7 @@ private async Task WriteMultipleAssetsAsync(ObjectWriter writer, byte[][] checks
{
var service = ChecksumScope.Workspace.Services.GetRequiredService<ISolutionSynchronizationService>();
var checksumObjectMap = service.GetSynchronizationObjects(checksums.Select(c => new Checksum(c)), _source.Token);
var checksumObjectMap = service.GetRemotableData(checksums.Select(c => new Checksum(c)), _source.Token);
writer.WriteInt32(checksumObjectMap.Count);
foreach (var kv in checksumObjectMap)
......
......@@ -37,16 +37,16 @@ internal interface ISolutionSynchronizationService : IWorkspaceService
/// <summary>
/// Create <see cref="PinnedRemotableDataScope"/> from <see cref="Solution"/>.
/// </summary>
Task<PinnedRemotableDataScope> CreateSynchronizationScopeAsync(Solution solution, CancellationToken cancellationToken);
Task<PinnedRemotableDataScope> CreatePinnedRemotableDataScopeAsync(Solution solution, CancellationToken cancellationToken);
/// <summary>
/// Get <see cref="RemotableData"/> corresponding to given <see cref="Checksum"/>.
/// </summary>
RemotableData GetSynchronizationObject(Checksum checksum, CancellationToken cancellationToken);
RemotableData GetRemotableData(Checksum checksum, CancellationToken cancellationToken);
/// <summary>
/// Get <see cref="RemotableData"/>s corresponding to given <see cref="Checksum"/>s.
/// </summary>
IReadOnlyDictionary<Checksum, RemotableData> GetSynchronizationObjects(IEnumerable<Checksum> checksums, CancellationToken cancellationToken);
IReadOnlyDictionary<Checksum, RemotableData> GetRemotableData(IEnumerable<Checksum> checksums, CancellationToken cancellationToken);
}
}
......@@ -12,7 +12,7 @@
namespace Microsoft.CodeAnalysis.Execution
{
[ExportWorkspaceServiceFactory(typeof(ISolutionSynchronizationService)), Shared]
internal class SolutionChecksumServiceFactory : IWorkspaceServiceFactory
internal class SolutionSynchronizationServiceFactory : IWorkspaceServiceFactory
{
private readonly AssetStorages _assetStorages = new AssetStorages();
......@@ -49,9 +49,9 @@ public void RemoveGlobalAsset(object value, CancellationToken cancellationToken)
_assetStorages.RemoveGlobalAsset(value, cancellationToken);
}
public async Task<PinnedRemotableDataScope> CreateSynchronizationScopeAsync(Solution solution, CancellationToken cancellationToken)
public async Task<PinnedRemotableDataScope> CreatePinnedRemotableDataScopeAsync(Solution solution, CancellationToken cancellationToken)
{
using (Logger.LogBlock(FunctionId.SolutionChecksumServiceFactory_CreateChecksumAsync, cancellationToken))
using (Logger.LogBlock(FunctionId.SolutionSynchronizationServiceFactory_CreatePinnedRemotableDataScopeAsync, cancellationToken))
{
var storage = _assetStorages.CreateStorage(solution.State);
var checksum = await solution.State.GetChecksumAsync(cancellationToken).ConfigureAwait(false);
......@@ -61,17 +61,17 @@ public async Task<PinnedRemotableDataScope> CreateSynchronizationScopeAsync(Solu
}
}
public RemotableData GetSynchronizationObject(Checksum checksum, CancellationToken cancellationToken)
public RemotableData GetRemotableData(Checksum checksum, CancellationToken cancellationToken)
{
using (Logger.LogBlock(FunctionId.SolutionChecksumServiceFactory_GetChecksumObject, Checksum.GetChecksumLogInfo, checksum, cancellationToken))
using (Logger.LogBlock(FunctionId.SolutionSynchronizationServiceFactory_GetRemotableData, Checksum.GetChecksumLogInfo, checksum, cancellationToken))
{
return _assetStorages.GetSynchronizationObject(checksum, cancellationToken);
}
}
public IReadOnlyDictionary<Checksum, RemotableData> GetSynchronizationObjects(IEnumerable<Checksum> checksums, CancellationToken cancellationToken)
public IReadOnlyDictionary<Checksum, RemotableData> GetRemotableData(IEnumerable<Checksum> checksums, CancellationToken cancellationToken)
{
using (Logger.LogBlock(FunctionId.SolutionChecksumServiceFactory_GetChecksumObjects, Checksum.GetChecksumsLogInfo, checksums, cancellationToken))
using (Logger.LogBlock(FunctionId.SolutionSynchronizationServiceFactory_GetRemotableData, Checksum.GetChecksumsLogInfo, checksums, cancellationToken))
{
return _assetStorages.GetSynchronizationObjects(checksums, cancellationToken);
}
......
......@@ -335,8 +335,9 @@ internal enum FunctionId
RemoteHostClientService_RemoveGlobalAssets,
RemoteHostClientService_Enabled,
ServiceHubRemoteHostClient_CreateAsync,
SolutionChecksumServiceFactory_CreateChecksumAsync,
SolutionChecksumServiceFactory_GetChecksumObject,
SolutionSynchronizationServiceFactory_CreatePinnedRemotableDataScopeAsync,
SolutionSynchronizationServiceFactory_GetRemotableData,
Serializer_CreateChecksum,
Serializer_Serialize,
Serializer_Deserialize,
CodeAnalysisService_CalculateDiagnosticsAsync,
......@@ -349,11 +350,13 @@ internal enum FunctionId
AssetService_TryGetAsset,
AssetService_SynchronizeAssetsAsync,
AssetService_SynchronizeSolutionAssetsAsync,
SolutionChecksumServiceFactory_GetChecksumObjects,
CodeAnalysisService_GetReferenceCountAsync,
CodeAnalysisService_FindReferenceLocationsAsync,
CodeAnalysisService_FindReferenceMethodsAsync,
CodeAnalysisService_GetFullyQualifiedName,
Serializer_CreateChecksum,
SolutionChecksumUpdater_SynchronizeAssets,
SolutionState_ComputeChecksumsAsync,
ProjectState_ComputeChecksumsAsync,
DocumentState_ComputeChecksumsAsync,
}
}
......@@ -34,7 +34,7 @@ public async Task<Session> CreateServiceSessionAsync(string serviceName, Solutio
Contract.ThrowIfFalse(solution.Workspace == _workspace);
var service = _workspace.Services.GetService<ISolutionSynchronizationService>();
var snapshot = await service.CreateSynchronizationScopeAsync(solution, cancellationToken).ConfigureAwait(false);
var snapshot = await service.CreatePinnedRemotableDataScopeAsync(solution, cancellationToken).ConfigureAwait(false);
return await CreateServiceSessionAsync(serviceName, snapshot, callbackTarget, cancellationToken).ConfigureAwait(false);
}
......
......@@ -4,6 +4,7 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Serialization;
using Microsoft.CodeAnalysis.Internal.Log;
namespace Microsoft.CodeAnalysis
{
......@@ -22,33 +23,36 @@ public async Task<Checksum> GetChecksumAsync(CancellationToken cancellationToken
private async Task<ProjectStateChecksums> ComputeChecksumsAsync(CancellationToken cancellationToken)
{
// get states by id order to have deterministic checksum
var documentChecksumsTasks = DocumentIds.Select(id => DocumentStates[id].GetChecksumAsync(cancellationToken));
var additionalDocumentChecksumTasks = AdditionalDocumentIds.Select(id => AdditionalDocumentStates[id].GetChecksumAsync(cancellationToken));
var serializer = new Serializer(_solutionServices.Workspace.Services);
var infoChecksum = serializer.CreateChecksum(new SerializedProjectInfo(Id, Version, Name, AssemblyName, Language, FilePath, OutputFilePath, IsSubmission), cancellationToken);
var compilationOptionsChecksum = SupportsCompilation ? serializer.CreateChecksum(CompilationOptions, cancellationToken) : Checksum.Null;
var parseOptionsChecksum = SupportsCompilation ? serializer.CreateChecksum(ParseOptions, cancellationToken) : Checksum.Null;
var projectReferenceChecksums = new ProjectReferenceChecksumCollection(ProjectReferences.Select(r => serializer.CreateChecksum(r, cancellationToken)).ToArray());
var metadataReferenceChecksums = new MetadataReferenceChecksumCollection(MetadataReferences.Select(r => serializer.CreateChecksum(r, cancellationToken)).ToArray());
var analyzerReferenceChecksums = new AnalyzerReferenceChecksumCollection(AnalyzerReferences.Select(r => serializer.CreateChecksum(r, cancellationToken)).ToArray());
var documentChecksums = await Task.WhenAll(documentChecksumsTasks).ConfigureAwait(false);
var additionalChecksums = await Task.WhenAll(additionalDocumentChecksumTasks).ConfigureAwait(false);
return new ProjectStateChecksums(
infoChecksum,
compilationOptionsChecksum,
parseOptionsChecksum,
new DocumentChecksumCollection(documentChecksums),
projectReferenceChecksums,
metadataReferenceChecksums,
analyzerReferenceChecksums,
new TextDocumentChecksumCollection(additionalChecksums));
using (Logger.LogBlock(FunctionId.ProjectState_ComputeChecksumsAsync, FilePath, cancellationToken))
{
// get states by id order to have deterministic checksum
var documentChecksumsTasks = DocumentIds.Select(id => DocumentStates[id].GetChecksumAsync(cancellationToken));
var additionalDocumentChecksumTasks = AdditionalDocumentIds.Select(id => AdditionalDocumentStates[id].GetChecksumAsync(cancellationToken));
var serializer = new Serializer(_solutionServices.Workspace.Services);
var infoChecksum = serializer.CreateChecksum(new SerializedProjectInfo(Id, Version, Name, AssemblyName, Language, FilePath, OutputFilePath, IsSubmission), cancellationToken);
var compilationOptionsChecksum = SupportsCompilation ? serializer.CreateChecksum(CompilationOptions, cancellationToken) : Checksum.Null;
var parseOptionsChecksum = SupportsCompilation ? serializer.CreateChecksum(ParseOptions, cancellationToken) : Checksum.Null;
var projectReferenceChecksums = new ProjectReferenceChecksumCollection(ProjectReferences.Select(r => serializer.CreateChecksum(r, cancellationToken)).ToArray());
var metadataReferenceChecksums = new MetadataReferenceChecksumCollection(MetadataReferences.Select(r => serializer.CreateChecksum(r, cancellationToken)).ToArray());
var analyzerReferenceChecksums = new AnalyzerReferenceChecksumCollection(AnalyzerReferences.Select(r => serializer.CreateChecksum(r, cancellationToken)).ToArray());
var documentChecksums = await Task.WhenAll(documentChecksumsTasks).ConfigureAwait(false);
var additionalChecksums = await Task.WhenAll(additionalDocumentChecksumTasks).ConfigureAwait(false);
return new ProjectStateChecksums(
infoChecksum,
compilationOptionsChecksum,
parseOptionsChecksum,
new DocumentChecksumCollection(documentChecksums),
projectReferenceChecksums,
metadataReferenceChecksums,
analyzerReferenceChecksums,
new TextDocumentChecksumCollection(additionalChecksums));
}
}
}
}
......@@ -4,6 +4,7 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Serialization;
using Microsoft.CodeAnalysis.Internal.Log;
namespace Microsoft.CodeAnalysis
{
......@@ -22,14 +23,17 @@ public async Task<Checksum> GetChecksumAsync(CancellationToken cancellationToken
private async Task<SolutionStateChecksums> ComputeChecksumsAsync(CancellationToken cancellationToken)
{
// get states by id order to have deterministic checksum
var projectChecksumTasks = ProjectIds.Select(id => ProjectStates[id].GetChecksumAsync(cancellationToken));
using (Logger.LogBlock(FunctionId.SolutionState_ComputeChecksumsAsync, FilePath, cancellationToken))
{
// get states by id order to have deterministic checksum
var projectChecksumTasks = ProjectIds.Select(id => ProjectStates[id].GetChecksumAsync(cancellationToken));
var serializer = new Serializer(_solutionServices.Workspace.Services);
var infoChecksum = serializer.CreateChecksum(new SerializedSolutionInfo(Id, Version, FilePath), cancellationToken);
var serializer = new Serializer(_solutionServices.Workspace.Services);
var infoChecksum = serializer.CreateChecksum(new SerializedSolutionInfo(Id, Version, FilePath), cancellationToken);
var projectChecksums = await Task.WhenAll(projectChecksumTasks).ConfigureAwait(false);
return new SolutionStateChecksums(infoChecksum, new ProjectChecksumCollection(projectChecksums));
var projectChecksums = await Task.WhenAll(projectChecksumTasks).ConfigureAwait(false);
return new SolutionStateChecksums(infoChecksum, new ProjectChecksumCollection(projectChecksums));
}
}
}
}
......@@ -4,6 +4,7 @@
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Serialization;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Internal.Log;
namespace Microsoft.CodeAnalysis
{
......@@ -22,14 +23,17 @@ public async Task<Checksum> GetChecksumAsync(CancellationToken cancellationToken
private async Task<DocumentStateChecksums> ComputeChecksumsAsync(CancellationToken cancellationToken)
{
var textTask = GetTextAsync(cancellationToken);
using (Logger.LogBlock(FunctionId.DocumentState_ComputeChecksumsAsync, FilePath, cancellationToken))
{
var textTask = GetTextAsync(cancellationToken);
var serializer = new Serializer(solutionServices.Workspace.Services);
var serializer = new Serializer(solutionServices.Workspace.Services);
var infoChecksum = serializer.CreateChecksum(new SerializedDocumentInfo(Id, Name, Folders, this.GetSourceCodeKind(), FilePath, this.IsGenerated()), cancellationToken);
var textChecksum = serializer.CreateChecksum(await textTask.ConfigureAwait(false), cancellationToken);
var infoChecksum = serializer.CreateChecksum(new SerializedDocumentInfo(Id, Name, Folders, this.GetSourceCodeKind(), FilePath, this.IsGenerated()), cancellationToken);
var textChecksum = serializer.CreateChecksum(await textTask.ConfigureAwait(false), cancellationToken);
return new DocumentStateChecksums(infoChecksum, textChecksum);
return new DocumentStateChecksums(infoChecksum, textChecksum);
}
}
}
}
......@@ -17,8 +17,8 @@ internal static class Extensions
{
public static async Task<T> GetValueAsync<T>(this ISolutionSynchronizationService service, Checksum checksum)
{
var syncService = (SolutionChecksumServiceFactory.Service)service;
var syncObject = service.GetSynchronizationObject(checksum, CancellationToken.None);
var syncService = (SolutionSynchronizationServiceFactory.Service)service;
var syncObject = service.GetRemotableData(checksum, CancellationToken.None);
using (var stream = SerializableBytes.CreateWritableStream())
using (var writer = new ObjectWriter(stream))
......
......@@ -115,8 +115,8 @@ internal static async Task VerifyAssetAsync(ISolutionSynchronizationService serv
Func<T, string, Serializer, RemotableData> assetGetter)
{
// re-create asset from object
var syncService = (SolutionChecksumServiceFactory.Service)service;
var syncObject = service.GetSynchronizationObject(checksum, CancellationToken.None);
var syncService = (SolutionSynchronizationServiceFactory.Service)service;
var syncObject = service.GetRemotableData(checksum, CancellationToken.None);
var recoveredValue = await service.GetValueAsync<T>(checksum);
var recreatedSyncObject = assetGetter(recoveredValue, kind, syncService.Serializer_TestOnly);
......@@ -258,7 +258,7 @@ internal static void VerifySnapshotInService(ISolutionSynchronizationService sna
internal static void VerifyChecksumInService(ISolutionSynchronizationService snapshotService, Checksum checksum, string kind)
{
Assert.NotNull(checksum);
var otherObject = snapshotService.GetSynchronizationObject(checksum, CancellationToken.None);
var otherObject = snapshotService.GetRemotableData(checksum, CancellationToken.None);
ChecksumEqual(checksum, kind, otherObject.Checksum, otherObject.Kind);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册