Closed Bug 602659 Opened 14 years ago Closed 14 years ago

<video> playback is twitchy / possessed by the devil with OpenGL layers

Categories

(Core :: Graphics, defect)

x86
All
defect
Not set
normal

Tracking

()

RESOLVED FIXED
Tracking Status
blocking2.0 --- beta7+

People

(Reporter: beltzner, Assigned: bjacob)

References

()

Details

Attachments

(4 files, 1 obsolete file)

Seems to be OSX only, but playback of:

http://videos.mozilla.org/serv/mobile/meetFFXmobile2-640x360.webm

shows some bizarre twitching around keyframes. Audio is fine. Works fine in Chrome. Checking against previous beta, suspect OpenGL layers.
Disabling HW acceleration on OSX results in smooth playback. Moving to Core::GFX.
Component: Video/Audio → Graphics
QA Contact: video.audio → thebes
Summary: webm video playback is twitchy / possessed by the devil → webm video playback is twitchy / possessed by the devil with opengl acceleration on OSX
blocking2.0: --- → ?
blocking2.0: ? → betaN+
I notice the same issues on Linux. Not OSX specific.

Also, Armen reported the same with Theora playback. Not WebM specific.

Confirming that the issue goes away when disabling GL layers.
OS: Mac OS X → All
Summary: webm video playback is twitchy / possessed by the devil with opengl acceleration on OSX → WebM and Theora video playback is twitchy / possessed by the devil with OpenGL layers
Summary: WebM and Theora video playback is twitchy / possessed by the devil with OpenGL layers → <video> playback is twitchy / possessed by the devil with OpenGL layers
Attached patch move some mutex locking (deleted) — Splinter Review
This doesn't fix the bug reported there (unfortunately).

But (it seems to me that) it fixes a potential texture leak under a race condition where RecycleTexture() and Allocate() would run concurrently.
Attachment #481892 - Flags: review?(roc)
Comment on attachment 481892 [details] [diff] [review]
move some mutex locking

I don't think this is needed. IsAllocated doesn't read any data protected by mLock. RecycleTexture's call to IsAllocated can't race with Allocate on the same texture object since the former is only called when we're destroying the PlanarYCbCrImage that owns the texture, and the latter is only called when we're doing PlanarYCbCrImage::AllocateTextures on the PlanarYCbCrImage that owns the texture, and *those* had better not be racing!

However, I'm going to approve this patch anyway since there's no advantage to depending on that.
Attachment #481892 - Flags: review?(roc) → review+
This patch disables the recycling of buffers, which "fixes" the problem.

Only intended as debugging experiment, not suggesting we push this!

Except perhaps to beta7 branch if nobody sees a better fix right now AND if it's not evil (??)
Assignee: nobody → bjacob
I added printfs in PlanarYCbCrImageOGL::SetData() and that gave me a SIGILL, so I valground it and got this:

