Closed Bug 1108978 Opened 10 years ago Closed 10 years ago

Crash in debug build CompositorOGL::CreateRenderTarget MOZ_ASSERT

Categories

(Core :: Graphics: Layers, defect)

ARM
Gonk (Firefox OS)
defect
Not set
normal

Tracking

()

RESOLVED DUPLICATE of bug 1103258

People

(Reporter: ayang, Assigned: ethlin)

Details

Attachments

(1 file)

1. Play any video in http://people.mozilla.org/~cpearce/video/.
2. Press home key.
3. Bring the app to foreground.

http://dxr.mozilla.org/mozilla-central/source/gfx/layers/opengl/CompositorOGL.cpp?from=CompositorOGL.cpp:455#455

0xb4714e92 in mozilla::layers::CompositorOGL::CreateRenderTarget (this=0xaf686970, aRect=..., aInit=mozilla::layers::INIT_MODE_CLEAR) at ../../../gfx/layers/opengl/CompositorOGL.cpp:455
455	  MOZ_ASSERT(aRect.width != 0 && aRect.height != 0, "Trying to create a render target of invalid size");
(gdb) bt
#0  0xb4714e92 in mozilla::layers::CompositorOGL::CreateRenderTarget (this=0xaf686970, aRect=..., aInit=mozilla::layers::INIT_MODE_CLEAR) at ../../../gfx/layers/opengl/CompositorOGL.cpp:455
#1  0xb46f1d5a in mozilla::layers::CreateOrRecycleTarget<mozilla::layers::ContainerLayerComposite> (aContainer=aContainer@entry=0xae705800, aManager=aManager@entry=0xae86e600)
    at ../../../gfx/layers/composite/ContainerLayerComposite.cpp:423
#2  0xb46f9de8 in mozilla::layers::ContainerPrepare<mozilla::layers::ContainerLayerComposite> (aContainer=0xae705800, aManager=0xae86e600, aClipRect=...) at ../../../gfx/layers/composite/ContainerLayerComposite.cpp:311
#3  0xb46f9d48 in mozilla::layers::ContainerPrepare<mozilla::layers::ContainerLayerComposite> (aContainer=0xb23d7c00, aManager=0xae86e600, aClipRect=...) at ../../../gfx/layers/composite/ContainerLayerComposite.cpp:285
#4  0xb46f9d48 in mozilla::layers::ContainerPrepare<mozilla::layers::ContainerLayerComposite> (aContainer=0xb128b800, aManager=0xae86e600, aClipRect=...) at ../../../gfx/layers/composite/ContainerLayerComposite.cpp:285
#5  0xb46f7118 in mozilla::layers::LayerManagerComposite::Render (this=this@entry=0xae86e600) at ../../../gfx/layers/composite/LayerManagerComposite.cpp:722
#6  0xb46f7508 in EndTransaction (aFlags=<optimized out>, this=0xae86e600, aCallback=<optimized out>, aCallbackData=<optimized out>) at ../../../gfx/layers/composite/LayerManagerComposite.cpp:309
#7  mozilla::layers::LayerManagerComposite::EndTransaction (this=0xae86e600, aCallback=<optimized out>, aCallbackData=<optimized out>, aFlags=<optimized out>) at ../../../gfx/layers/composite/LayerManagerComposite.cpp:261
#8  0xb46f75ee in mozilla::layers::LayerManagerComposite::EndEmptyTransaction (this=0xae86e600, aFlags=aFlags@entry=mozilla::layers::LayerManager::END_DEFAULT) at ../../../gfx/layers/composite/LayerManagerComposite.cpp:256
#9  0xb470dfba in mozilla::layers::CompositorParent::CompositeToTarget (this=0xabc62800, aTarget=0x0, aRect=<optimized out>) at ../../../gfx/layers/ipc/CompositorParent.cpp:903
#10 0xb46fca10 in DispatchToMethod<mozilla::layers::CompositorParent, void (mozilla::layers::CompositorParent::*)(mozilla::TimeStamp), mozilla::TimeStamp> (arg=..., method=
    (void (mozilla::layers::CompositorParent::*)(mozilla::layers::CompositorParent * const, mozilla::TimeStamp)) 0xb470e109 <mozilla::layers::CompositorParent::CompositeCallback(mozilla::TimeStamp)>, obj=<optimized out>)
    at ../../../ipc/chromium/src/base/tuple.h:393
