summaryrefslogtreecommitdiff
path: root/apps/action.c
diff options
context:
space:
mode:
authorAndree Buschmann <AndreeBuschmann@t-online.de>2011-11-11 19:40:32 +0000
committerAndree Buschmann <AndreeBuschmann@t-online.de>2011-11-11 19:40:32 +0000
commitf1ee740f2b48c8a2da5fa1d33e033a9067fe3843 (patch)
treeb32fdb2f489ec0ce016eba2b4736e26af552cccf /apps/action.c
parent312b2a2de7a35f8c4b0dc355b7b291085a9a5ea4 (diff)
downloadrockbox-f1ee740f2b48c8a2da5fa1d33e033a9067fe3843.tar.gz
rockbox-f1ee740f2b48c8a2da5fa1d33e033a9067fe3843.zip
Finally submit GUI boost (FS#8668). With this change the CPU is boosted (with a 1 second timeout) on scrollwheel activity in the list, main menu, tree and std context. For now GUI boost is only enabled on scrollwheel targets. The code can easily be enhanced to work with other targets as well.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30967 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/action.c')
-rw-r--r--apps/action.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/apps/action.c b/apps/action.c
index 15b2d8a4c8..0b21a27ea9 100644
--- a/apps/action.c
+++ b/apps/action.c
@@ -149,6 +149,27 @@ static inline int get_next_context(const struct button_mapping *items, int i)
149 CONTEXT_STD : 149 CONTEXT_STD :
150 items[i].action_code; 150 items[i].action_code;
151} 151}
152
153#if defined(HAVE_GUI_BOOST) && defined(HAVE_ADJUSTABLE_CPU_FREQ)
154/* Helper function which is called to boost / unboost CPU. This function
155 * avoids to increase boost_count with each call of gui_boost(). */
156static void gui_boost(bool want_to_boost)
157{
158 static bool boosted = false;
159
160 if (want_to_boost && !boosted)
161 {
162 cpu_boost(true);
163 boosted = true;
164 }
165 else if (!want_to_boost && boosted)
166 {
167 cpu_boost(false);
168 boosted = false;
169 }
170}
171#endif
172
152/* 173/*
153 * int get_action_worker(int context, struct button_mapping *user_mappings, 174 * int get_action_worker(int context, struct button_mapping *user_mappings,
154 int timeout) 175 int timeout)
@@ -183,6 +204,23 @@ static int get_action_worker(int context, int timeout,
183 else 204 else
184 button = button_get_w_tmo(timeout); 205 button = button_get_w_tmo(timeout);
185 206
207#if defined(HAVE_GUI_BOOST) && defined(HAVE_ADJUSTABLE_CPU_FREQ)
208 /* Boost the CPU in case of wheel scrolling activity in the defined contexts.
209 * Unboost the CPU after timeout. */
210 static long last_boost_tick;
211 if ((button&(BUTTON_SCROLL_BACK|BUTTON_SCROLL_FWD)) &&
212 (context == CONTEXT_STD || context == CONTEXT_LIST ||
213 context == CONTEXT_MAINMENU || context == CONTEXT_TREE))
214 {
215 last_boost_tick = current_tick;
216 gui_boost(true);
217 }
218 else if (TIME_AFTER(current_tick, last_boost_tick + HZ))
219 {
220 gui_boost(false);
221 }
222#endif
223
186 /* Data from sys events can be pulled with button_get_data 224 /* Data from sys events can be pulled with button_get_data
187 * multimedia button presses don't go through the action system */ 225 * multimedia button presses don't go through the action system */
188 if (button == BUTTON_NONE || button & (SYS_EVENT|BUTTON_MULTIMEDIA)) 226 if (button == BUTTON_NONE || button & (SYS_EVENT|BUTTON_MULTIMEDIA))