==3109== Syscall param ioctl(generic) points to uninitialised byte(s)
==3109==    at 0x385BED95A7: ioctl (in /lib64/libc-2.12.so)
==3109==    by 0x386F4848C7: ??? (in /usr/lib64/nvidia/libGLcore.so.195.36.31)
==3109==    by 0x386F00B62E: ??? (in /usr/lib64/nvidia/libGLcore.so.195.36.31)
==3109==    by 0x6FFFFFFFF: ???
==3109==    by 0x7FEFFCE77: ???
==3109==    by 0x7FEFFCE67: ???
==3109==    by 0x7FEFFCE77: ???
==3109==  Address 0x7feffcd48 is on thread 1's stack
==3109==  Uninitialised value was created by a stack allocation
==3109==    at 0x386F00B500: ??? (in /usr/lib64/nvidia/libGLcore.so.195.36.31)
==3109== 
++DOMWINDOW == 11 (0x15227968) [serial = 11] [outer = 0x1773dc90]
vex amd64->IR: unhandled instruction bytes: 0xF 0xB 0x90 0x48 0x83 0xC4
==3109== valgrind: Unrecognised instruction at address 0x6afeed6.
==3109== Your program just tried to execute an instruction that Valgrind
==3109== did not recognise.  There are two possible reasons for this.
==3109== 1. Your program has a bug and erroneously jumped to a non-code
==3109==    location.  If you are running Memcheck and you just saw a
==3109==    warning about a bad jump, it's probably your program's fault.
==3109== 2. The instruction is legitimate but Valgrind doesn't handle it,
==3109==    i.e. it's Valgrind's fault.  If you think this is the case or
==3109==    you are not sure, please let us know and we'll try to fix it.
==3109== Either way, Valgrind will now raise a SIGILL signal which will
==3109== probably kill your program.
*** e = [Exception... "Component returned failure code: 0x80570016 (NS_ERROR_XPC_GS_RETURNED_FAILURE) [nsIJSCID.getService]"  nsresult: "0x80570016 (NS_ERROR_XPC_GS_RETURNED_FAILURE)"  location: "JS frame :: chrome://browser/content/utilityOverlay.js :: getShellService :: line 305"  data: no]

