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));
});