diff options
| author | Thomas Martitz <kugel@rockbox.org> | 2010-08-04 01:03:25 +0000 |
|---|---|---|
| committer | Thomas Martitz <kugel@rockbox.org> | 2010-08-04 01:03:25 +0000 |
| commit | 594110e962831b0d8ae2ded7efc49d48e4a6c3eb (patch) | |
| tree | b167636938ed249fb61ccd62e9873ef5481ee8af /android | |
| parent | f66a233bdbbf5c772903a744938d7333da1b53bf (diff) | |
| download | rockbox-594110e962831b0d8ae2ded7efc49d48e4a6c3eb.zip rockbox-594110e962831b0d8ae2ded7efc49d48e4a6c3eb.tar.gz rockbox-594110e962831b0d8ae2ded7efc49d48e4a6c3eb.tar.bz2 rockbox-594110e962831b0d8ae2ded7efc49d48e4a6c3eb.tar.xz | |
Implement HAVE_LCD_ENABLE and lcd_update_rect(). When Rockbox runs in the background
this greatly reduces CPU load. lcd_update_rect shoves a bit as well.
CPU usage with Rockbox in background is between 3% (with a 200kbps vbr mp3) and 12% (320kbps cbr mp3), so it's low but still dependent on codecs and even particular files.
Driving a WPS with peakmeter, e.g. the builtin one, adds about 30% cpu usage.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27689 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'android')
| -rw-r--r-- | android/src/org/rockbox/RockboxActivity.java | 23 | ||||
| -rw-r--r-- | android/src/org/rockbox/RockboxFramebuffer.java | 35 |
2 files changed, 46 insertions, 12 deletions
diff --git a/android/src/org/rockbox/RockboxActivity.java b/android/src/org/rockbox/RockboxActivity.java index 38bfec1..2bafb66 100644 --- a/android/src/org/rockbox/RockboxActivity.java +++ b/android/src/org/rockbox/RockboxActivity.java @@ -78,6 +78,7 @@ public class RockboxActivity extends Activity { public void onResume() { super.onResume(); + if (RockboxService.fb != null) { try { @@ -91,8 +92,30 @@ public class RockboxActivity extends Activity { } catch (Exception e) { LOG(e.toString()); } + RockboxService.fb.resume(); } } + + /* this is also called when the backlight goes off, + * which is nice + */ + @Override + protected void onPause() { + super.onPause(); + RockboxService.fb.suspend(); + } + + @Override + protected void onStop() { + super.onStop(); + RockboxService.fb.suspend(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + RockboxService.fb.suspend(); + } private void LOG(CharSequence text) { diff --git a/android/src/org/rockbox/RockboxFramebuffer.java b/android/src/org/rockbox/RockboxFramebuffer.java index f947806..ca11de0 100644 --- a/android/src/org/rockbox/RockboxFramebuffer.java +++ b/android/src/org/rockbox/RockboxFramebuffer.java @@ -34,21 +34,11 @@ public class RockboxFramebuffer extends View { private Bitmap btm; private ByteBuffer native_buf; - private Handler update_handler; - private Runnable cb; public RockboxFramebuffer(Context c) { super(c); - update_handler = new Handler(); - cb = new Runnable() { - public void run() - { - btm.copyPixelsFromBuffer(native_buf); - invalidate(); - } - }; btm = null; } @@ -66,12 +56,21 @@ public class RockboxFramebuffer extends View public void java_lcd_update() { - update_handler.post(cb); + + btm.copyPixelsFromBuffer(native_buf); + postInvalidate(); + } + + public void java_lcd_update_rect(int x, int y, int w, int h) + { + /* can't copy a partial buffer */ + btm.copyPixelsFromBuffer(native_buf); + postInvalidate(x, y, x+w, y+h); } private void LOG(CharSequence text) { - Log.d("RockboxBootloader", (String) text); + Log.d("RockboxBootloader", (String) text); } public boolean onTouchEvent(MotionEvent me) @@ -93,6 +92,18 @@ public class RockboxFramebuffer extends View return true; } + /* the two below should only be called from the activity thread */ + public void suspend() + { /* suspend, Rockbox will not make any lcd updates */ + set_lcd_active(0); + } + public void resume() + { /* make updates again, the underlying function will + * send an event */ + set_lcd_active(1); + } + + public native void set_lcd_active(int active); public native void pixelHandler(int x, int y); public native void touchHandler(int down); } |