Program dist/bin/firefox-bin (pid = 3109) received signal 4.
Stack:
UNKNOWN [/lib64/libpthread.so.0 +0x0000F440]
mozilla::layers::PlanarYCbCrImageOGL::SetData(mozilla::layers::PlanarYCbCrImage::Data const&)+0x00000578 [/home/bjacob/build/firefox/dist/bin/libxul.so +0x01ED6ED6]
UNKNOWN [/home/bjacob/build/firefox/dist/bin/libxul.so +0x0125EE95]
UNKNOWN [/home/bjacob/build/firefox/dist/bin/libxul.so +0x01280BF7]
UNKNOWN [/home/bjacob/build/firefox/dist/bin/libxul.so +0x0125FEC9]
UNKNOWN [/home/bjacob/build/firefox/dist/bin/libxul.so +0x0126032B]
UNKNOWN [/home/bjacob/build/firefox/dist/bin/libxul.so +0x0125F5BC]
UNKNOWN [/home/bjacob/build/firefox/dist/bin/libxul.so +0x0125CB8E]
UNKNOWN [/home/bjacob/build/firefox/dist/bin/libxul.so +0x0125AD63]
UNKNOWN [/home/bjacob/build/firefox/dist/bin/libxul.so +0x01D8748D]
UNKNOWN [/home/bjacob/build/firefox/dist/bin/libxul.so +0x01D137D4]
UNKNOWN [/home/bjacob/build/firefox/dist/bin/libxul.so +0x01D8660A]
UNKNOWN [/home/bjacob/build/firefox/dist/bin/libnspr4.so +0x00036CFB]
UNKNOWN [/lib64/libpthread.so.0 +0x00007761]
clone+0x0000006D [/lib64/libc.so.6 +0x000E14ED]
UNKNOWN (nil)
Sleeping for 300 seconds.
Type 'gdb dist/bin/firefox-bin 3109' to attach your debugger to this thread.
WARNING: Positioned frame that does not handle positioned kids; looking further up the parent chain: file /home/bjacob/mozilla-central/layout/base/nsCSSFrameConstructor.cpp, line 5563
WARNING: Positioned frame that does not handle positioned kids; looking further up the parent chain: file /home/bjacob/mozilla-central/layout/base/nsCSSFrameConstructor.cpp, line 5563
==3109== Conditional jump or move depends on uninitialised value(s)
==3109==    at 0x6B02853: mozilla::layers::LayerManagerOGL::Render() (LayerManagerOGL.cpp:528)
==3109==    by 0x6B02154: mozilla::layers::LayerManagerOGL::EndTransaction(void (*)(mozilla::layers::ThebesLayer*, gfxContext*, nsIntRegion const&, nsIntRegion const&, void*), void*) (LayerManagerOGL.cpp:395)
==3109==    by 0x56028F3: nsDisplayList::PaintForFrame(nsDisplayListBuilder*, nsIRenderingContext*, nsIFrame*, unsigned int) const (nsDisplayList.cpp:452)
==3109==    by 0x56022AD: nsDisplayList::PaintRoot(nsDisplayListBuilder*, nsIRenderingContext*, unsigned int) const (nsDisplayList.cpp:360)
==3109==    by 0x562FFC3: nsLayoutUtils::PaintFrame(nsIRenderingContext*, nsIFrame*, nsRegion const&, unsigned int, unsigned int) (nsLayoutUtils.cpp:1431)
==3109==    by 0x56576A0: PresShell::Paint(nsIView*, nsIView*, nsIWidget*, nsRegion const&, nsIntRegion const&, int, int) (nsPresShell.cpp:6116)
==3109==    by 0x5C39422: nsViewManager::RenderViews(nsView*, nsIWidget*, nsRegion const&, nsIntRegion const&, int, int) (nsViewManager.cpp:447)
==3109==    by 0x5C39285: nsViewManager::Refresh(nsView*, nsIWidget*, nsIntRegion const&, unsigned int) (nsViewManager.cpp:413)
==3109==    by 0x5C3A961: nsViewManager::DispatchEvent(nsGUIEvent*, nsIView*, nsEventStatus*) (nsViewManager.cpp:913)
==3109==    by 0x5C3499D: HandleEvent(nsGUIEvent*) (nsView.cpp:161)
==3109==    by 0x6622F77: nsWindow::DispatchEvent(nsGUIEvent*, nsEventStatus&) (nsWindow.cpp:731)
==3109==    by 0x6626D3D: nsWindow::OnExposeEvent(_GtkWidget*, _GdkEventExpose*) (nsWindow.cpp:2298)
==3109==  Uninitialised value was created by a heap allocation
==3109==    at 0x4A05192: malloc (vg_replace_malloc.c:236)
==3109==    by 0x83A5ECD: moz_xmalloc (mozalloc.cpp:98)
==3109==    by 0x665C888: nsBaseWidget::GetLayerManager() (mozalloc.h:226)
==3109==    by 0x58FCC73: nsContentUtils::LayerManagerForDocument(nsIDocument*) (nsContentUtils.cpp:6345)
==3109==    by 0x5B1DEE0: nsHTMLMediaElement::GetImageContainer() (nsHTMLMediaElement.cpp:2209)
==3109==    by 0x5E7CC49: nsBuiltinDecoder::Init(nsHTMLMediaElement*) (nsBuiltinDecoder.cpp:121)
==3109==    by 0x5B1C8D0: nsHTMLMediaElement::CreateDecoder(nsACString_internal const&) (nsHTMLMediaElement.cpp:1795)
==3109==    by 0x5B1CC45: nsHTMLMediaElement::InitializeDecoderForChannel(nsIChannel*, nsIStreamListener**) (nsHTMLMediaElement.cpp:1845)
==3109==    by 0x5B1A6C6: nsHTMLMediaElement::LoadWithChannel(nsIChannel*, nsIStreamListener**) (nsHTMLMediaElement.cpp:1026)
==3109==    by 0x5B5003C: nsVideoDocument::CreateSyntheticVideoDocument(nsIChannel*, nsIStreamListener**) (nsVideoDocument.cpp:125)
==3109==    by 0x5B4FD58: nsVideoDocument::StartDocumentLoad(char const*, nsIChannel*, nsILoadGroup*, nsISupports*, nsIStreamListener**, int, nsIContentSink*) (nsVideoDocument.cpp:91)
==3109==    by 0x55B1D17: nsContentDLF::CreateDocument(char const*, nsIChannel*, nsILoadGroup*, nsISupports*, nsID const&, nsIStreamListener**, nsIContentViewer**) (nsContentDLF.cpp:489)
==3109== 
==3109== Invalid read of size 8
==3109==    at 0x557D842: nsIntRect::nsIntRect(nsIntRect const&) (nsRect.h:216)
==3109==    by 0x5647444: void nsTArrayElementTraits<nsIntRect>::Construct<nsIntRect>(nsIntRect*, nsIntRect const&) (nsTArray.h:200)
==3109==    by 0x56473F1: void nsTArray<nsIntRect>::AssignRange<nsIntRect>(unsigned int, unsigned int, nsIntRect const*) (nsTArray.h:1000)
==3109==    by 0x564736E: nsIntRect* nsTArray<nsIntRect>::AppendElements<nsIntRect>(nsIntRect const*, unsigned int) (nsTArray.h:657)
==3109==    by 0x5732BA5: nsIntRect* nsTArray<nsIntRect>::AppendElement<nsIntRect>(nsIntRect const&) (nsTArray.h:671)
==3109==    by 0x6AFCC27: mozilla::gl::GLContext::PushScissorRect() (GLContext.h:922)
==3109==    by 0x6AFC590: mozilla::layers::ContainerLayerOGL::RenderLayer(int, nsIntPoint const&) (ContainerLayerOGL.cpp:160)
==3109==    by 0x6B02B73: mozilla::layers::LayerManagerOGL::Render() (LayerManagerOGL.cpp:571)
==3109==    by 0x6B02154: mozilla::layers::LayerManagerOGL::EndTransaction(void (*)(mozilla::layers::ThebesLayer*, gfxContext*, nsIntRegion const&, nsIntRegion const&, void*), void*) (LayerManagerOGL.cpp:395)
==3109==    by 0x56028F3: nsDisplayList::PaintForFrame(nsDisplayListBuilder*, nsIRenderingContext*, nsIFrame*, unsigned int) const (nsDisplayList.cpp:452)
==3109==    by 0x56022AD: nsDisplayList::PaintRoot(nsDisplayListBuilder*, nsIRenderingContext*, unsigned int) const (nsDisplayList.cpp:360)
==3109==    by 0x562FFC3: nsLayoutUtils::PaintFrame(nsIRenderingContext*, nsIFrame*, nsRegion const&, unsigned int, unsigned int) (nsLayoutUtils.cpp:1431)
==3109==  Address 0x133e6a88 is 8 bytes inside a block of size 24 free'd
==3109==    at 0x4A0528A: realloc (vg_replace_malloc.c:525)
==3109==    by 0x83A600A: moz_realloc (mozalloc.cpp:140)
==3109==    by 0x69C1699: NS_Realloc_P (nsMemoryImpl.cpp:224)
==3109==    by 0x693A96F: nsTArray_base::EnsureCapacity(unsigned int, unsigned int) (nsTArray.cpp:104)
==3109==    by 0x5647337: nsIntRect* nsTArray<nsIntRect>::AppendElements<nsIntRect>(nsIntRect const*, unsigned int) (nsTArray.h:654)
==3109==    by 0x5732BA5: nsIntRect* nsTArray<nsIntRect>::AppendElement<nsIntRect>(nsIntRect const&) (nsTArray.h:671)
==3109==    by 0x6AFCC27: mozilla::gl::GLContext::PushScissorRect() (GLContext.h:922)
==3109==    by 0x6AFC590: mozilla::layers::ContainerLayerOGL::RenderLayer(int, nsIntPoint const&) (ContainerLayerOGL.cpp:160)
==3109==    by 0x6B02B73: mozilla::layers::LayerManagerOGL::Render() (LayerManagerOGL.cpp:571)
==3109==    by 0x6B02154: mozilla::layers::LayerManagerOGL::EndTransaction(void (*)(mozilla::layers::ThebesLayer*, gfxContext*, nsIntRegion const&, nsIntRegion const&, void*), void*) (LayerManagerOGL.cpp:395)
==3109==    by 0x56028F3: nsDisplayList::PaintForFrame(nsDisplayListBuilder*, nsIRenderingContext*, nsIFrame*, unsigned int) const (nsDisplayList.cpp:452)
==3109==    by 0x56022AD: nsDisplayList::PaintRoot(nsDisplayListBuilder*, nsIRenderingContext*, unsigned int) const (nsDisplayList.cpp:360)
==3109== 
==3109== Invalid read of size 8
==3109==    at 0x557D848: nsIntRect::nsIntRect(nsIntRect const&) (nsRect.h:216)
==3109==    by 0x5647444: void nsTArrayElementTraits<nsIntRect>::Construct<nsIntRect>(nsIntRect*, nsIntRect const&) (nsTArray.h:200)
==3109==    by 0x56473F1: void nsTArray<nsIntRect>::AssignRange<nsIntRect>(unsigned int, unsigned int, nsIntRect const*) (nsTArray.h:1000)
==3109==    by 0x564736E: nsIntRect* nsTArray<nsIntRect>::AppendElements<nsIntRect>(nsIntRect const*, unsigned int) (nsTArray.h:657)
==3109==    by 0x5732BA5: nsIntRect* nsTArray<nsIntRect>::AppendElement<nsIntRect>(nsIntRect const&) (nsTArray.h:671)
==3109==    by 0x6AFCC27: mozilla::gl::GLContext::PushScissorRect() (GLContext.h:922)
==3109==    by 0x6AFC590: mozilla::layers::ContainerLayerOGL::RenderLayer(int, nsIntPoint const&) (ContainerLayerOGL.cpp:160)
==3109==    by 0x6B02B73: mozilla::layers::LayerManagerOGL::Render() (LayerManagerOGL.cpp:571)
==3109==    by 0x6B02154: mozilla::layers::LayerManagerOGL::EndTransaction(void (*)(mozilla::layers::ThebesLayer*, gfxContext*, nsIntRegion const&, nsIntRegion const&, void*), void*) (LayerManagerOGL.cpp:395)
==3109==    by 0x56028F3: nsDisplayList::PaintForFrame(nsDisplayListBuilder*, nsIRenderingContext*, nsIFrame*, unsigned int) const (nsDisplayList.cpp:452)
==3109==    by 0x56022AD: nsDisplayList::PaintRoot(nsDisplayListBuilder*, nsIRenderingContext*, unsigned int) const (nsDisplayList.cpp:360)
==3109==    by 0x562FFC3: nsLayoutUtils::PaintFrame(nsIRenderingContext*, nsIFrame*, nsRegion const&, unsigned int, unsigned int) (nsLayoutUtils.cpp:1431)
==3109==  Address 0x133e6a90 is 16 bytes inside a block of size 24 free'd
==3109==    at 0x4A0528A: realloc (vg_replace_malloc.c:525)
==3109==    by 0x83A600A: moz_realloc (mozalloc.cpp:140)
==3109==    by 0x69C1699: NS_Realloc_P (nsMemoryImpl.cpp:224)
==3109==    by 0x693A96F: nsTArray_base::EnsureCapacity(unsigned int, unsigned int) (nsTArray.cpp:104)
==3109==    by 0x5647337: nsIntRect* nsTArray<nsIntRect>::AppendElements<nsIntRect>(nsIntRect const*, unsigned int) (nsTArray.h:654)
==3109==    by 0x5732BA5: nsIntRect* nsTArray<nsIntRect>::AppendElement<nsIntRect>(nsIntRect const&) (nsTArray.h:671)
==3109==    by 0x6AFCC27: mozilla::gl::GLContext::PushScissorRect() (GLContext.h:922)
==3109==    by 0x6AFC590: mozilla::layers::ContainerLayerOGL::RenderLayer(int, nsIntPoint const&) (ContainerLayerOGL.cpp:160)
==3109==    by 0x6B02B73: mozilla::layers::LayerManagerOGL::Render() (LayerManagerOGL.cpp:571)
==3109==    by 0x6B02154: mozilla::layers::LayerManagerOGL::EndTransaction(void (*)(mozilla::layers::ThebesLayer*, gfxContext*, nsIntRegion const&, nsIntRegion const&, void*), void*) (LayerManagerOGL.cpp:395)
==3109==    by 0x56028F3: nsDisplayList::PaintForFrame(nsDisplayListBuilder*, nsIRenderingContext*, nsIFrame*, unsigned int) const (nsDisplayList.cpp:452)
==3109==    by 0x56022AD: nsDisplayList::PaintRoot(nsDisplayListBuilder*, nsIRenderingContext*, unsigned int) const (nsDisplayList.cpp:360)
==3109==
Ignore comment 9. This SIGILL is what you get when you printf a nsAutoArrayPtr! Filed a valgrind bug: https://bugs.kde.org/show_bug.cgi?id=254088
OK, some progress: thanks to Jeff's nifty SHA1 header (http://github.com/jrmuizel/sha1trunc) I was able to compute SHA1 sums for the Y channel of each video frame.

