Closed Bug 882384 Opened 11 years ago Closed 11 years ago

URL tooltip layer is not destroyed

Categories

(Core :: Layout, defect)

x86
macOS
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla28

People

(Reporter: BenWa, Unassigned)

References

(Blocks 1 open bug)

Details

Attachments

(2 files)

STR: 1) Turn on OMTC + Layer border 2) Hover over a link to get a url tooltip layer 3) Unhover to have it fade out and be destroyed 4) Click on the page background The layer reappears and remains as a transparent layer.
Actually I think we need to up the priority of this bug. What happens is sometimes the tabbar needs to merge something with the layer. I believe the code has to allocate a big drawing buffer/texture to achieve this making this expensive and temporary.
CC'ing mconley for something that could impact australis perf.
Flags: needinfo?(matt.woodrow)
I have never been able to reproduce this a debug build with a debugger attached :(
Flags: needinfo?(matt.woodrow)
Ok, managed to reproduce it using my default profile. We have a ThebesLayer for the status bar, where the only item in it is an inactive nsDisplayOpacity, with an opacity of 0. We always build these items, and instead just refuse to build a layer for them if they are opacity 0. I think this is to make it easier to make sure that we can still build a layer if they're starting an async animation. We walk through the nsDisplayOpacity to compute visible areas/component alpha areas of the children, and come up with the size that you see. And decide that we need a component alpha layer. Then we try build the inactive layer, it fails (since opacity==0), and we never actually put anything into our layer. So it'll just sit there, taking up some memory. If we try draw it, it won't do anything. I don't think this is a big problem, but we could probably avoid building the nsDisplayOpacity in the first place.
(In reply to Matt Woodrow (:mattwoodrow) from comment #4) > I don't think this is a big problem, but we could probably avoid building > the nsDisplayOpacity in the first place. IMO it's a big problem because it forces a big layer temporarily because we also want to layerize something temporarily in the tabstrip and we're stuck creating a screen height buffer for something that will stick around half a second.
What? This has nothing to do with the tabstrip, the layer only covers the tiny rectangle in the corner.
(In reply to Matt Woodrow (:mattwoodrow) from comment #6) > What? This has nothing to do with the tabstrip, the layer only covers the > tiny rectangle in the corner. Are you rejecting the screenshot? The entire layer is represented in a single texture. When we add a tiny rect to the layer region for a fraction of a second we have to allocate a texture for it. As Jeff said when I showed him this: This needs to die in a fire!
I guess I can't really do that. It certainly wasn't allocating a big layer when I reproduced it locally at least. I'll try find time to arrange this being moved to the nearest fire today.
haha :) So it doesn't naturally happen. But it does happen when the tab is loading or some opacity change in the favicon. When the two things are true (and they aren't true for long) we go through this expensive step. I can force it but I've seen it happen by accident. I flipped |layers.componentalpha.enabled;false| locally to see how badly we need componentalpha for retina and I don't see this bug anymore. Not sure if it's a coincidence or not but it could explain something.
I think we need two fixes here. We never want the content from the status bar to merge into the same layer as content from the UI, so we should add the xul 'layer' attribute to it to enforce it's own layer. And then we should do what I suggested in comment 4 to stop the nsDisplayOpacity being created at all.
(In reply to Matt Woodrow (:mattwoodrow) from comment #10) > I think we need two fixes here. > > We never want the content from the status bar to merge into the same layer > as content from the UI, so we should add the xul 'layer' attribute to it to > enforce it's own layer. IMO fixing this is the only 'high' priority issue. Maybe we should spin that off and fix that one? > > And then we should do what I suggested in comment 4 to stop the > nsDisplayOpacity being created at all. This may be more annoying if it was mobile but it's only on desktop at the moment so meh.
Status: NEW → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla28
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: