That GLSurfaceView did not fix the issue. The freezing is still
happening. I even tried to interrupt() the GLThread from a second
thread - no success so far.


On Sep 14, 1:46 pm, Robert Green <rbgrn....@gmail.com> wrote:
> Social Hub,
>
> That's not it.  That was just a workaround for 2 sequential
> activities.  This problem is deeper than GLSurfaceView.  IMO there is
> a race condition between some code system_server calls and the
> userland app which results in mutual freeze.  It is up to the platform
> developers to solve, but our job should be to try to isolate some use
> cases that really show it well so they can fix it.
>
> On Sep 14, 10:40 am, social hub <shubem...@gmail.com> wrote:
>
>
>
> >http://code.google.com/p/andengine/source/browse/src/org/anddev/anden...
>
> > I am not the expert but
> > I was looking at andengine they have their modified glsurfaceview and they
> > say something about lockup. I am not sure that's what is happening here. my
> > 2 cents
>
> > Thanks
>
> > On Tue, Sep 14, 2010 at 10:22 AM, timedilation <udayan.k...@gmail.com>wrote:
>
> > > Any resolutions or workarounds so far on the freezing issue? I am
> > > seeing the same with my opengl app - mainly on HTC phones. I have
> > > never seen this happen on my G1 though and also never on the Motorola
> > > Droid. I am using Google recommended GLSurfaceView and all the
> > > standard stuff but the game itself is graphically fairly intensive.
>
> > > In my case too I get the same messages in logcat:
> > > WARN/SharedBufferStack(3878): waitForCondition(LockCondition) timed
> > > out ...... CPU may be pegged. trying again.
>
> > > This is what I have found from my own analysis thus far:
> > > Apparently the following code from SharedBufferStack.h must be causing
> > > these messages to be logged:
> > > //----------------------------------------
> > > template <typename T>
> > > status_t SharedBufferBase::waitForCondition(T condition)
> > > {
> > >    const SharedBufferStack& stack( *mSharedStack );
> > >    SharedClient& client( *mSharedClient );
> > >    const nsecs_t TIMEOUT = s2ns(1);
> > >    Mutex::Autolock _l(client.lock);
> > >    while ((condition()==false) &&
> > >            (stack.identity == mIdentity) &&
> > >            (stack.status == NO_ERROR))
> > >    {
> > >        status_t err = client.cv.waitRelative(client.lock, TIMEOUT);
>
> > >        // handle errors and timeouts
> > >        if (CC_UNLIKELY(err != NO_ERROR)) {
> > >            if (err == TIMED_OUT) {
> > >                if (condition()) {
> > >                    LOGE("waitForCondition(%s) timed out (identity=
> > > %d), "
> > >                        "but condition is true! We recovered but it "
> > >                        "shouldn't happen." , T::name(),
> > >                        stack.identity);
> > >                    break;
> > >                } else {
> > >                    LOGW("waitForCondition(%s) timed out "
> > >                        "(identity=%d, status=%d). "
> > >                        "CPU may be pegged. trying again.", T::name(),
> > >                        stack.identity, stack.status);
> > >                }
> > >            } else {
> > >                LOGE("waitForCondition(%s) error (%s) ",
> > >                        T::name(), strerror(-err));
> > >                return err;
> > >            }
> > >        }
> > >    }
> > >    return (stack.identity != mIdentity) ? status_t(BAD_INDEX) :
> > > stack.status;
> > > }
> > > //----------------------------------------
>
> > > The GL thread hangs indefinitely while doing the eglSwapBuffer() call.
> > > This java call maps to a JNI C++ call via the function below:
> > > (taken from this link:
>
> > >http://www.netmite.com/android/mydroid/frameworks/base/opengl/libGLES...
> > > )
>
> > > //-----------------------------------------
> > > EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface draw)
> > > {
> > >    if (!validate_display_surface(dpy, draw))
> > >        return EGL_FALSE;
> > >    egl_display_t const * const dp = get_display(dpy);
> > >    egl_surface_t const * const s = get_surface(draw);
> > >    return s->cnx->hooks->egl.eglSwapBuffers(dp->dpys[s->impl], s-
> > > >surface);
> > > }
> > > //-----------------------------------------
> > > The last line of this function I believe hooks into and makes a low
> > > level call into the GL driver library on the device. Somewhere in
> > > there might be a call that locks up and causes the main thread of my
> > > game to start spitting out those timeout (LockCondition) messages to
> > > logcat.
>
> > > On Sep 13, 6:24 pm, Jeremy Statz <jst...@gmail.com> wrote:
> > > > What I did to log this is to create a special logging class that can
> > > > output to SD card, then put a print at the top and bottom of every
> > > > function call in my wallpaper, with a fluch() after every line being
> > > > written.  This wrecks the framerate and results in a several hundred
> > > > meg log after a few hours, but means I have a reliable log of all
> > > > activity throughout the application.  Consistently, the crash occurs
> > > > in-between frames, and requires no special stimulation -- the phone
> > > > can just be sitting there running, then will suddenly die without
> > > > warning.  I'm confident saying that.
>
> > > > I've actually been using your GLWallpaperService code as a base,
> > > > though I've made a couple minor changes.  It's been quite stable
> > > > overall.  The big problem here, in my eyes, is that this appears to
> > > > affect any OpenGL using application, and is tremendously discouraging,
> > > > to the point that people pull things off the market and avoid using
> > > > OpenGL.  This hurts the platform as a whole, especially when comparing
> > > > its game library to the iPhone.
>
> > > > On top of that, while this seemed exceedingly uncommon on 2.1, I feel
> > > > like I've seen a whole lot more of it with 2.2 on my HTC Incredible.
> > > > Considering the free versions of my wallpapers have something like
> > > > three or four million downloads between them, that scares me a great
> > > > deal.  That's a lot of potentially affected users.
>
> > > > On Sep 13, 3:22 am, Robert Green <rbgrn....@gmail.com> wrote:
>
> > > > > Jeremy,
>
> > > > > It happened to me quite a bit on both 2.1 and 2.2 on every device.
> > > > > It's surely a defect of Android but so far no one has been able to
> > > > > track it down.  It's a tough one, very difficult to reproduce
> > > > > reliably.  It tends to happen more often in certain cases for reasons
> > > > > unknown to me right now, such as on an EVO running 2.1 on the third
> > > > > level of Deadly Chambers if you play it straight through.  Since that
> > > > > takes 20 minutes, it's impossible to figure out by logging because
> > > > > it's just way too much.  Breakpoints don't work because the game
> > > > > doesn't run fast enough in debug mode and debugging doesn't work
> > > > > anyways once the lockup has happened.
>
> > > > > It's pretty much a worse case scenario - a very fatal, very
> > > > > intermittent bug that breaks debugging and is nearly impossible to
> > > > > isolate.
>
> > > > > I hope some genius out there can figure this one out.  I couldn't even
> > > > > get close.
>
> > > > > On Sep 12, 10:34 pm, Jeremy Statz <jst...@gmail.com> wrote:
>
> > > > > > There's been a couple threads about this in the last year or so, but
> > > I
> > > > > > wanted to draw attention to it again, as I've spent most of the last
> > > > > > couple of days trying to confirm it wasn't anything I'm doing.
>
> > > > > > The short story is, I'm pretty sure there's a very serious
> > > lock-up-the-
> > > > > > phone level bug that happens when using OpenGL applications.  When 
> > > > > > it
> > > > > > occurs the phone will freeze for at least two minutes before
> > > rebooting
> > > > > > itself, sometimes requiring that the battery be pulled.  This didn't
> > > > > > seem to happen often on 2.1, but I'm seeing it with a lot more
> > > > > > regularity on 2.2 (particularly on HTC phones, though that may be a
> > > > > > coincidence) and am really hoping to draw some attention from 
> > > > > > someone
> > > > > > in a position to fix it.  Typically, you'll end up seeing hundreds 
> > > > > > of
> > > > > > lines of this in the LogCat log:
>
> > > > > > WARN/SharedBufferStack(2005): waitForCondition(LockCondition) timed
> > > > > > out (identity=9, status=0). CPU may be pegged. trying again.
> > > > > > WARN/SharedBufferStack(71): waitForCondition(LockCondition) timed 
> > > > > > out
> > > > > > (identity=9, status=0). CPU may be pegged. trying again.
>
> > > > > > There won't be any callstack or error of any kind preceding this.  
> > > > > > In
> > > > > > this case 2005 is my app (a live wallpaper), and 71 appears to be 
> > > > > > the
> > > > > > UI/system process.  I'm assuming this is a race condition within
> > > > > > SharedBufferStack.  I've seen cases where four or five process IDs
> > > > > > were all printing the message, all OpenGL apps of some kind.
>
> > > > > > Replicating the problem is very, very difficult and seems very
> > > > > > random... in the last case I had to leave the wallpaper running and
> > > > > > active on the home screen for about seven hours before it occurred.
> > > > > > Sometimes I've had it go days, other times it'll happen within a few
> > > > > > minutes.  My log output demonstrates no unusual activity at all
> > > before
> > > > > > the crash, loading/unloading/visibility/etc doesn't seem to be a
> > > > > > factor.  It's very rare.
>
> > > > > > I kind of feel like this got glossed over the last couple times
> > > people
> > > > > > have reported it here, but based on my reading it's a long-standing
> > > > > > problem with Android and OpenGL and is having a chilling effect on
> > > its
> > > > > > usage.  Is there anyone who can explain if there's anything I can do
> > > > > > to discourage problems here?  This is beyond my ken honestly, does
> > > > > > anyone know this part of the system well?
>
> > > --
> > > You received this message because you are subscribed to the Google
> > > Groups "Android Developers" group.
> > > To
>
> ...
>
> read more »

-- 
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