From 36559d02642d77766a08416032a80f0b13ef56d7 Mon Sep 17 00:00:00 2001 From: Arjun Balgovind <32061677+arjunbalgovind@users.noreply.github.com> Date: Tue, 5 May 2020 12:30:50 -0700 Subject: [PATCH] Added telemetry to KBM (#2670) * Added telemetry to KBM * Reverted set_config change * resolving comments --- .../common/KeyboardManagerCommon.vcxproj | 2 + .../KeyboardManagerCommon.vcxproj.filters | 6 +++ src/modules/keyboardmanager/common/pch.h | 1 + src/modules/keyboardmanager/common/trace.cpp | 52 +++++++++++++++++++ src/modules/keyboardmanager/common/trace.h | 17 ++++++ .../dll/KeyboardManager.vcxproj | 2 - src/modules/keyboardmanager/dll/dllmain.cpp | 10 +++- src/modules/keyboardmanager/dll/trace.cpp | 29 ----------- src/modules/keyboardmanager/dll/trace.h | 9 ---- .../keyboardmanager/ui/EditKeyboardWindow.cpp | 8 ++- .../ui/EditShortcutsWindow.cpp | 8 ++- 11 files changed, 100 insertions(+), 44 deletions(-) create mode 100644 src/modules/keyboardmanager/common/trace.cpp create mode 100644 src/modules/keyboardmanager/common/trace.h delete mode 100644 src/modules/keyboardmanager/dll/trace.cpp delete mode 100644 src/modules/keyboardmanager/dll/trace.h diff --git a/src/modules/keyboardmanager/common/KeyboardManagerCommon.vcxproj b/src/modules/keyboardmanager/common/KeyboardManagerCommon.vcxproj index ba7e2ff85..7a9aab489 100644 --- a/src/modules/keyboardmanager/common/KeyboardManagerCommon.vcxproj +++ b/src/modules/keyboardmanager/common/KeyboardManagerCommon.vcxproj @@ -100,6 +100,7 @@ + @@ -109,6 +110,7 @@ + diff --git a/src/modules/keyboardmanager/common/KeyboardManagerCommon.vcxproj.filters b/src/modules/keyboardmanager/common/KeyboardManagerCommon.vcxproj.filters index 25b1c9551..2e5f17c3f 100644 --- a/src/modules/keyboardmanager/common/KeyboardManagerCommon.vcxproj.filters +++ b/src/modules/keyboardmanager/common/KeyboardManagerCommon.vcxproj.filters @@ -33,6 +33,9 @@ Source Files + + Source Files + @@ -56,5 +59,8 @@ Header Files + + Header Files + \ No newline at end of file diff --git a/src/modules/keyboardmanager/common/pch.h b/src/modules/keyboardmanager/common/pch.h index bdd02fa85..5ecf9fd3a 100644 --- a/src/modules/keyboardmanager/common/pch.h +++ b/src/modules/keyboardmanager/common/pch.h @@ -13,6 +13,7 @@ #include "winrt/Windows.UI.Text.h" #include "winrt/Windows.UI.Core.h" #include +#include using namespace winrt; using namespace Windows::UI; diff --git a/src/modules/keyboardmanager/common/trace.cpp b/src/modules/keyboardmanager/common/trace.cpp new file mode 100644 index 000000000..d17a2a3f6 --- /dev/null +++ b/src/modules/keyboardmanager/common/trace.cpp @@ -0,0 +1,52 @@ +#include "pch.h" +#include "trace.h" + +TRACELOGGING_DEFINE_PROVIDER( + g_hProvider, + "Microsoft.PowerToys", + // {38e8889b-9731-53f5-e901-e8a7c1753074} + (0x38e8889b, 0x9731, 0x53f5, 0xe9, 0x01, 0xe8, 0xa7, 0xc1, 0x75, 0x30, 0x74), + TraceLoggingOptionProjectTelemetry()); + +void Trace::RegisterProvider() noexcept +{ + TraceLoggingRegister(g_hProvider); +} + +void Trace::UnregisterProvider() noexcept +{ + TraceLoggingUnregister(g_hProvider); +} + +// Log if the user has KBM enabled or disabled - Can also be used to see how often users have to restart the keyboard hook +void Trace::EnableKeyboardManager(const bool enabled) noexcept +{ + TraceLoggingWrite( + g_hProvider, + "KeyboardManager_EnableKeyboardManager", + ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), + TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE), + TraceLoggingBoolean(enabled, "Enabled")); +} + +// Log number of key remaps when the user uses Edit Keyboard and saves settings +void Trace::KeyRemapCount(const DWORD count) noexcept +{ + TraceLoggingWrite( + g_hProvider, + "KeyboardManager_KeyRemapCount", + ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), + TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE), + TraceLoggingValue(count, "KeyRemapCount")); +} + +// Log number of os level shortcut remaps when the user uses Edit Shortcuts and saves settings +void Trace::OSLevelShortcutRemapCount(const DWORD count) noexcept +{ + TraceLoggingWrite( + g_hProvider, + "KeyboardManager_OSLevelShortcutRemapCount", + ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), + TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE), + TraceLoggingValue(count, "OSLevelShortcutRemapCount")); +} diff --git a/src/modules/keyboardmanager/common/trace.h b/src/modules/keyboardmanager/common/trace.h new file mode 100644 index 000000000..e5c1f140a --- /dev/null +++ b/src/modules/keyboardmanager/common/trace.h @@ -0,0 +1,17 @@ +#pragma once + +class Trace +{ +public: + static void RegisterProvider() noexcept; + static void UnregisterProvider() noexcept; + + // Log if the user has KBM enabled or disabled - Can also be used to see how often users have to restart the keyboard hook + static void EnableKeyboardManager(const bool enabled) noexcept; + + // Log number of key remaps when the user uses Edit Keyboard and saves settings + static void KeyRemapCount(const DWORD count) noexcept; + + // Log number of os level shortcut remaps when the user uses Edit Shortcuts and saves settings + static void OSLevelShortcutRemapCount(const DWORD count) noexcept; +}; diff --git a/src/modules/keyboardmanager/dll/KeyboardManager.vcxproj b/src/modules/keyboardmanager/dll/KeyboardManager.vcxproj index dcad4f41a..b307667d5 100644 --- a/src/modules/keyboardmanager/dll/KeyboardManager.vcxproj +++ b/src/modules/keyboardmanager/dll/KeyboardManager.vcxproj @@ -108,7 +108,6 @@ - @@ -118,7 +117,6 @@ pch.h pch.h - diff --git a/src/modules/keyboardmanager/dll/dllmain.cpp b/src/modules/keyboardmanager/dll/dllmain.cpp index 2adafaf59..06d054596 100644 --- a/src/modules/keyboardmanager/dll/dllmain.cpp +++ b/src/modules/keyboardmanager/dll/dllmain.cpp @@ -4,7 +4,6 @@ #include #include #include -#include "trace.h" #include "resource.h" #include #include @@ -12,7 +11,8 @@ #include #include #include -#include +#include +#include extern "C" IMAGE_DOS_HEADER __ImageBase; @@ -267,6 +267,9 @@ public: virtual void enable() { m_enabled = true; + // Log telemetry + Trace::EnableKeyboardManager(true); + // Start keyboard hook start_lowlevel_keyboard_hook(); } @@ -274,6 +277,9 @@ public: virtual void disable() { m_enabled = false; + // Log telemetry + Trace::EnableKeyboardManager(false); + // Stop keyboard hook stop_lowlevel_keyboard_hook(); } diff --git a/src/modules/keyboardmanager/dll/trace.cpp b/src/modules/keyboardmanager/dll/trace.cpp deleted file mode 100644 index 1ba411198..000000000 --- a/src/modules/keyboardmanager/dll/trace.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "pch.h" -#include "trace.h" - -TRACELOGGING_DEFINE_PROVIDER( - g_hProvider, - "Microsoft.PowerToys", - // {38e8889b-9731-53f5-e901-e8a7c1753074} - (0x38e8889b, 0x9731, 0x53f5, 0xe9, 0x01, 0xe8, 0xa7, 0xc1, 0x75, 0x30, 0x74), - TraceLoggingOptionProjectTelemetry()); - -void Trace::RegisterProvider() -{ - TraceLoggingRegister(g_hProvider); -} - -void Trace::UnregisterProvider() -{ - TraceLoggingUnregister(g_hProvider); -} - -void Trace::MyEvent() -{ - TraceLoggingWrite( - g_hProvider, - "PowerToyName_MyEvent", - ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), - TraceLoggingBoolean(TRUE, "UTCReplace_AppSessionGuid"), - TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE)); -} diff --git a/src/modules/keyboardmanager/dll/trace.h b/src/modules/keyboardmanager/dll/trace.h deleted file mode 100644 index acd37a7a2..000000000 --- a/src/modules/keyboardmanager/dll/trace.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -class Trace -{ -public: - static void RegisterProvider(); - static void UnregisterProvider(); - static void MyEvent(); -}; diff --git a/src/modules/keyboardmanager/ui/EditKeyboardWindow.cpp b/src/modules/keyboardmanager/ui/EditKeyboardWindow.cpp index a24adddd8..a0a7dd70d 100644 --- a/src/modules/keyboardmanager/ui/EditKeyboardWindow.cpp +++ b/src/modules/keyboardmanager/ui/EditKeyboardWindow.cpp @@ -3,6 +3,7 @@ #include "SingleKeyRemapControl.h" #include "KeyDropDownControl.h" #include "XamlBridge.h" +#include LRESULT CALLBACK EditKeyboardWindowProc(HWND, UINT, WPARAM, LPARAM); @@ -215,7 +216,7 @@ void createEditKeyboardWindow(HINSTANCE hInst, KeyboardManagerState& keyboardMan KeyboardManagerHelper::ErrorType isSuccess = KeyboardManagerHelper::ErrorType::NoError; // Clear existing Key Remaps keyboardManagerState.ClearSingleKeyRemaps(); - + DWORD successfulRemapCount = 0; for (int i = 0; i < SingleKeyRemapControl::singleKeyRemapBuffer.size(); i++) { DWORD originalKey = SingleKeyRemapControl::singleKeyRemapBuffer[i][0]; @@ -257,6 +258,10 @@ void createEditKeyboardWindow(HINSTANCE hInst, KeyboardManagerState& keyboardMan isSuccess = KeyboardManagerHelper::ErrorType::RemapUnsuccessful; // Tooltip is already shown for this row } + else + { + successfulRemapCount += 1; + } } else { @@ -278,6 +283,7 @@ void createEditKeyboardWindow(HINSTANCE hInst, KeyboardManagerState& keyboardMan { isSuccess = KeyboardManagerHelper::ErrorType::SaveFailed; } + Trace::KeyRemapCount(successfulRemapCount); settingsMessage.Text(KeyboardManagerHelper::GetErrorMessage(isSuccess)); }); diff --git a/src/modules/keyboardmanager/ui/EditShortcutsWindow.cpp b/src/modules/keyboardmanager/ui/EditShortcutsWindow.cpp index 742584330..afc159389 100644 --- a/src/modules/keyboardmanager/ui/EditShortcutsWindow.cpp +++ b/src/modules/keyboardmanager/ui/EditShortcutsWindow.cpp @@ -3,6 +3,7 @@ #include "ShortcutControl.h" #include "KeyDropDownControl.h" #include "XamlBridge.h" +#include LRESULT CALLBACK EditShortcutsWindowProc(HWND, UINT, WPARAM, LPARAM); @@ -167,7 +168,7 @@ void createEditShortcutsWindow(HINSTANCE hInst, KeyboardManagerState& keyboardMa KeyboardManagerHelper::ErrorType isSuccess = KeyboardManagerHelper::ErrorType::NoError; // Clear existing shortcuts keyboardManagerState.ClearOSLevelShortcuts(); - + DWORD successfulRemapCount = 0; // Save the shortcuts that are valid and report if any of them were invalid for (int i = 0; i < ShortcutControl::shortcutRemapBuffer.size(); i++) { @@ -182,6 +183,10 @@ void createEditShortcutsWindow(HINSTANCE hInst, KeyboardManagerState& keyboardMa isSuccess = KeyboardManagerHelper::ErrorType::RemapUnsuccessful; // Tooltip is already shown for this row } + else + { + successfulRemapCount += 1; + } } else { @@ -203,6 +208,7 @@ void createEditShortcutsWindow(HINSTANCE hInst, KeyboardManagerState& keyboardMa { isSuccess = KeyboardManagerHelper::ErrorType::SaveFailed; } + Trace::OSLevelShortcutRemapCount(successfulRemapCount); settingsMessage.Text(KeyboardManagerHelper::GetErrorMessage(isSuccess)); });