In the decoding thread, in PlanarYCbCrImageOGL::SetData(), all frames are different.

But in the display thread, in PlanarYCbCrImageOGL::UpdateTextures(), there is a lot of repetition (i.e. displaying a frame that's already been displayed). Indeed, in the first few seconds of the video URL attached to this bug, I got only 111 unique frames out of a total of 144 frames.
Most of these dupes are contiguous to each other which is OK (can't explain the twitchiness; might still be a performance issue if that means we're needlessly re-updating textures.).

But I do have a few non-contiguous dupes which does mean that an old image from the past resurfaces.
Attached patch allow to debug twitchy video (obsolete) (deleted) — Splinter Review
This patch adds a printf in PlanarYCbCrImageOGL::UpdateTextures() printing the mBuffer pointer and the SHA1 sum of the Y channel.

Moreover, if the SHA1 sum is a duplicate of a previous frame AND NOT a duplicate of the previous frame, it aborts, allowing to get a backtrace.

Here's the output I got:


[...skipped many lines...]
mBuffer = 0x7f059c305440, sum = b0a66fe1
mBuffer = 0x7f059c415e70, sum = 9242b0e
mBuffer = 0x7f05a42bab30, sum = a16a8cb4
mBuffer = 0x7f059c46a480, sum = bf87e9fb
mBuffer = (nil), sum = e0710125
mBuffer = 0x7f059c056f40, sum = 7b29b7a8
mBuffer = 0x7f059c1097a0, sum = 4922a15a
mBuffer = 0x7f059c0b0f90, sum = 5c129d5a
mBuffer = 0x7f059c15ddb0, sum = 8c65dfab
mBuffer = 0x7f059c1b23c0, sum = 9f2265f4
mBuffer = 0x7f059c2069d0, sum = 969c3d8a
mBuffer = 0x7f059c2b0410, sum = 5d04bad7
mBuffer = 0x7f059c25afe0, sum = 83331f38
mBuffer = 0x7f059c305440, sum = 8c47edbe
mBuffer = 0x7f059c415e70, sum = 11e848fc
mBuffer = 0x7f059c46a480, sum = e0710125

There, it aborts, because the SHA1 sum e0710125 already appeared above (where we got this (nil) pointer).


Backtrace:

#6  0x000000385be34185 in abort () from /lib64/libc.so.6
#7  0x00007f05d7460321 in mozalloc_abort (msg=
    0x7fff0bcae440 "###!!! ABORT: file /home/bjacob/mozilla-central/gfx/layers/opengl/ImageLayerOGL.cpp, line 616") at /home/bjacob/mozilla-central/memory/mozalloc/mozalloc_abort.cpp:75
