Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2081)

Unified Diff: chrome/browser/chromeos/status/input_method_menu_button.cc

Issue 4162002: Reduce CPU usage for input method switching. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review fix Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/chromeos/status/input_method_menu_button.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/status/input_method_menu_button.cc
diff --git a/chrome/browser/chromeos/status/input_method_menu_button.cc b/chrome/browser/chromeos/status/input_method_menu_button.cc
index 1fb5fa247e11e757d35518fb83dfb5a791df000d..bc714bc01fe958689994df1fa66f88a5a0907bcb 100644
--- a/chrome/browser/chromeos/status/input_method_menu_button.cc
+++ b/chrome/browser/chromeos/status/input_method_menu_button.cc
@@ -7,6 +7,7 @@
#include <string>
#include "app/resource_bundle.h"
+#include "base/utf_string_conversions.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
#include "chrome/browser/chromeos/cros/keyboard_library.h"
#include "chrome/browser/chromeos/input_method/input_method_util.h"
@@ -54,11 +55,16 @@ InputMethodMenuButton::InputMethodMenuButton(StatusAreaHost* host)
SetShowMultipleIconStates(false);
set_alignment(TextButton::ALIGN_CENTER);
+ chromeos::KeyboardLibrary* keyboard_library =
+ chromeos::CrosLibrary::Get()->GetKeyboardLibrary();
+ const std::string hardware_keyboard_id = // e.g. "xkb:us::eng"
+ keyboard_library->GetHardwareKeyboardLayoutName();
+
// Draw the default indicator "US". The default indicator "US" is used when
// |pref_service| is not available (for example, unit tests) or |pref_service|
// is available, but Chrome preferences are not available (for example,
// initial OS boot).
- InputMethodMenuButton::UpdateUI(L"US", L"");
+ InputMethodMenuButton::UpdateUI(hardware_keyboard_id, L"US", L"", 1);
}
////////////////////////////////////////////////////////////////////////////////
@@ -74,9 +80,21 @@ gfx::Size InputMethodMenuButton::GetPreferredSize() {
void InputMethodMenuButton::OnLocaleChanged() {
input_method::OnLocaleChanged();
+
+ chromeos::InputMethodLibrary* input_method_library =
+ chromeos::CrosLibrary::Get()->GetInputMethodLibrary();
const InputMethodDescriptor& input_method =
- CrosLibrary::Get()->GetInputMethodLibrary()->current_input_method();
- UpdateUIFromInputMethod(input_method);
+ input_method_library->current_input_method();
+
+ // In general, we should not call an input method API in the input method
+ // button classes (status/input_menu_button*.cc) for performance reasons (see
+ // http://crosbug.com/8284). However, since OnLocaleChanged is called only in
+ // OOBE/Login screen which does not have two or more Chrome windows, it's okay
+ // to call GetNumActiveInputMethods here.
+ const size_t num_active_input_methods =
+ input_method_library->GetNumActiveInputMethods();
+
+ UpdateUIFromInputMethod(input_method, num_active_input_methods);
Layout();
SchedulePaint();
}
@@ -84,16 +102,16 @@ void InputMethodMenuButton::OnLocaleChanged() {
////////////////////////////////////////////////////////////////////////////////
// InputMethodMenu::InputMethodMenuHost implementation:
-void InputMethodMenuButton::UpdateUI(
- const std::wstring& name, const std::wstring& tooltip) {
+void InputMethodMenuButton::UpdateUI(const std::string& input_method_id,
+ const std::wstring& name,
+ const std::wstring& tooltip,
+ size_t num_active_input_methods) {
// Hide the button only if there is only one input method, and the input
// method is a XKB keyboard layout. We don't hide the button for other
// types of input methods as these might have intra input method modes,
// like Hiragana and Katakana modes in Japanese input methods.
- scoped_ptr<InputMethodDescriptors> active_input_methods(
- CrosLibrary::Get()->GetInputMethodLibrary()->GetActiveInputMethods());
- if (active_input_methods->size() == 1 &&
- input_method::IsKeyboardLayout(active_input_methods->at(0).id) &&
+ if (num_active_input_methods == 1 &&
+ input_method::IsKeyboardLayout(input_method_id) &&
host_->IsBrowserMode()) {
// As the disabled color is set to invisible, disabling makes the
// button disappear.
« no previous file with comments | « chrome/browser/chromeos/status/input_method_menu_button.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698