#11 RunnableMethod<mozilla::layers::CompositorParent, void (mozilla::layers::CompositorParent::*)(mozilla::TimeStamp), Tuple1<mozilla::TimeStamp> >::Run (this=<optimized out>) at ../../../ipc/chromium/src/base/task.h:307
#12 0xb43a52bc in MessageLoop::RunTask (this=0xb2f0dcc0, task=0xad510af0) at ../../../ipc/chromium/src/base/message_loop.cc:361
#13 0xb43a846a in MessageLoop::DeferOrRunPendingTask (this=<optimized out>, pending_task=...) at ../../../ipc/chromium/src/base/message_loop.cc:369
#14 0xb43aa220 in DoWork (this=<optimized out>) at ../../../ipc/chromium/src/base/message_loop.cc:447
#15 MessageLoop::DoWork (this=0xb2f0dcc0) at ../../../ipc/chromium/src/base/message_loop.cc:426
#16 0xb43a5398 in base::MessagePumpDefault::Run (this=0xaaf0e420, delegate=0xb2f0dcc0) at ../../../ipc/chromium/src/base/message_pump_default.cc:34
#17 0xb43a6404 in MessageLoop::RunInternal (this=this@entry=0xb2f0dcc0) at ../../../ipc/chromium/src/base/message_loop.cc:233
#18 0xb43a641e in RunHandler (this=0xb2f0dcc0) at ../../../ipc/chromium/src/base/message_loop.cc:226
#19 MessageLoop::Run (this=this@entry=0xb2f0dcc0) at ../../../ipc/chromium/src/base/message_loop.cc:200
#20 0xb43ac13c in base::Thread::ThreadMain (this=0xb125f9a0) at ../../../ipc/chromium/src/base/thread.cc:170
#21 0xb439f094 in ThreadFunc (closure=<optimized out>) at ../../../ipc/chromium/src/base/platform_thread_posix.cc:39
#22 0xb6e8a22c in __thread_entry (func=0xb439f08d <ThreadFunc(void*)>, arg=0xb125f9a0, tls=0xb2f0ddd0) at bionic/libc/bionic/pthread_create.cpp:105
#23 0xb6e8a3c4 in pthread_create (thread_out=0xb125f9a8, attr=<optimized out>, start_routine=0xb439f08d <ThreadFunc(void*)>, arg=0x78) at bionic/libc/bionic/pthread_create.cpp:224
#24 0x00000000 in ?? ()
Ethan, please help to look at this issue.
Flags: needinfo?(etlin)
OS: Mac OS X → Gonk (Firefox OS)
Hardware: x86 → ARM
According to Bug 1054581, it is not recommended to create a zero-sized render target and the assertion only for debug build. So we should check the surface size before creating render target.
Flags: needinfo?(etlin)
Assignee: nobody → etlin
We shouldn't create a empty render target so add a check for surface size before creating render target.
Attachment #8534767 - Flags: feedback?(hshih)
Comment on attachment 8534767 [details] [diff] [review]
v1 - check surface size if it is valid before creating render target

If we got a zero size visibleRect, we will just return a nullptr surface.
And we will just skip this rendering task at [1]. It looks fine to me.

[1]
http://dxr.mozilla.org/mozilla-central/source/gfx/layers/composite/ContainerLayerComposite.cpp#460
Attachment #8534767 - Flags: feedback?(hshih) → feedback+
Bug 890279 add an extra condition at [1] for ScrollInfoLayers, so the "Prepare" action will traverse all container layers even they are empty. Do we still need this condition when preparing render target?

[1]
http://dxr.mozilla.org/mozilla-central/source/gfx/layers/composite/ContainerLayerComposite.cpp#271
Flags: needinfo?(bgirard)
I think this is a dupe of bug 1103258.
Flags: needinfo?(bgirard)
I check the test case in Bug 1103258 and problem is the same, so set to dupe.
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: --- → DUPLICATE
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: