Closed
Bug 882384
Opened 11 years ago
Closed 11 years ago
URL tooltip layer is not destroyed
Categories
(Core :: Layout, defect)
Tracking
()
RESOLVED
FIXED
mozilla28
People
(Reporter: BenWa, Unassigned)
References
(Blocks 1 open bug)
Details
Attachments
(2 files)
1.44 MB,
image/png
|
Details | |
2.27 KB,
patch
|
roc
:
review+
|
Details | Diff | Splinter Review |
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.
Reporter | ||
Comment 1•11 years ago
|
||
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.
Reporter | ||
Comment 2•11 years ago
|
||
CC'ing mconley for something that could impact australis perf.
Flags: needinfo?(matt.woodrow)
Comment 3•11 years ago
|
||
I have never been able to reproduce this a debug build with a debugger attached :(
Flags: needinfo?(matt.woodrow)
Comment 4•11 years ago
|
||
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.
Reporter | ||
Comment 5•11 years ago
|
||
(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.
Comment 6•11 years ago
|
||
What? This has nothing to do with the tabstrip, the layer only covers the tiny rectangle in the corner.
Reporter | ||
Comment 7•11 years ago
|
||
(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!
Comment 8•11 years ago
|
||
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.
Reporter | ||
Comment 9•11 years ago
|
||
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.
Comment 10•11 years ago
|
||
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.
Reporter | ||
Comment 11•11 years ago
|
||
(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.
Comment 12•11 years ago
|
||
Attachment #8336536 -
Flags: review?(roc)
Attachment #8336536 -
Flags: review?(roc) → review+
Comment 13•11 years ago
|
||
Comment 14•11 years ago
|
||
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.
Description
•