Starring it. My poor G1 has a tough enough time with hardware
rendering, no need to put added strain on it.

On Apr 19, 3:29 am, Robert Green <[email protected]> wrote:
> I filed a bug for this here 
> -http://code.google.com/p/android/issues/detail?id=7836
>
> I believe I did a thorough job with the report.
>
> Please star it or comment on it if it affects you.
>
> Thanks!
>
> On Apr 19, 12:52 am, Robert Green <[email protected]> wrote:
>
>
>
> > Excellent work, Mario.  I think it's quite clear that the input
> > processing code in Android needs help.  Eating 20-30% of a Cortex A8
> > is a pretty big deal.
>
> > On Apr 18, 4:21 pm, Mario Zechner <[email protected]> wrote:
>
> > > For fun i extended the example i posted earlier. It now feature cpu
> > > usage output derrived from /proc/stat which should be enough to given
> > > an indication of the slow down occuring due to touch events.
>
> > > The setup:
>
> > > - A GLSurfaceView
> > > - An OnTouchListener that does nothing but return true
> > > - A simple renderer thread which is throttled via a Thread.sleep(200)
> > > to 5 frames per second which outputs the frames per second as well as
> > > the cpu usage
>
> > > Observation on Milestone with 2.0.1:
> > > - load without touching the screen - 4%-12%
> > > - load with touching the screen - 24%-44%
>
> > > due to the way i measure the cpu usage it of course fluctuates quiet a
> > > bit, the overall tendency can be easily derrived though.
>
> > > You can find the apk athttp://www.file-pasta.com/file/1/touchflood.apk,
> > > the Eclipse project with all the source can be found 
> > > athttp://www.file-pasta.com/file/0/touchflood.zip.
>
> > > On 18 Apr., 22:18, Robert Green <[email protected]> wrote:
>
> > > > The fundamental issue is that there are too many instructions per
> > > > event being executed.  There is no way around it other than optimizing
> > > > the event handling code in KeyInputQueue.  No amount of waiting or
> > > > sleeping will fix that because those events must run through that code
> > > > and that code appears to be very slow.  It surprises me because it's
> > > > truly performance critical code and this issue has been known since
> > > > 1.1/1.5 and it still doesn't appear to be fixed in master.  I'm
> > > > looking at it now and the author(s) didn't even follow Android's best
> > > > optimization practices.  Simple things like declaring virtuals with
> > > > local variables aren't done.
>
> > > > For a moment today I was considering taking the input stack (EventHub,
> > > > KeyInputQueue and InputDevice) and hacking it into my own input stack
> > > > which reads off the event devices much more efficiently but I can't
> > > > find any way to stop the system stack from running and consuming CPU,
> > > > so that hack is out (and probably good because I really didn't want to
> > > > go there - waste of time and probably wouldn't work right anyway).
>
> > > > In my activity:
> > > > public boolean onTouchEvent(MotionEvent e) {
> > > >   return false;
>
> > > > }
>
> > > > And system_server still consumes about 36% of the CPU while moving my
> > > > finger around.  That proves there is nothing a developer can do to
> > > > work around this.  I think I'll take this issue to the platform group
> > > > now and try to file more specific bugs.
>
> > > > On Apr 18, 10:38 am, Ralf Schneider <[email protected]> wrote:
>
> > > > > I have already talked a lot about the touch slow down in this forum.
> > > > > There is another observation I would like to add, may be this can 
> > > > > help to
> > > > > track the problem down.
>
> > > > > One of my projects is an Argumented Reality Game.
> > > > > Of course this kind of App eats energy (CPU cycles) like crazy:
>
> > > > > In my app I process:
> > > > > The camare, OpenGL graphics, Pseudo-3D-Sound mixing (8 simultaneous 
> > > > > samples
> > > > > + ogg-music), 2 constant sensor imputs (acceleration, magnetic) and
> > > > > additional input from trackball, hardware keys and the touch screen.
>
> > > > > The largest slow down occurs with the touch-events.
>
> > > > > But the next big slow down occurs with the accleration and magnetic 
> > > > > events!
> > > > > I gained up to 4 FPS on a N1 by switching from SENSOR_DELAY_FASTEST to
> > > > > SENSOR_DELAY_GAME.
>
> > > > > => So I just wonder: May be the slow down is in no way specific to 
> > > > > touch
> > > > > events! Instead the whole input-queue-event handling is just horribly 
> > > > > slow.
> > > > > As everyonw has observed: Touching the screen will trigger (flood) 
> > > > > lots of
> > > > > events - This is similar as enabling input from other sensors - which 
> > > > > can
> > > > > slow down the app in a compareable way, too!
> > > > > The main differences is only: Touching the screen will still trigger 
> > > > > more
> > > > > event than using a sesnor in *SENSOR_DELAY_FASTEST*. So the slow down
> > > > > appears as less drastically...
>
> > > > > After working a while with Android, I must say:
> > > > > The design and architecture of the Java-API seems to be nice and well 
> > > > > done
> > > > > most of the time.
> > > > > But the execution and implementation of the software stack as a whole 
> > > > > seems
> > > > > to be just slow, slow, slow, slow, .... All this doesn't matter if 
> > > > > you have
> > > > > lots of servers with many cores (ENTERPRISE!) but for an
> > > > > embedded-soft-realtime-device I expect more!
>
> > > > > IMHO the OS on an embedded device with a 1 GHZ CPU should not use 
> > > > > more than
> > > > > 1% of the CPU to process around thousand events per seconds - and 
> > > > > even this
> > > > > i would consider slow.
> > > > > Anyway, this time I resist to go into a deeper rant.
>
> > > > > Kind Regards,
> > > > > Ralf
>
> > > > > 2010/4/18 Robert Green <[email protected]>
>
> > > > > > I've tried sleep() and have switched to wait(1000), notify() / 
> > > > > > yield()
> > > > > > as outlined by some other devs.  I have no empirical evidence that 
> > > > > > one
> > > > > > works any better than the other.  Both consume a range between 
> > > > > > 25-36%
> > > > > > of the CPU by system_process while touching.  That's a full third of
> > > > > > the CPU of the device just to give me coordinates off the touch
> > > > > > screen.  No one has a good workaround for this it seems and seeing 
> > > > > > the
> > > > > > problem on the 2.1 emulator makes me think that Google Android devs
> > > > > > have swept it aside with a casual "It's good enough."  Let's see
> > > > > > replica island switch to constant-touch controls (virtual joystick 
> > > > > > or
> > > > > > virtual dpad) and retain framerates over 20 with that input scheme 
> > > > > > on
> > > > > > any MSM7200-based device.
>
> > > > > > I'm a little frustrated.  I've spent the last 6 months writing two
> > > > > > really nice games (Best work I've ever done in my 11 year 
> > > > > > programming
> > > > > > career, in fact) and this is their main issue now.  They run 
> > > > > > fantastic
> > > > > > on the Droid and N1, of course, and even get solid framerates on the
> > > > > > MSM7200 up until you touch the screen... Then it's lag-city all the
> > > > > > way home.
>
> > > > > > I'm ready to put up a decent cash bounty for someone that can 
> > > > > > provide
> > > > > > a reliable solution to this that doesn't involve me taking away the
> > > > > > constant-touch controls.  Contact me if you have experience fixing
> > > > > > this problem and are sure you can do it.
>
> > > > > > On Apr 18, 5:41 am, Mario Zechner <[email protected]> wrote:
> > > > > > > I can confirm that the issue is still there in Android 2.0.1 on my
> > > > > > > Milestone as well (and more pronounced) on my HTC Hero which still
> > > > > > > runs 1.5. I put together a quick test that you can download 
> > > > > > > fromhttp://
> > > > > > file-pasta.com/file/0/touchflood.apk(Note<http://file-pasta.com/file/0/touchflood.apk%28Note>:
> > > > > > it's 300kb because
> > > > > > > i used a game dev framework to put that together which features a 
> > > > > > > bit
> > > > > > > more than is needed).
>
> > > > > > > Observations on 2.0.1:
> > > > > > > - Touching alone decreases the performance a bit, around 2-4 
> > > > > > > frames
> > > > > > > are lost
> > > > > > > - Touching and moving the finger around makes things works, the 
> > > > > > > frame
> > > > > > > rate drops by up to 8fps
> > > > > > > - The slow down is not constant but fluctuates a lot.
> > > > > > > - Sleeping in onTouch does not solve the problem at all (sleep 
> > > > > > > times
> > > > > > > from 16 to 40ms) but only increases the lag in user input
>
> > > > > > > At least there's no garbage collection in 2.0.1 anymore due to 
> > > > > > > touch
> > > > > > > events.
>
> > > > > > > On 18 Apr., 11:46, Robert Green <[email protected]> wrote:
>
> > > > > > > > Actually I take it back about the emulators.  I just tested 
> > > > > > > > again in
> > > > > > > > the 2.1 emulator and realized that in my first test, I was 
> > > > > > > > holding the
> > > > > > > > "finger" down on the screen but unlike a device, it doesn't send
> > > > > > > > constant motion events if you hold the cursor still.  Moving the
> > > > > > > > cursor (touch) around caused the same problem as on 1.6!  Now 
> > > > > > > > I'm a
> > > > > > > > little worried.  Is this problem really still not fixed?
>
> > > > > > > > On Apr 18, 4:30 am, Robert Green <[email protected]> wrote:
>
> > > > > > > > > Just wondering if anyone can speak on this yet.  I'd really 
> > > > > > > > > like to
> > > > > > > > > know what the state of that fix is as 2.1 is rolled out onto 
> > > > > > > > > first
> > > > > > > > > generation (MSM7200-based) devices.  As it stands, I don't 
> > > > > > > > > see much
> > > > > > of
> > > > > > > > > a problem with touch eating up CPU on the Droid and N1 but 
> > > > > > > > > those are
> > > > > > > > > much faster phones so I don't think it would be quite as 
> > > > > > > > > pronounced
> > > > > > on
> > > > > > > > > them.  My current 1.6 devices (G1 and Tattoo) cut my 
> > > > > > > > > framerates in
> > > > > > > > > half during any touch (with the sleep hack, even).  I 
> > > > > > > > > optimized my
> > > > > > new
> > > > > > > > > games so that they would run well-enough (25-40fps) on that 
> > > > > > > > > hardware
> > > > > > > > > but they have very touch-centric interfaces so won't work 
> > > > > > > > > well with
> > > > > > > > > that bug.  I talked to a few people who run 2.0/2.1 mods on 
> > > > > > > > > their G1s
> > > > > > > > > and they said the problem isn't any better.  They still see 
> > > > > > > > > the big
> > > > > > > > > slowdown.  I tested on my 1.6 emulator vs a 2.1 emulator and 
> > > > > > > > > there is
> > > > > > > > > a huge improvement.  The 1.6 emulator
>
> ...
>
> read more »- Hide quoted text -
>
> - Show quoted text -

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to