#8  0x00007f05d95fc3e3 in Abort (aMsg=
    0x7fff0bcae440 "###!!! ABORT: file /home/bjacob/mozilla-central/gfx/layers/opengl/ImageLayerOGL.cpp, line 616") at /home/bjacob/mozilla-central/xpcom/base/nsDebugImpl.cpp:379
#9  0x00007f05d95fc305 in NS_DebugBreak_P (aSeverity=3, aStr=0x0, aExpr=0x0, aFile=
    0x7f05da0e7e18 "/home/bjacob/mozilla-central/gfx/layers/opengl/ImageLayerOGL.cpp", aLine=
    616) at /home/bjacob/mozilla-central/xpcom/base/nsDebugImpl.cpp:337
#10 0x00007f05d973e385 in mozilla::layers::PlanarYCbCrImageOGL::UpdateTextures (this=
    0x7f059c3dd700, gl=0x31f52d0)
    at /home/bjacob/mozilla-central/gfx/layers/opengl/ImageLayerOGL.cpp:616
#11 0x00007f05d973d3a3 in mozilla::layers::ImageLayerOGL::RenderLayer (this=0x36b1a80, aOffset=
    ...) at /home/bjacob/mozilla-central/gfx/layers/opengl/ImageLayerOGL.cpp:393
