Commit beb9cb27 authored by Bao-Duy Tran's avatar Bao-Duy Tran Committed by Chromium LUCI CQ

Record autocorrect metrics for experimental multilingual input methods.

This first batch of metrics are similar to existing metrics for PK
Assistive Autocorrect but adapted to scope to CrOS 1P experimental
multilingual input methods. Other metrics to be added in follow-ups.

Bug: 1159297
Change-Id: I4684d7b8bdbae570e428e08b79de4eb642a3945e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2596484Reviewed-by: default avatarKeith Lee <keithlee@chromium.org>
Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: default avatarYuichiro Hanada <yhanada@chromium.org>
Reviewed-by: default avatarJohn Palmer <jopalmer@chromium.org>
Reviewed-by: default avatarPeter Kasting <pkasting@chromium.org>
Reviewed-by: default avatarSteven Holte <holte@chromium.org>
Reviewed-by: default avatarDarren Shen <shend@chromium.org>
Commit-Queue: Bao-Duy Tran <tranbaoduy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#841386}
parent cdbdbc5a
...@@ -7,11 +7,14 @@ ...@@ -7,11 +7,14 @@
#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_functions.h"
#include "base/strings/strcat.h" #include "base/strings/strcat.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "chrome/browser/chromeos/input_method/assistive_window_properties.h" #include "chrome/browser/chromeos/input_method/assistive_window_properties.h"
#include "chrome/browser/chromeos/input_method/suggestion_enums.h" #include "chrome/browser/chromeos/input_method/suggestion_enums.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "ui/base/ime/chromeos/extension_ime_util.h"
#include "ui/base/ime/chromeos/ime_bridge.h" #include "ui/base/ime/chromeos/ime_bridge.h"
#include "ui/base/ime/chromeos/ime_input_context_handler_interface.h" #include "ui/base/ime/chromeos/ime_input_context_handler_interface.h"
#include "ui/base/ime/chromeos/input_method_manager.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
#include "ui/events/keycodes/dom/dom_code.h" #include "ui/events/keycodes/dom/dom_code.h"
...@@ -28,9 +31,31 @@ enum class AutocorrectActions { ...@@ -28,9 +31,31 @@ enum class AutocorrectActions {
kMaxValue = kReverted, kMaxValue = kReverted,
}; };
bool IsCurrentInputMethodExperimentalMultilingual() {
auto* input_method_manager = input_method::InputMethodManager::Get();
if (!input_method_manager) {
return false;
}
return extension_ime_util::IsExperimentalMultilingual(
input_method_manager->GetActiveIMEState()->GetCurrentInputMethod().id());
}
void LogAssistiveAutocorrectAction(AutocorrectActions action) { void LogAssistiveAutocorrectAction(AutocorrectActions action) {
base::UmaHistogramEnumeration("InputMethod.Assistive.Autocorrect.Actions", base::UmaHistogramEnumeration("InputMethod.Assistive.Autocorrect.Actions",
action); action);
if (IsCurrentInputMethodExperimentalMultilingual()) {
base::UmaHistogramEnumeration(
"InputMethod.MultilingualExperiment.Autocorrect.Actions", action);
}
}
void LogAssistiveAutocorrectDelay(base::TimeDelta delay) {
base::UmaHistogramMediumTimes("InputMethod.Assistive.Autocorrect.Delay",
delay);
if (IsCurrentInputMethodExperimentalMultilingual()) {
base::UmaHistogramMediumTimes(
"InputMethod.MultilingualExperiment.Autocorrect.Delay", delay);
}
} }
void RecordAssistiveCoverage(AssistiveType type) { void RecordAssistiveCoverage(AssistiveType type) {
...@@ -193,8 +218,7 @@ void AutocorrectManager::UndoAutocorrect() { ...@@ -193,8 +218,7 @@ void AutocorrectManager::UndoAutocorrect() {
LogAssistiveAutocorrectAction(AutocorrectActions::kReverted); LogAssistiveAutocorrectAction(AutocorrectActions::kReverted);
RecordAssistiveCoverage(AssistiveType::kAutocorrectReverted); RecordAssistiveCoverage(AssistiveType::kAutocorrectReverted);
RecordAssistiveSuccess(AssistiveType::kAutocorrectReverted); RecordAssistiveSuccess(AssistiveType::kAutocorrectReverted);
base::UmaHistogramMediumTimes("InputMethod.Assistive.Autocorrect.Delay", LogAssistiveAutocorrectDelay(base::TimeTicks::Now() - autocorrect_time_);
(base::TimeTicks::Now() - autocorrect_time_));
} }
} // namespace chromeos } // namespace chromeos
...@@ -143,6 +143,7 @@ static_library("arc") { ...@@ -143,6 +143,7 @@ static_library("arc") {
"//ui/base:base", "//ui/base:base",
"//ui/base/clipboard", "//ui/base/clipboard",
"//ui/base/ime", "//ui/base/ime",
"//ui/base/ime/chromeos:chromeos",
"//ui/chromeos/strings", "//ui/chromeos/strings",
"//ui/display/manager", "//ui/display/manager",
"//ui/events", "//ui/events",
......
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
#include "ui/aura/env.h" #include "ui/aura/env.h"
#include "ui/aura/window.h" #include "ui/aura/window.h"
#include "ui/aura/window_tree_host.h" #include "ui/aura/window_tree_host.h"
#include "ui/base/ime/chromeos/extension_ime_util.h"
#include "ui/base/ime/chromeos/input_method_manager.h"
#include "ui/base/ime/input_method.h" #include "ui/base/ime/input_method.h"
#include "ui/base/ime/input_method_delegate.h" #include "ui/base/ime/input_method_delegate.h"
#include "ui/base/ime/text_input_flags.h" #include "ui/base/ime/text_input_flags.h"
...@@ -633,6 +635,18 @@ bool ArcImeService::SetAutocorrectRange(const gfx::Range& range) { ...@@ -633,6 +635,18 @@ bool ArcImeService::SetAutocorrectRange(const gfx::Range& range) {
if (!range.is_empty()) { if (!range.is_empty()) {
base::UmaHistogramEnumeration("InputMethod.Assistive.Autocorrect.Count", base::UmaHistogramEnumeration("InputMethod.Assistive.Autocorrect.Count",
TextInputClient::SubClass::kArcImeService); TextInputClient::SubClass::kArcImeService);
auto* input_method_manager =
chromeos::input_method::InputMethodManager::Get();
if (input_method_manager &&
chromeos::extension_ime_util::IsExperimentalMultilingual(
input_method_manager->GetActiveIMEState()
->GetCurrentInputMethod()
.id())) {
base::UmaHistogramEnumeration(
"InputMethod.MultilingualExperiment.Autocorrect.Count",
TextInputClient::SubClass::kArcImeService);
}
} }
// TODO(https:://crbug.com/1091088): Implement this method. // TODO(https:://crbug.com/1091088): Implement this method.
NOTIMPLEMENTED_LOG_ONCE(); NOTIMPLEMENTED_LOG_ONCE();
......
...@@ -2101,6 +2101,10 @@ source_set("browser") { ...@@ -2101,6 +2101,10 @@ source_set("browser") {
deps += [ "//ui/ozone:buildflags" ] deps += [ "//ui/ozone:buildflags" ]
} }
if (is_chromeos) {
deps += [ "//ui/base/ime/chromeos:chromeos" ]
}
if (is_linux || is_chromeos) { if (is_linux || is_chromeos) {
sources += [ sources += [
"child_process_launcher_helper_linux.cc", "child_process_launcher_helper_linux.cc",
......
...@@ -125,6 +125,11 @@ ...@@ -125,6 +125,11 @@
#include "ui/base/ime/virtual_keyboard_controller.h" #include "ui/base/ime/virtual_keyboard_controller.h"
#endif #endif
#if defined(OS_CHROMEOS)
#include "ui/base/ime/chromeos/extension_ime_util.h"
#include "ui/base/ime/chromeos/input_method_manager.h"
#endif
using gfx::RectToSkIRect; using gfx::RectToSkIRect;
using gfx::SkIRectToRect; using gfx::SkIRectToRect;
...@@ -1498,6 +1503,20 @@ bool RenderWidgetHostViewAura::SetAutocorrectRange( ...@@ -1498,6 +1503,20 @@ bool RenderWidgetHostViewAura::SetAutocorrectRange(
base::UmaHistogramEnumeration( base::UmaHistogramEnumeration(
"InputMethod.Assistive.Autocorrect.Count", "InputMethod.Assistive.Autocorrect.Count",
TextInputClient::SubClass::kRenderWidgetHostViewAura); TextInputClient::SubClass::kRenderWidgetHostViewAura);
#if defined(OS_CHROMEOS)
auto* input_method_manager =
chromeos::input_method::InputMethodManager::Get();
if (input_method_manager &&
chromeos::extension_ime_util::IsExperimentalMultilingual(
input_method_manager->GetActiveIMEState()
->GetCurrentInputMethod()
.id())) {
base::UmaHistogramEnumeration(
"InputMethod.MultilingualExperiment.Autocorrect.Count",
TextInputClient::SubClass::kRenderWidgetHostViewAura);
}
#endif
} }
auto* input_handler = GetFrameWidgetInputHandlerForFocusedWidget(); auto* input_handler = GetFrameWidgetInputHandlerForFocusedWidget();
......
...@@ -480,6 +480,36 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. ...@@ -480,6 +480,36 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
</summary> </summary>
</histogram> </histogram>
<histogram name="InputMethod.MultilingualExperiment.Autocorrect.Actions"
enum="IMEAutocorrectActions" expires_after="2021-06-30">
<owner>tranbaoduy@google.com</owner>
<owner>essential-inputs-team@google.com</owner>
<summary>
Same as InputMethod.Assistive.Autocorrect.Actions but only recorded for CrOS
1P experimental multilingual input methods.
</summary>
</histogram>
<histogram name="InputMethod.MultilingualExperiment.Autocorrect.Count"
enum="IMETextInputClient" expires_after="2021-06-30">
<owner>tranbaoduy@google.com</owner>
<owner>essential-inputs-team@google.com</owner>
<summary>
Same as InputMethod.Assistive.Autocorrect.Count but only recorded for CrOS
1P experimental multilingual input methods.
</summary>
</histogram>
<histogram name="InputMethod.MultilingualExperiment.Autocorrect.Delay"
units="ms" expires_after="2021-06-30">
<owner>tranbaoduy@google.com</owner>
<owner>essential-inputs-team@google.com</owner>
<summary>
Same as InputMethod.Assistive.Autocorrect.Delay but only recorded for CrOS
1P experimental multilingual input methods.
</summary>
</histogram>
<histogram name="InputMethod.NextWordPrediction" enum="BooleanEnabled" <histogram name="InputMethod.NextWordPrediction" enum="BooleanEnabled"
expires_after="2021-06-13"> expires_after="2021-06-13">
<owner>myy@chromium.org</owner> <owner>myy@chromium.org</owner>
......
...@@ -1036,7 +1036,10 @@ test("ui_base_unittests") { ...@@ -1036,7 +1036,10 @@ test("ui_base_unittests") {
"ime/chromeos/input_method_descriptor_unittest.cc", "ime/chromeos/input_method_descriptor_unittest.cc",
"ime/chromeos/input_method_util_unittest.cc", "ime/chromeos/input_method_util_unittest.cc",
] ]
deps += [ "//ui/base/ime/chromeos" ] deps += [
"//build:branding_buildflags",
"//ui/base/ime/chromeos",
]
} }
if ((is_linux || is_chromeos_lacros) && use_aura) { if ((is_linux || is_chromeos_lacros) && use_aura) {
sources += [ "dragdrop/os_exchange_data_provider_non_backed_unittest.cc" ] sources += [ "dragdrop/os_exchange_data_provider_non_backed_unittest.cc" ]
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "ui/base/ime/chromeos/extension_ime_util.h" #include "ui/base/ime/chromeos/extension_ime_util.h"
#include "base/strings/strcat.h"
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
#include "build/branding_buildflags.h" #include "build/branding_buildflags.h"
...@@ -166,5 +167,16 @@ bool IsKeyboardLayoutExtension(const std::string& input_method_id) { ...@@ -166,5 +167,16 @@ bool IsKeyboardLayoutExtension(const std::string& input_method_id) {
return false; return false;
} }
bool IsExperimentalMultilingual(const std::string& input_method_id) {
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
const std::string prefix = base::StrCat(
{kComponentExtensionIMEPrefix, kXkbExtensionId, "experimental_"});
return base::StartsWith(input_method_id, prefix,
base::CompareCase::SENSITIVE);
#else
return false;
#endif
}
} // namespace extension_ime_util } // namespace extension_ime_util
} // namespace chromeos } // namespace chromeos
...@@ -99,6 +99,11 @@ bool COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) ...@@ -99,6 +99,11 @@ bool COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
std::string COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) std::string COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
GetComponentIDByInputMethodID(const std::string& input_method_id); GetComponentIDByInputMethodID(const std::string& input_method_id);
// Returns true if |input_method_id| refers to a CrOS 1P experimental
// multilingual input method.
bool COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
IsExperimentalMultilingual(const std::string& input_method_id);
} // namespace extension_ime_util } // namespace extension_ime_util
} // namespace chromeos } // namespace chromeos
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
#include <string> #include <string>
#include "base/strings/strcat.h"
#include "build/branding_buildflags.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace chromeos { namespace chromeos {
...@@ -82,4 +84,30 @@ TEST(ExtensionIMEUtilTest, IsArcIMETest) { ...@@ -82,4 +84,30 @@ TEST(ExtensionIMEUtilTest, IsArcIMETest) {
EXPECT_FALSE(extension_ime_util::IsArcIME("mozc")); EXPECT_FALSE(extension_ime_util::IsArcIME("mozc"));
} }
TEST(ExtensionIMEUtilTest, IsExperimentalMultilingualTest) {
// TODO(crbug.com/1162211): Input method IDs are tuples of extension type,
// extension ID, and extension-local input method ID. However, currently
// they're just concats of the three constituent pieces of info, hence StrCat
// here. Replace StrCat once they're no longer unstructured string concats.
EXPECT_FALSE(extension_ime_util::IsExperimentalMultilingual(
base::StrCat({"some_extension_type", "some_extension_id",
"experimental_hello_world"})));
EXPECT_FALSE(extension_ime_util::IsExperimentalMultilingual(base::StrCat(
{"_comp_ime_", "some_extension_id", "experimental_hello_world"})));
EXPECT_FALSE(extension_ime_util::IsExperimentalMultilingual(base::StrCat(
{"_comp_ime_", "jkghodnilhceideoidjikpgommlajknk", "hello_world"})));
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
EXPECT_TRUE(
#else
EXPECT_FALSE(
#endif
extension_ime_util::IsExperimentalMultilingual(
base::StrCat({"_comp_ime_", "jkghodnilhceideoidjikpgommlajknk",
"experimental_hello_world"})));
}
} // namespace chromeos } // namespace chromeos
...@@ -530,6 +530,10 @@ component("views") { ...@@ -530,6 +530,10 @@ component("views") {
deps += [ "//ui/display/util" ] deps += [ "//ui/display/util" ]
} }
if (is_chromeos) {
deps += [ "//ui/base/ime/chromeos" ]
}
if (is_linux || is_chromeos) { if (is_linux || is_chromeos) {
public += [ "color_chooser/color_chooser_view.h" ] public += [ "color_chooser/color_chooser_view.h" ]
sources += [ "color_chooser/color_chooser_view.cc" ] sources += [ "color_chooser/color_chooser_view.cc" ]
......
...@@ -96,6 +96,11 @@ ...@@ -96,6 +96,11 @@
#include "ui/ozone/public/platform_gl_egl_utility.h" #include "ui/ozone/public/platform_gl_egl_utility.h"
#endif #endif
#if defined(OS_CHROMEOS)
#include "ui/base/ime/chromeos/extension_ime_util.h"
#include "ui/base/ime/chromeos/input_method_manager.h"
#endif
namespace views { namespace views {
namespace { namespace {
...@@ -1937,6 +1942,20 @@ bool Textfield::SetAutocorrectRange(const gfx::Range& range) { ...@@ -1937,6 +1942,20 @@ bool Textfield::SetAutocorrectRange(const gfx::Range& range) {
if (!range.is_empty()) { if (!range.is_empty()) {
base::UmaHistogramEnumeration("InputMethod.Assistive.Autocorrect.Count", base::UmaHistogramEnumeration("InputMethod.Assistive.Autocorrect.Count",
TextInputClient::SubClass::kTextField); TextInputClient::SubClass::kTextField);
#if defined(OS_CHROMEOS)
auto* input_method_manager =
chromeos::input_method::InputMethodManager::Get();
if (input_method_manager &&
chromeos::extension_ime_util::IsExperimentalMultilingual(
input_method_manager->GetActiveIMEState()
->GetCurrentInputMethod()
.id())) {
base::UmaHistogramEnumeration(
"InputMethod.MultilingualExperiment.Autocorrect.Count",
TextInputClient::SubClass::kTextField);
}
#endif
} }
return model_->SetAutocorrectRange(range); return model_->SetAutocorrectRange(range);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment