Skip to content

Commit

Permalink
longpress diacritics: Show window, accept, dismiss metrics
Browse files Browse the repository at this point in the history
Bug: b/241752592
Change-Id: Ia4ae60e588bf336d4881b041bbbd20de0c2d3a5c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3825146
Reviewed-by: Keith Lee <keithlee@chromium.org>
Commit-Queue: jhtin <jhtin@chromium.org>
Reviewed-by: Mehrab N <mehrab@chromium.org>
Reviewed-by: Darren Shen <shend@chromium.org>
Auto-Submit: jhtin <jhtin@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1035005}
  • Loading branch information
jhtin authored and Chromium LUCI CQ committed Aug 15, 2022
1 parent c023163 commit 6558c1b
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ AssistiveWindowButton CreateButtonFor(size_t index,
return button;
}

void RecordActionMetric(IMEPKLongpressDiacriticAction action) {
base::UmaHistogramEnumeration(
"InputMethod.PhysicalKeyboard.LongpressDiacritics.Action", action);
}

void RecordAcceptanceCharCodeMetric(const std::u16string diacritic) {
// Recording -1 as default value just in case there are issues with
// encoding in utf-16 that means some character isn't
Expand Down Expand Up @@ -85,6 +90,7 @@ bool LongpressDiacriticsSuggester::TrySuggestOnLongpress(char key_character) {
focused_context_id_.value(), properties, &error);
if (error.empty()) {
displayed_window_base_character_ = key_character;
RecordActionMetric(IMEPKLongpressDiacriticAction::kShowWindow);
return true;
}
LOG(ERROR) << "Unable to suggest diacritics on longpress: " << error;
Expand Down Expand Up @@ -216,6 +222,7 @@ bool LongpressDiacriticsSuggester::AcceptSuggestion(size_t index) {
LOG(ERROR) << "Failed to accept suggestion. " << error;
return false;
}
RecordActionMetric(IMEPKLongpressDiacriticAction::kAccept);
RecordAcceptanceCharCodeMetric(current_suggestions[index]);
Reset();
return true;
Expand All @@ -241,6 +248,7 @@ void LongpressDiacriticsSuggester::DismissSuggestion() {
LOG(ERROR) << "Failed to dismiss suggestion. " << error;
return;
}
RecordActionMetric(IMEPKLongpressDiacriticAction::kDismiss);
Reset();
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,15 @@ constexpr auto kDefaultDiacriticsMap =
{'u', u"ú;û;ü;ù;ū"},
{'U', u"Ú;Û;Ü;Ù;Ū"}});

// Must match IMEPKLongpressDiacriticAction in
// tools/metrics/histograms/enums.xml
enum class IMEPKLongpressDiacriticAction {
kShowWindow = 0,
kAccept = 1,
kDismiss = 2,
kMaxValue = kDismiss,
};