#12 0x00007f05d9739851 in mozilla::layers::ContainerLayerOGL::RenderLayer (this=0x36b1600, 
    aPreviousFrameBuffer=0, aOffset=...)
    at /home/bjacob/mozilla-central/gfx/layers/opengl/ContainerLayerOGL.cpp:204
#13 0x00007f05d9739851 in mozilla::layers::ContainerLayerOGL::RenderLayer (this=0x36a9a70, 
    aPreviousFrameBuffer=0, aOffset=...)
    at /home/bjacob/mozilla-central/gfx/layers/opengl/ContainerLayerOGL.cpp:204
#14 0x00007f05d9741eb4 in mozilla::layers::LayerManagerOGL::Render (this=0x2f30a10)
    at /home/bjacob/mozilla-central/gfx/layers/opengl/LayerManagerOGL.cpp:571
#15 0x00007f05d9741495 in mozilla::layers::LayerManagerOGL::EndTransaction (this=0x2f30a10, 
---Type <return> to continue, or q <return> to quit---
    aCallback=
    0x7f05d81f456a <mozilla::FrameLayerBuilder::DrawThebesLayer(mozilla::FrameLayerBuilder::ThebesLayerItemsEntry::ThebesLayer*, gfxContext*, nsIntRegion const&, nsIntRegion const&, void*)>, 
    aCallbackData=0x7fff0bcb8ab0)
    at /home/bjacob/mozilla-central/gfx/layers/opengl/LayerManagerOGL.cpp:395
