Updating/invalidation broken for plugins running OOP on OS X

RESOLVED FIXED

Status

()

defect
--
major
RESOLVED FIXED
7 years ago
7 years ago

People

(Reporter: smichaud, Assigned: mattwoodrow)

Tracking

({regression})

Trunk
x86
macOS
Points:
---
Dependency tree / graph

Firefox Tracking Flags

(firefox18+ verified)

Details

()

Attachments

(1 attachment)

This started with today's mozilla-central nightly, and specifically with the patch for bug 795796 (http://hg.mozilla.org/mozilla-central/rev/beee809b7ade).

To see it, load one of the Flash movies on the following page, and compare what you see with the performance in yesterday's mozilla-central nightly (or in earlier FF distros).  In today's nightly, both movies update much less often than they should.

http://mirrors.creativecommons.org/

I see this bug on OS X (10.7.5), but not in Windows XP.

This bug is spun off from bug 785667.
Blocks: 795796
The bug happens whether or not HiDPI support is enabled.

To disable HiDPI support on a Retina display, set gfx.hidpi.enabled to '-1'.
I think this is bug 795796, so it should be fixed in the next nightly.
Status: NEW → RESOLVED
Closed: 7 years ago
Resolution: --- → DUPLICATE
Duplicate of bug: 795796
Oh, oops. It's a regression from that bug? Sorry.
Status: RESOLVED → REOPENED
Resolution: DUPLICATE → ---
Duplicate of this bug: 796922
This bug effects Flash and Silverlight, but not Java.  Flash and Silverlight use Core Animation, while Java uses Invalidating Core Animation.  I suspect that's the key here.

Here's an example of Java animation:
http://www.eskimo.com/support/java/demo/Animator/example1.html
Assignee: nobody → matt.woodrow
Status: REOPENED → NEW
Summary: Updating/invalidation broken for at least some plugins on OS X → Updating/invalidation broken for Core Animation plugins on OS X
Severity: normal → major
To make updating work properly in (non invalidating) Core Animation mode, we use a timer to invalidate the plugin "window" every 20 ms:

http://hg.mozilla.org/mozilla-central/annotate/345a2a8ccb18/dom/plugins/ipc/PluginInstanceChild.cpp#l553
http://hg.mozilla.org/mozilla-central/annotate/345a2a8ccb18/dom/plugins/ipc/PluginInstanceChild.cpp#l460

I suspect the patch for bug 795796 is somehow preventing most of these invalidations from having effect.

(Yes, using a timer to do this is inefficient.  And for some time we've also had support for an Invalidating Core Animation mode, in which the plugin is responsible for calling NPN_InvalidateRect() whenever all/part of the plugin needs to be updated:  https://wiki.mozilla.org/NPAPI:InvalidatingCoreAnimation.  But Flash and Silverlight haven't yet moved to Invalidating Core Animation.)
Summary: Updating/invalidation broken for Core Animation plugins on OS X → Updating/invalidation broken for (non-invalidating) Core Animation plugins on OS X
Core Graphics plugins are also effected by this bug when they run OOP (because we "borrow" the Core Animation infrastructure (using a subclass of CALayer called CGBridgeLayer) to draw Core Animation plugins when they run out-of-process).

The only example of a Core Animation plugin that I'm aware of is my Debug Events Plugin from bug 441880, which doesn't do animation.  But I've heard there are others out there.
(In reply to Steven Michaud from comment #6)
> But Flash and
> Silverlight haven't yet moved to Invalidating Core Animation.)

I don't know about Silverlight but flash certainly used ICA last time I checked
> The only example of a Core Animation plugin that I'm aware of is my Debug Events
> Plugin from bug 441880 ...

The only example of a Core *Graphics* plugin ...
> I don't know about Silverlight but flash certainly used ICA last time I checked

In my tests for bug 785667 (the latest run about a week ago) I saw Flash and Silverlight use (non-invaliding) Core Animation.
Let me try again, though (in case I made a mistake).
(Following up comment #5)

Still compiling my debugging patch.  But my hunch is falling apart in other ways:  Java plugins by default run in-process (which I'd forgotten).  But when I set Java to run out-of-process (by setting dom.ipc.plugins.java.enabled to true), it also fails to update properly.

I'll say more when I have a better hunch.
Summary: Updating/invalidation broken for (non-invalidating) Core Animation plugins on OS X → Updating/invalidation broken for plugins running OOP on OS X
I was wrong about which plugins use Core Animation and Invalidating Core Animation.  I must have misremembered.

Flash does use Invalidating Core Animation.  The version I tested with (which I think is current) is 11.4.402.265.

Silverlight and Java use (non invalidating) Core Animation.

Updated

7 years ago
Duplicate of this bug: 795919
Assignee

Comment 15

7 years ago
Thanks for looking into this Steven.
Attachment #667197 - Flags: review?(roc)
Depends on: 797173
Assignee

Comment 16

7 years ago
https://hg.mozilla.org/mozilla-central/rev/e679d2e1d02d
Status: NEW → RESOLVED
Closed: 7 years ago7 years ago
Resolution: --- → FIXED
Duplicate of this bug: 797448
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:18.0) Gecko/20100101 Firefox/18.0 

Verified as fixed on Firefox 18 beta 2 - flash movies and Silverlight animations are properly updating.
QA Contact: simona.marcu
You need to log in before you can comment on or make changes to this bug.