summaryrefslogtreecommitdiffstats
path: root/ui/base/ime
diff options
context:
space:
mode:
authorshuchen <shuchen@chromium.org>2015-04-21 09:55:35 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-21 16:55:53 +0000
commit8fb27d99f16a2024aefbc0a623a458a6e9944737 (patch)
tree7d78510154b68c91335f729b8c411c395a2bf89d /ui/base/ime
parent234275517b63271e72486c99d2a81325b392a875 (diff)
downloadchromium_src-8fb27d99f16a2024aefbc0a623a458a6e9944737.zip
chromium_src-8fb27d99f16a2024aefbc0a623a458a6e9944737.tar.gz
chromium_src-8fb27d99f16a2024aefbc0a623a458a6e9944737.tar.bz2
Improves perf by avoid small memory allocation for key event handling if IME extension doesn't want to handle the key event.
Currently there are 2 places allocate small memory for each key event: 1) In InputMethodChromeOS::DispatchKeyEvent(): https://code.google.com/p/chromium/codesearch#chromium/src/ui/base/ime/input_method_chromeos.cc&l=143 2) In InputMethodEngine::ProcessKeyEvent(): https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/chromeos/input_method/input_method_engine.cc&l=603 Those allocations can be avoided for key events what IMEs are not interested in. BUG=478373 TEST=Verified on linux_chromeos. Review URL: https://codereview.chromium.org/1094273002 Cr-Commit-Position: refs/heads/master@{#326056}
Diffstat (limited to 'ui/base/ime')
-rw-r--r--ui/base/ime/chromeos/ime_bridge.h4
-rw-r--r--ui/base/ime/chromeos/mock_ime_engine_handler.cc4
-rw-r--r--ui/base/ime/chromeos/mock_ime_engine_handler.h1
-rw-r--r--ui/base/ime/input_method_chromeos.cc19
-rw-r--r--ui/base/ime/input_method_chromeos.h2
5 files changed, 21 insertions, 9 deletions
diff --git a/ui/base/ime/chromeos/ime_bridge.h b/ui/base/ime/chromeos/ime_bridge.h
index 3978ec4..09dd33f 100644
--- a/ui/base/ime/chromeos/ime_bridge.h
+++ b/ui/base/ime/chromeos/ime_bridge.h
@@ -106,6 +106,10 @@ class UI_BASE_IME_EXPORT IMEEngineHandlerInterface {
// Called when the composition bounds changed.
virtual void SetCompositionBounds(const std::vector<gfx::Rect>& bounds) = 0;
+ // Returns whether the engine is interested in key events.
+ // If not, InputMethodChromeOS won't feed it with key events.
+ virtual bool IsInterestedInKeyEvent() const = 0;
+
protected:
IMEEngineHandlerInterface() {}
};
diff --git a/ui/base/ime/chromeos/mock_ime_engine_handler.cc b/ui/base/ime/chromeos/mock_ime_engine_handler.cc
index 5645494..867ef19 100644
--- a/ui/base/ime/chromeos/mock_ime_engine_handler.cc
+++ b/ui/base/ime/chromeos/mock_ime_engine_handler.cc
@@ -49,6 +49,10 @@ void MockIMEEngineHandler::Reset() {
++reset_call_count_;
}
+bool MockIMEEngineHandler::IsInterestedInKeyEvent() const {
+ return true;
+}
+
void MockIMEEngineHandler::ProcessKeyEvent(
const ui::KeyEvent& key_event,
const KeyEventDoneCallback& callback) {
diff --git a/ui/base/ime/chromeos/mock_ime_engine_handler.h b/ui/base/ime/chromeos/mock_ime_engine_handler.h
index b37a62f..18d3d99 100644
--- a/ui/base/ime/chromeos/mock_ime_engine_handler.h
+++ b/ui/base/ime/chromeos/mock_ime_engine_handler.h
@@ -23,6 +23,7 @@ class UI_BASE_IME_EXPORT MockIMEEngineHandler
void Disable() override;
void PropertyActivate(const std::string& property_name) override;
void Reset() override;
+ bool IsInterestedInKeyEvent() const override;
void ProcessKeyEvent(const ui::KeyEvent& key_event,
const KeyEventDoneCallback& callback) override;
void CandidateClicked(uint32 index) override;
diff --git a/ui/base/ime/input_method_chromeos.cc b/ui/base/ime/input_method_chromeos.cc
index 0e29d8f..071a2df 100644
--- a/ui/base/ime/input_method_chromeos.cc
+++ b/ui/base/ime/input_method_chromeos.cc
@@ -69,7 +69,7 @@ bool InputMethodChromeOS::OnUntranslatedIMEMessage(
return false;
}
-void InputMethodChromeOS::ProcessKeyEventDone(ui::KeyEvent* event,
+void InputMethodChromeOS::ProcessKeyEventDone(const ui::KeyEvent* event,
bool is_handled) {
DCHECK(event);
if (event->type() == ET_KEY_PRESSED) {
@@ -129,13 +129,16 @@ bool InputMethodChromeOS::DispatchKeyEvent(const ui::KeyEvent& event) {
return true;
}
- ui::KeyEvent* copied_event = new ui::KeyEvent(event);
- GetEngine()->ProcessKeyEvent(
- event,
- base::Bind(&InputMethodChromeOS::ProcessKeyEventDone,
- weak_ptr_factory_.GetWeakPtr(),
- // Pass the ownership of |copied_event|.
- base::Owned(copied_event)));
+ if (GetEngine()->IsInterestedInKeyEvent()) {
+ GetEngine()->ProcessKeyEvent(
+ event,
+ base::Bind(&InputMethodChromeOS::ProcessKeyEventDone,
+ weak_ptr_factory_.GetWeakPtr(),
+ // Pass the ownership of the new copied event.
+ base::Owned(new ui::KeyEvent(event))));
+ } else {
+ ProcessKeyEventDone(&event, false);
+ }
return true;
}
diff --git a/ui/base/ime/input_method_chromeos.h b/ui/base/ime/input_method_chromeos.h
index c885e65..9879416 100644
--- a/ui/base/ime/input_method_chromeos.h
+++ b/ui/base/ime/input_method_chromeos.h
@@ -106,7 +106,7 @@ class UI_BASE_IME_EXPORT InputMethodChromeOS
void HidePreeditText();
// Callback function for IMEEngineHandlerInterface::ProcessKeyEvent.
- void ProcessKeyEventDone(ui::KeyEvent* event, bool is_handled);
+ void ProcessKeyEventDone(const ui::KeyEvent* event, bool is_handled);
// Returns whether an non-password input field is focused.
bool IsNonPasswordInputFieldFocused();