#16 0x00007f05d823f8f4 in nsDisplayList::PaintForFrame (this=0x7fff0bcb9050, aBuilder=
    0x7fff0bcb8ab0, aCtx=0x0, aForFrame=0x258b638, aFlags=1)
    at /home/bjacob/mozilla-central/layout/base/nsDisplayList.cpp:452
#17 0x00007f05d823f2ae in nsDisplayList::PaintRoot (this=0x7fff0bcb9050, aBuilder=
    0x7fff0bcb8ab0, aCtx=0x0, aFlags=1)
    at /home/bjacob/mozilla-central/layout/base/nsDisplayList.cpp:360
#18 0x00007f05d826cfc4 in nsLayoutUtils::PaintFrame (aRenderingContext=0x0, aFrame=0x258b638, 
    aDirtyRegion=..., aBackstop=4294967295, aFlags=4)
    at /home/bjacob/mozilla-central/layout/base/nsLayoutUtils.cpp:1431
#19 0x00007f05d82946a1 in PresShell::Paint (this=0x2581c30, aDisplayRoot=0x2581780, 
    aViewToPaint=0x2581780, aWidgetToPaint=0x2581810, aDirtyRegion=..., aIntDirtyRegion=..., 
    aPaintDefaultBackground=0, aWillSendDidPaint=0)
    at /home/bjacob/mozilla-central/layout/base/nsPresShell.cpp:6116
