提交 f13d8ce0 编写于 作者: J Jared Parsons

Remove SQM dependency in IDE code

上级 e804ccaa
// 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.Diagnostics;
using System.Linq;
using Microsoft.VisualStudio.Shell.Interop;
using Roslyn.Utilities;
namespace Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem
{
/// <summary>
/// We want to track Roslyn adoption through SQM. This datapoint
/// is used in a cube to track how many sessions are using the
/// Roslyn language services.
/// </summary>
internal static class Sqm
{
// From the V_VSAppID variable
// 38 CS VB Language Services
private const uint CS_VB_Language_Services = 38;
private const bool AlwaysSendTelemetryEvenIfUserIsOptedOut = false;
private const int DATAID_SQM_STARTUPAPPBUILDNUMBERSTRING = 780;
private const int DATAID_SQM_STARTUPAPPBUILDNUMBER = 11;
private const int DATAID_DP_PRIVATEDOGFOODBUILDNUMBER = 1437;
private const int DATAID_DP_PRIVATEBUILDNUMBER = 1438;
private const int DATAID_SQM_USERTYPE = 37;
private static int s_sqmGuidSet = 0;
public static void LogSession(IVsSqmMulti session, bool isMicrosoftInternal)
{
SetVSSessionGuid(session);
ReportVSSessionSQM(session, isMicrosoftInternal);
}
private static void SetVSSessionGuid(IVsSqmMulti session)
{
// Set the VSSessionGuid so our out-of-proc compiler builds can record sqm data
if (!(System.Threading.Interlocked.CompareExchange(ref s_sqmGuidSet, 1, 0) == 1))
{
try
{
var globalSessionGuid = session.GetGlobalSessionGuid();
// make sure we disable marking global project collection dirty before setting this global property
// otherwise, it will cause full property re-evaluation after this point since project system thinks something related
// to projects has changed.
Microsoft.Build.Evaluation.ProjectCollection.GlobalProjectCollection.DisableMarkDirty = true;
Microsoft.Build.Evaluation.ProjectCollection.GlobalProjectCollection.SetGlobalProperty("VSSessionGuid", globalSessionGuid.ToString());
}
finally
{
Microsoft.Build.Evaluation.ProjectCollection.GlobalProjectCollection.DisableMarkDirty = false;
}
}
}
private static void ReportVSSessionSQM(IVsSqmMulti session, bool isMicrosoftInternal)
{
var multiSession = session;
var vsBuild = Process.GetCurrentProcess().MainModule.FileVersionInfo.ProductVersion;
var roslynBuild = FileVersionInfo.GetVersionInfo(typeof(Sqm).Assembly.Location).FileVersion;
uint sessionHandle;
multiSession.BeginSession(CS_VB_Language_Services, AlwaysSendTelemetryEvenIfUserIsOptedOut, out sessionHandle);
// Log some common datapoints useful in all cubes
multiSession.SetStringDatapoint(sessionHandle, DATAID_SQM_STARTUPAPPBUILDNUMBERSTRING, vsBuild);
LogNumericBuildNumber(multiSession, sessionHandle, DATAID_SQM_STARTUPAPPBUILDNUMBER, vsBuild);
multiSession.SetStringDatapoint(sessionHandle, DATAID_DP_PRIVATEDOGFOODBUILDNUMBER, roslynBuild);
LogNumericBuildNumber(multiSession, sessionHandle, DATAID_DP_PRIVATEBUILDNUMBER, roslynBuild);
multiSession.SetDatapoint(sessionHandle, DATAID_SQM_USERTYPE, isMicrosoftInternal ? 1u : 0);
multiSession.EndSession(sessionHandle);
}
private static void LogNumericBuildNumber(IVsSqmMulti session, uint sessionHandle, uint datapoint, string build)
{
uint numericBuild = 0;
uint.TryParse(build.Split('.').Join(""), out numericBuild);
session.SetDatapoint(sessionHandle, datapoint, numericBuild);
}
}
}
......@@ -71,15 +71,6 @@ internal abstract class VisualStudioWorkspaceImpl : VisualStudioWorkspace
// Ensure the options factory services are initialized on the UI thread
this.Services.GetService<IOptionService>();
var session = serviceProvider.GetService(typeof(SVsLog)) as IVsSqmMulti;
var profileService = serviceProvider.GetService(typeof(SVsFeedbackProfile)) as IVsFeedbackProfile;
// We have Watson hits where this came back null, so guard against it
if (profileService != null)
{
Sqm.LogSession(session, profileService.IsMicrosoftInternal);
}
}
internal static HostServices CreateHostServices(SVsServiceProvider serviceProvider)
......
......@@ -183,7 +183,6 @@
<Compile Include="Shared\VisualStudioImageMonikerService.cs" />
<Compile Include="SolutionEventMonitor.cs" />
<Compile Include="Utilities\VSCodeAnalysisColors.cs" />
<Compile Include="Utilities\IVsSQM.cs" />
<Compile Include="Implementation\WorkspaceCacheService.cs" />
<Compile Include="Implementation\Workspace\WorkspaceFailureOutputPane.cs" />
<Compile Include="VSPackage.Designer.cs">
......@@ -558,7 +557,6 @@
<Compile Include="Implementation\ProjectSystem\MiscellaneousFilesWorkspace.cs" />
<Compile Include="Implementation\ProjectSystem\MiscellaneousFilesWorkspace.HostProject.cs" />
<Compile Include="Implementation\ProjectSystem\ReiteratedVersionSnapshotTracker.cs" />
<Compile Include="Implementation\ProjectSystem\Sqm.cs" />
<Compile Include="Implementation\ProjectSystem\ViewEventArgs.cs" />
<Compile Include="Implementation\ProjectSystem\VisualStudioProjectManagementService.cs" />
<Compile Include="Implementation\ProjectSystem\VisualStudioProjectTracker.cs" />
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
///////////////////////////////////////////////////////////////////////////////
//
//
///////////////////////////////////////////////////////////////////////////////
#pragma warning disable 3001
using System;
using System.Runtime.InteropServices;
namespace Microsoft.VisualStudio.Shell.Interop
{
[ComImport()]
[ComVisible(false)]
[Guid("C1F63D0C-4CAE-4907-BE74-EEB75D386ECB")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IVsSqm
{
void GetSessionStartTime(
[Out] out System.Runtime.InteropServices.ComTypes.FILETIME time
);
void GetFlags(
[Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 flags
);
void SetFlags(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 flags
);
void ClearFlags(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 flags
);
void AddItemToStream(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void SetDatapoint(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
// OBSOLETE IN SQMAPI.DLL. DO NOT CALL.
void GetDatapoint(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 value
);
void EnterTaggedAssert(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dwTag,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dwPossibleBuild,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dwActualBuild
);
void RecordCmdData(
[In] ref Guid pguidCmdGroup,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void GetHashOfGuid(
[In] ref Guid hashGuid,
[Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 resultantHash
);
void GetHashOfString(
[In, MarshalAs(UnmanagedType.BStr)] string hashString,
[Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 resultantHash
);
void IncrementDatapoint(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void SetDatapointBits(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void SetDatapointIfMax(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void SetDatapointIfMin(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void AddToDatapointAverage(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void StartDatapointTimer(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID
);
void RecordDatapointTimer(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID
);
void AccumulateDatapointTimer(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID
);
void AddTimerToDatapointAverage(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID
);
void AddArrayToStream(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U4, SizeParamIndex = 2)] System.UInt32[] data,
[In, MarshalAs(UnmanagedType.I4)] int count
);
}
[ComImport()]
[ComVisible(false)]
[Guid("BE5F55EB-F02D-4217-BCB6-A290800AF6C4")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IVsSqm2
{
void SetBoolDatapoint(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 fValue
);
void SetStringDatapoint(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.BStr)] string strValue
);
void AddToStreamDWord(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 cTuple,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void AddToStreamString(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 cTuple,
[In, MarshalAs(UnmanagedType.BStr)] string strValue
);
void GetObfuscatedString(
[In, MarshalAs(UnmanagedType.BStr)] string input,
[Out, MarshalAs(UnmanagedType.BStr)] out string output
);
}
[ComImport()]
[ComVisible(false)]
[Guid("B17A7D4A-C1A3-45A2-B916-826C3ABA067E")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IVsSqmMulti
{
[return: MarshalAs(UnmanagedType.VariantBool)]
bool GetOptInStatus();
void UnloadSessions(
);
void EndAllSessionsAndAbortUploads(
);
void BeginSession(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionType,
[In, MarshalAs(UnmanagedType.VariantBool)] System.Boolean alwaysSend,
[Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 sessionHandle
);
void EndSession(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle
);
void RegisterSessionHandle(
[In] ref Guid sessionIdentifier,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dwSessionHandle
);
[return: MarshalAs(UnmanagedType.U4)]
int GetSessionHandleByIdentifier(
[In] ref Guid sessionIdentifier
);
void GetSessionStartTime(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[Out] out System.Runtime.InteropServices.ComTypes.FILETIME time
);
Guid GetGlobalSessionGuid();
[return: MarshalAs(UnmanagedType.U4)]
int GetGlobalSessionHandle();
void SetGlobalSessionGuid(
[In] ref Guid pguidSessionGuid
);
void GetFlags(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 flags
);
void SetFlags(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 flags
);
void ClearFlags(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 flags
);
void SetDatapoint(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void SetBoolDatapoint(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 fValue
);
void SetStringDatapoint(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.BStr)] string strValue
);
void SetDatapointBits(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void IncrementDatapoint(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void SetDatapointIfMax(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void SetDatapointIfMin(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void AddToDatapointAverage(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void StartDatapointTimer(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID
);
void RecordDatapointTimer(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID
);
void AccumulateDatapointTimer(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID
);
void AddTimerToDatapointAverage(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID
);
void AddItemToStream(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void AddArrayToStream(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U4, SizeParamIndex = 2)] System.UInt32[] data,
[In, MarshalAs(UnmanagedType.I4)] int count
);
void AddToStreamDWord(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 cTuple,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void AddToStreamString(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 cTuple,
[In, MarshalAs(UnmanagedType.BStr)] string strValue
);
void RecordCmdData(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle,
[In] ref Guid pguidCmdGroup,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID,
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 value
);
void GetHashOfGuid(
[In] ref Guid hashGuid,
[Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 resultantHash
);
void GetHashOfString(
[In, MarshalAs(UnmanagedType.BStr)] string hashString,
[Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 resultantHash
);
void SetProperty(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 propid,
[In] ref Guid varKey,
[In] object varValue
);
void Get64BitHashOfString(
[In, MarshalAs(UnmanagedType.BStr)] string hashString,
[Out, MarshalAs(UnmanagedType.U8)] out System.UInt64 resultantHash
);
}
[ComImport()]
[ComVisible(false)]
[Guid("16be4288-950b-4265-b0dc-280b89ca9979")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IVsSqmOptinManager
{
void GetOptinStatus(
[Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 optinStatus,
[Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 preferences
);
void SetOptinStatus(
[In, MarshalAs(UnmanagedType.U4)] System.UInt32 optinStatus
);
}
[ComImport()]
[ComVisible(false)]
[Guid("2508FDF0-EF80-4366-878E-C9F024B8D981")]
internal interface SVsLog
{
}
}
......@@ -6,7 +6,7 @@
using Microsoft.CodeAnalysis.Options;
using Microsoft.Internal.VisualStudio.Shell.Interop;
using Microsoft.VisualStudio.ComponentModelHost;
using Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem;
using Microsoft.VisualStudio.LanguageServices;
using Microsoft.VisualStudio.LanguageServices.Setup;
namespace Microsoft.VisualStudio.LanguageServices.Telemetry
......@@ -35,7 +35,7 @@ public void Initialize(IServiceProvider serviceProvider)
new VSTelemetryActivityLogger(telemetryService),
Logger.GetLogger()));
Logger.Log(FunctionId.Run_Environment, KeyValueLogMessage.Create(m => m["Version"] = FileVersionInfo.GetVersionInfo(typeof(Sqm).Assembly.Location).FileVersion));
Logger.Log(FunctionId.Run_Environment, KeyValueLogMessage.Create(m => m["Version"] = FileVersionInfo.GetVersionInfo(typeof(VisualStudioWorkspace).Assembly.Location).FileVersion));
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册