Dianne, I want to thank you again for your advice - it actually
helped. I process at most 10 touch movement events per second (good
enough for the app) and sleep the UI thread after the moves - this did
boost the second thread enough so that most of the app's time is spent
in physics updates and drawing.

Thanks again,
Stoyan

On Sat, Jan 10, 2009 at 3:51 AM, Stoyan Damov <stoyan.da...@gmail.com> wrote:
> I'll add that the time consumed by my view's onFingerMove is 2/3 of
> the time to call (MotionEvent.getAction + .getX() + .getY()) - that
> is, I'm pretty sure I'm not doing anything funny in my touch event's
> handler.
>
> On Sat, Jan 10, 2009 at 3:14 AM, Stoyan Damov <stoyan.da...@gmail.com> wrote:
>> On Sat, Jan 10, 2009 at 12:49 AM, Dianne Hackborn <hack...@android.com> 
>> wrote:
>>> On Fri, Jan 9, 2009 at 1:22 PM, Stoyan Damov <stoyan.da...@gmail.com> wrote:
>>>>
>>>> I do "yield" to the main thread by calling mainActivity.runOnUiThread
>>>> w/ a no-op (cached) runnable once per second but I guess that's not
>>>> enough. I'll try increasing that to see if it will make a difference.
>>>> I'd rather run the game @ 40 fps by losing ~15 fps because of yielding
>>>> than losing ~30 fps because of touch event throttling.
>>>
>>> If I am reading that right, that's not a yield, that is just adding more CPU
>>> using work on the main thread. :)  What you want to do is force the main
>>> thread to actually stop running for a bit after processing an event, so that
>>> it isn't using the CPU and your other thread can run and the window manager
>>> doesn't immediately turn around and give you another event with more work to
>>> do.
>>
>> Now you got me confused :) but let me 1st explain that by yielding I
>> meant that the game thread yielded to the UI one.
>>
>> My confusion (now) is that I thought (after your post) that the main
>> UI thread was not given enough time to process touch events and the OS
>> was doing something (more work) because of that and was leaving my app
>> with less time to work. You're now saying it's the opposite, but that
>> can't be the problem because before I added the yields, the game
>> thread was running at full speed and the UI was so unresponsive (e.g.
>> clicking the Menu button resulted in ANR) that I had to do something
>> about it and start yielding to the UI thread from the game one
>> occasionally.
>>
>> However, I realize that you're not really saying to not let the UI
>> thread work but to make it unresponsive for a bit every now and then
>> (after an event is processed) so that the game thread works more and
>> less context switches (made by Android's thread scheduling mechanism,
>> not by me marshalling calls) occur. Is that what you're saying?
>>
>> Now just before I was about to post this, I profiled the game and let
>> me share some *very* interesting facts about the touch handling.
>>
>> I ran the game, touched (which triggers the profile start process),
>> and immediately removed my finger from the screen and let the
>> profiling finish.
>> What I saw in Traceview is that 64.7% of the game's time went in
>> drawing (which is great!), 33.8% in the game's update, and
>> android.os.Handler.dispatchMessage(Message) takes the funny 0.2% - I'm
>> mentioning dispatchMessage here because you'll see a DRASTIC change in
>> a second.
>>
>> I then ran the game, touched the screen and started moving my finger
>> without releasing it until the profiling stopped.
>> What I saw in Traceview is that 49.1% went in the game's update code,
>> only 9% in the draw code and now for the winner -
>> Handler.dispatchMessage took 24.7% of the time :O :O :O
>> This only makes me think that my assumption that the layers below the
>> app are doing something more than expected :(
>> I'm yet to find out why would the update vs draw time is 49% to 9%
>> (maybe locking the canvas and event handling on the UI thread are
>> somewhat related???), but having an overhead of 25% just because I'm
>> touching the screen is too much for me.
>>
>> Cheers
>>
>>>
>>>>
>>>> I'd rather "control" the priority myself :)
>>>
>>> How are you going to control the priority yourself?
>>
>> Now that you understand what I meant by yielding (that is, not to the
>> OS but from the game to the main/UI thread) I guess that question is
>> moot.
>>
>> Cheers
>>
>>>
>>> --
>>> Dianne Hackborn
>>> Android framework engineer
>>> hack...@android.com
>>>
>>> Note: please don't send private questions to me, as I don't have time to
>>> provide private support.  All such questions should be posted on public
>>> forums, where I and others can see and answer them.
>>>
>>>
>>> >>>
>>>
>>
>

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

Reply via email to