#20 0x00007f05d8876423 in nsViewManager::RenderViews (this=0x2581700, aView=0x2581780, aWidget=
    0x2581810, aRegion=..., aIntRegion=..., aPaintDefaultBackground=0, aWillSendDidPaint=0)
    at /home/bjacob/mozilla-central/view/src/nsViewManager.cpp:447
#21 0x00007f05d8876286 in nsViewManager::Refresh (this=0x2581700, aView=0x2581780, aWidget=
    0x2581810, aRegion=..., aUpdateFlags=1)
    at /home/bjacob/mozilla-central/view/src/nsViewManager.cpp:413
#22 0x00007f05d8877962 in nsViewManager::DispatchEvent (this=0x2581700, aEvent=0x7fff0bcb9880, 
    aView=0x2581780, aStatus=0x7fff0bcb96f4)
    at /home/bjacob/mozilla-central/view/src/nsViewManager.cpp:913
#23 0x00007f05d887199e in HandleEvent (aEvent=0x7fff0bcb9880)
    at /home/bjacob/mozilla-central/view/src/nsView.cpp:161
#24 0x00007f05d925ff78 in nsWindow::DispatchEvent (this=0x2581810, aEvent=0x7fff0bcb9880, 
    aStatus=@0x7fff0bcb997c) at /home/bjacob/mozilla-central/widget/src/gtk2/nsWindow.cpp:731
#25 0x00007f05d9263d3e in nsWindow::OnExposeEvent (this=0x2581810, aWidget=
Attached patch allow to debug twitchy video (deleted) — Splinter Review
fix bug in previous patch.
Doesn't seem to make much of a concrete difference on the result:

(skipped many lines)
mBuffer = 0x7f06dc05ef70, sum = 2f2746c2
mBuffer = 0x7f06dc1117d0, sum = 20045bd5
mBuffer = 0x7f06dc165de0, sum = 7f2ea71d
mBuffer = (nil), sum = 7f2ea71d
mBuffer = 0x7f06dc1ba3f0, sum = d1a38fc3
mBuffer = (nil), sum = f3186a2d
mBuffer = 0x7f06dc20ea00, sum = 8efc5cfc
mBuffer = 0x7f06dc263010, sum = efc015e6
mBuffer = 0x7f06dc2b8440, sum = a77149d7
mBuffer = 0x7f06dc30d470, sum = 51c7d6a0
mBuffer = 0x7f06dc41dea0, sum = 8dae479b
mBuffer = 0x7f06dc009d30, sum = 3b0eb686
mBuffer = 0x7f06e02d2bc0, sum = d6ed3e79
mBuffer = 0x7f06dc0b8fc0, sum = 9906db7d
mBuffer = 0x7f06dc05ef70, sum = a21f51fb
mBuffer = (nil), sum = a21f51fb
mBuffer = 0x7f06dc165de0, sum = 298eaf8
mBuffer = 0x7f06dc1ba3f0, sum = f3186a2d
(aborted here)

What is funny is that I perceived twitchiness half a second before the end. This would match the place where we have a couple of (nil) lines...
Attachment #482931 - Attachment is obsolete: true
Attached patch Fix twitchy video (deleted) — Splinter Review
Vlad wrote this patch --> asking Jeff to review.
Attachment #482956 - Flags: review?(jmuizelaar)
Attachment #482956 - Flags: review?(jmuizelaar) → review+
Landed:

default:
http://hg.mozilla.org/mozilla-central/rev/e855682512d8

beta7:
http://hg.mozilla.org/mozilla-central/rev/2fe43cd24345
Status: NEW → RESOLVED
Closed: 14 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: