Closed
Bug 886219
Opened 11 years ago
Closed 11 years ago
Get async-video enabled on OSX
Categories
(Core :: Graphics: Layers, defect)
Tracking
()
RESOLVED
FIXED
mozilla27
People
(Reporter: mattwoodrow, Assigned: mattwoodrow)
References
Details
Attachments
(5 files, 2 obsolete files)
(deleted),
patch
|
nical
:
review+
|
Details | Diff | Splinter Review |
(deleted),
patch
|
nical
:
review+
|
Details | Diff | Splinter Review |
(deleted),
patch
|
nical
:
review+
|
Details | Diff | Splinter Review |
(deleted),
patch
|
nical
:
review+
|
Details | Diff | Splinter Review |
(deleted),
patch
|
nical
:
review+
|
Details | Diff | Splinter Review |
https://tbpl.mozilla.org/?tree=Try&rev=2d193e892924
Looks like 3 different leaks, a reftest failure and an abort on M1.
I have patches for some of these, working on it.
Assignee | ||
Updated•11 years ago
|
Assignee: nobody → matt.woodrow
Assignee | ||
Comment 1•11 years ago
|
||
The reftest failure is because the video plays async, and nothing ever notifies the reftest harness that it needs to take a new snapshot.
This adds a forced invalidation when the video ends, so that we get a layers transaction (and MozAfterPaint) event.
Attachment #766534 -
Flags: review?(nical.bugzilla)
Assignee | ||
Comment 2•11 years ago
|
||
Basically the same as we do with CompositorParent in nsBaseWidget.
Attachment #766535 -
Flags: review?(nical.bugzilla)
Assignee | ||
Comment 3•11 years ago
|
||
Note: This is obviously wrong, and will crash when we're running ImageBridgeChild from a different process.
The problem here is that we often try to release these images from the compositor side. The compositable is double buffered, so most frames get passed back to the ImageBridgeChild to be released correctly.
The very last frame (when we kill the texture host) is still owned by the compositor, and currently we just leak it.
This patch fixes the leak for in-process ImageBridge, but we need something better for cross-process. Ideas?
Attachment #766536 -
Flags: feedback?(nical.bugzilla)
Assignee | ||
Comment 4•11 years ago
|
||
I haven't been able to reproduce the M1 crash, but I believe it's the same issue as the third patch.
We try release the YCbCr image on the compositor side, and since we skip over the owner check, we just release it. We then get a bad shmem error, which I assume is because it's already been released.
It's not obvious how we actually release the shmem while still holding a reference to the SharedPlanarYCbCr image though. I might be missing something.
Comment 5•11 years ago
|
||
Comment on attachment 766534 [details] [diff] [review]
Force an invalidation when the video ends
Review of attachment 766534 [details] [diff] [review]:
-----------------------------------------------------------------
::: content/media/VideoFrameContainer.h
@@ +59,5 @@
> + enum {
> + INVALIDATE_DEFAULT,
> + INVALIDATE_FORCE
> + };
> + void Invalidate() { InvalidateWithFlags(INVALIDATE_DEFAULT); }
nit: a little comments about what this does and how DEFAULT behaves differently than FORCE would be nice.
Attachment #766534 -
Flags: review?(nical.bugzilla) → review+
Updated•11 years ago
|
Attachment #766535 -
Flags: review?(nical.bugzilla) → review+
Comment 6•11 years ago
|
||
Comment on attachment 766536 [details] [diff] [review]
Always release the YCbCr image
Review of attachment 766536 [details] [diff] [review]:
-----------------------------------------------------------------
If you do this you will deadlock sometimes. ReleaseOwnedSurfaceDescriptor will internally dispatch a synchronous task on the ImageBridgeChild thread so you can't call it from the parent side. In any case, releasing a shared YCbCrImage from the parent side is dangerous because there can be one or several references to the image on the child side on several different threads. This awful situation is one of the reasons for the texture client/host rewrite that I am working on.
Attachment #766536 -
Flags: feedback?(nical.bugzilla) → feedback-
Comment 7•11 years ago
|
||
(In reply to Matt Woodrow (:mattwoodrow) from comment #4)
> It's not obvious how we actually release the shmem while still holding a
> reference to the SharedPlanarYCbCr image though. I might be missing
> something.
iirc we release it by dropping the reference to the SharedPlanarYCbCrImage, and the shmem is destroyed by something that is triggered by the SharedPlanarYCbCrImage's destructor.
In bug 858914 I am making it so when you destroy the TextureClient that owns the Shmem you have the insurance that the shmem will be destroyed, which is tricky to do right now because TextureClient doesn't own the shmem. So it will fix this problem (which greatly motivated bug 858914 in the first place)
Assignee | ||
Comment 8•11 years ago
|
||
The final leak (a few gfxImageSurfaces) appear to also be the same bug :)
It's leaking the mSurface image on a SharedPlanarYCbCrImage.
Nical: I'll mark bug 858914 as blocking this one, and hopefully it resolves these issues.
Depends on: 858914
Assignee | ||
Comment 9•11 years ago
|
||
https://tbpl.mozilla.org/?tree=Try&rev=74a73cd2da42
The only bug that shows up is the assertion crash.
From what I can tell, we can't release the ImageClient (created by the ImageBridgeChild) on the main thread.
This patch forces us to always release it from the image bridge thread, and seems to fix the issue.
Just f? for now since it needs more cleanup before I could land it.
Attachment #810367 -
Flags: feedback?(nical.bugzilla)
Comment 10•11 years ago
|
||
Comment on attachment 810367 [details] [diff] [review]
Release CompositableClients on the right thread
Review of attachment 810367 [details] [diff] [review]:
-----------------------------------------------------------------
::: gfx/layers/ImageContainer.cpp
@@ +149,5 @@
>
> if (mImageClient) {
> nsRefPtr<Image> img = mImageClient->CreateImage((uint32_t*)aFormats,
> + aNumFormats,
> + true);
I am not super found of adding a boolean parameter for async stuff here.
Actually you don't need to store this information, please check for (mImageClient->GetAsyncID() != 0) instead, non-zero async id means the ImageClient is used by ImageBridge
::: gfx/layers/client/ImageClient.cpp
@@ +490,3 @@
> return img.forget();
> case SHARED_RGB:
> img = new SharedRGBImage(this);
You should provide the same fix for SharedRGBImage too
::: gfx/layers/ipc/SharedPlanarYCbCrImage.cpp
@@ +37,5 @@
>
> SharedPlanarYCbCrImage::~SharedPlanarYCbCrImage() {
> MOZ_COUNT_DTOR(SharedPlanarYCbCrImage);
> +
> + if (mAsync) {
&& !InImageBridgeChildThread()
Attachment #810367 -
Flags: feedback?(nical.bugzilla) → feedback-
Assignee | ||
Comment 11•11 years ago
|
||
Attachment #766536 -
Attachment is obsolete: true
Attachment #810367 -
Attachment is obsolete: true
Attachment #810974 -
Flags: review?(nical.bugzilla)
Assignee | ||
Comment 12•11 years ago
|
||
Attachment #810975 -
Flags: review?(nical.bugzilla)
Comment 13•11 years ago
|
||
Comment on attachment 810974 [details] [diff] [review]
Release CompositableClients on the right thread v2
Review of attachment 810974 [details] [diff] [review]:
-----------------------------------------------------------------
awesome
Attachment #810974 -
Flags: review?(nical.bugzilla) → review+
Updated•11 years ago
|
Attachment #810975 -
Flags: review?(nical.bugzilla) → review+
Assignee | ||
Comment 14•11 years ago
|
||
Comment 15•11 years ago
|
||
https://hg.mozilla.org/mozilla-central/rev/f78208b337db
https://hg.mozilla.org/mozilla-central/rev/1af25db786e4
https://hg.mozilla.org/mozilla-central/rev/663ec5436747
https://hg.mozilla.org/mozilla-central/rev/5f7917ea7b9f
Status: NEW → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla27
Comment 16•11 years ago
|
||
One review will be enough, whoever does it first clears the other review flag.
Attachment #825440 -
Flags: review?(nical.bugzilla)
Attachment #825440 -
Flags: review?(matt.woodrow)
Comment 17•11 years ago
|
||
Comment on attachment 825440 [details] [diff] [review]
Avoid introducing a global constructor
Review of attachment 825440 [details] [diff] [review]:
-----------------------------------------------------------------
First!
Attachment #825440 -
Flags: review?(matt.woodrow)
Comment 18•11 years ago
|
||
Great! Now all I have to do is wait for inbound to reopen!
Updated•11 years ago
|
Attachment #825440 -
Flags: review?(nical.bugzilla) → review+
Comment 19•11 years ago
|
||
Comment 20•11 years ago
|
||
You need to log in
before you can comment on or make changes to this bug.
Description
•