class LongpressDiacriticsSuggester : public Suggester {
public:
explicit LongpressDiacriticsSuggester(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -663,6 +663,66 @@ TEST_P(LongpressDiacriticsSuggesterTest, RecordsAcceptanceCharCodeMetric) {
}
}

TEST_P(LongpressDiacriticsSuggesterTest, RecordsShowWindowActionMetric) {
base::HistogramTester histogram_tester;
FakeSuggestionHandler suggestion_handler;
LongpressDiacriticsSuggester suggester =
LongpressDiacriticsSuggester(&suggestion_handler);
suggester.OnFocus(kContextId);

suggester.TrySuggestOnLongpress(GetParam().longpress_char);

histogram_tester.ExpectUniqueSample(
"InputMethod.PhysicalKeyboard.LongpressDiacritics.Action",
IMEPKLongpressDiacriticAction::kShowWindow, 1);
}

TEST_P(LongpressDiacriticsSuggesterTest, RecordsAcceptActionMetric) {
base::HistogramTester histogram_tester;
FakeSuggestionHandler suggestion_handler;
LongpressDiacriticsSuggester suggester =
LongpressDiacriticsSuggester(&suggestion_handler);
suggester.OnFocus(kContextId);

suggester.TrySuggestOnLongpress(GetParam().longpress_char);
suggester.HandleKeyEvent(CreateKeyEventFromCode(ui::DomCode::DIGIT1));

histogram_tester.ExpectBucketCount(
"InputMethod.PhysicalKeyboard.LongpressDiacritics.Action",
IMEPKLongpressDiacriticAction::kAccept, 1);
}

TEST_P(LongpressDiacriticsSuggesterTest, RecordsDismissActionMetricOnEsc) {
base::HistogramTester histogram_tester;
FakeSuggestionHandler suggestion_handler;
LongpressDiacriticsSuggester suggester =
LongpressDiacriticsSuggester(&suggestion_handler);
suggester.OnFocus(kContextId);

suggester.TrySuggestOnLongpress(GetParam().longpress_char);
suggester.HandleKeyEvent(CreateKeyEventFromCode(ui::DomCode::ESCAPE));

histogram_tester.ExpectBucketCount(
"InputMethod.PhysicalKeyboard.LongpressDiacritics.Action",
IMEPKLongpressDiacriticAction::kDismiss, 1);
}

TEST_P(LongpressDiacriticsSuggesterTest,
RecordsDismissActionMetricOnOtherKeyPress) {
base::HistogramTester histogram_tester;
FakeSuggestionHandler suggestion_handler;
LongpressDiacriticsSuggester suggester =
LongpressDiacriticsSuggester(&suggestion_handler);
suggester.OnFocus(kContextId);

suggester.TrySuggestOnLongpress(GetParam().longpress_char);
suggester.HandleKeyEvent(CreateKeyEventFromCode(GetParam().code));

histogram_tester.ExpectBucketCount(
"InputMethod.PhysicalKeyboard.LongpressDiacritics.Action",
IMEPKLongpressDiacriticAction::kDismiss, 1);
}

INSTANTIATE_TEST_SUITE_P(
/* no prefix */,
LongpressDiacriticsSuggesterTest,
Expand Down
6 changes: 6 additions & 0 deletions tools/metrics/histograms/enums.xml
Original file line number Diff line number Diff line change
Expand Up @@ -50054,6 +50054,12 @@ Called by update_gpu_driver_bug_workaround_entries.py.-->
<int value="2" label="UNDO"/>
</enum>

<enum name="IMEPKLongpressDiacriticAction">
<int value="0" label="SHOW_WINDOW"/>
<int value="1" label="ACCEPT"/>
<int value="2" label="DISMISS"/>
</enum>

<enum name="IMEPKLongpressDiacriticUnicodeCharacterCode">
<!--
Do not add the actual diacritical or non basic ascii characters to the text of this file.
Expand Down
16 changes: 14 additions & 2 deletions tools/metrics/histograms/metadata/input/histograms.xml
Original file line number Diff line number Diff line change
Expand Up @@ -792,8 +792,20 @@ chromium-metrics-reviews@google.com.
<owner>jhtin@chromium.org</owner>
<owner>essential-inputs-team@google.com</owner>
<summary>
The unicode code point for the diacritic or character variant accepted by a
user using longpress diacritics on physical keyboard.
The unicode character code for the diacritic and character variant accepted
by a user using longpress diacritics on physical keyboard.
</summary>
</histogram>

<histogram name="InputMethod.PhysicalKeyboard.LongpressDiacritics.Action"
enum="IMEPKLongpressDiacriticAction" expires_after="2023-08-08">
<owner>jhtin@chromium.org</owner>
<owner>essential-inputs-team@google.com</owner>
<summary>
Action related to the longpress diacritics window on physical keyboard.
These actions are recorded in LongpressDiacriticsSuggester functions:
SHOW_WINDOW in TrySuggestOnLongpress, ACCEPT in AcceptSuggestion, and
DISMISS in DismissSuggestion.
</summary>
</histogram>

Expand Down

0 comments on commit 6558c1b

Please sign in to comment.