Closed
Bug 1125325
Opened 11 years ago
Closed 10 years ago
Web content is not rescaled when OS X moves browser window from HiDPI laptop display to external display.
Categories
(Core :: Widget: Cocoa, defect)
Tracking
()
People
(Reporter: cpeterson, Assigned: handyman)
References
(Blocks 1 open bug)
Details
(Keywords: regression)
Attachments
(6 files, 21 obsolete files)
|
251.75 KB,
image/png
|
Details | |
|
299.96 KB,
image/png
|
Details | |
|
27.75 KB,
patch
|
Details | Diff | Splinter Review | |
|
11.61 KB,
patch
|
Details | Diff | Splinter Review | |
|
2.23 KB,
patch
|
kats
:
review+
|
Details | Diff | Splinter Review |
|
1.85 KB,
patch
|
smaug
:
review+
handyman
:
feedback+
|
Details | Diff | Splinter Review |
STR:
1. Open Firefox window on Retina/HiDPI laptop.
2. Connect external display but leave Firefox window on the laptop's display.
3. Close laptop lid.
RESULT:
OS X will move the windows from laptop display to external display, but Firefox does not rescale web content for open pages. See the attached screenshot.
Pages loaded in new tabs are rendered correctly. If I change window settings, like resizing the window or toggling the Bookmarks toolbar, then Firefox rescales the web content correctly.
This is not an e10s only bug, but I suspect it is a regression from e10s HiDPI bug 1111957. I started noticing this problem in the past 2–4 weeks (and bug 1111957 was fixed 4 weeks ago).
| Reporter | ||
Comment 1•11 years ago
|
||
Attaching screenshot.
| Assignee | ||
Updated•11 years ago
|
Assignee: nobody → davidp99
Updated•11 years ago
|
Status: NEW → ASSIGNED
| Assignee | ||
Comment 2•11 years ago
|
||
Hey Chris, I'm not having any luck reproducing this now. I figured that maybe it's been fixed but I also don't see this behavior in the last nightly build still available - 1/25. Can you try this again?
Flags: needinfo?(cpeterson)
| Reporter | ||
Comment 3•11 years ago
|
||
This bug is not fixed. I see it everyday on Nightly, with or without e10s.
| Reporter | ||
Comment 4•11 years ago
|
||
Here is the about:support info from one of my MBPs that reproduce the problem. I do not have reliable STR.
Application Basics
------------------
Name: Firefox
Version: 39.0a1
Build ID: 20150224030228
Update Channel: nightly
User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko/20100101 Firefox/39.0
Multiprocess Windows: 0/1 (default: false)
Crash Reports for the Last 3 Days
---------------------------------
Report ID: bp-05d66a61-00dc-44db-8247-dc4592150225
Submitted: 15 hours ago
Report ID: bp-910969b7-70eb-4d51-857b-24b8d2150224
Submitted: 2 days ago
All Crash Reports
Extensions
----------
Name: Bugzilla Tweaks
Version: 1.12.1.1
Enabled: true
ID: jid0-qBnIpLfDFa4LpdrjhAC6vBqN20Q@jetpack
Name: BugzillaJS
Version: 3.3.1
Enabled: true
ID: jid0-NgMDcEu2B88AbzZ6ulHodW9sJzA@jetpack
Name: Charles Autoconfiguration
Version: 3.6.4
Enabled: true
ID: {3e9a3920-1b27-11da-8cd6-0800200c9a66}
Name: Gecko Profiler
Version: 1.10.17
Enabled: true
ID: jid0-edalmuivkozlouyij0lpdx548bc@jetpack
Name: is.gd Creator (fork)
Version: 0.3
Enabled: true
ID: isgdcreator@mrkschan.at.gmail.com
Name: Mass Password Reset
Version: 1.05
Enabled: true
ID: masspasswordreset@johnathan.nightingale
Name: Quora Share
Version: 0.1
Enabled: true
ID: jid1-roegsJ40q6CsFg@jetpack
Name: User Agent Switcher
Version: 0.7.3
Enabled: true
ID: {e968fc70-8f95-4ab9-9e79-304de2a71ee1}
Name: µBlock
Version: 0.8.6.0
Enabled: true
ID: {2b10c1c8-a11f-4bad-fe9c-1c11e82cac42}
Name: Adblock Plus
Version: 2.6.7
Enabled: false
ID: {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}
Name: Cloud To Butt
Version: 1.1
Enabled: false
ID: cloud-to-butt-mozilla@github.com
Name: DownloadHelper
Version: 4.9.24
Enabled: false
ID: {b9db16a4-6edc-47ec-a1f4-b86292ed211d}
Name: FindBar Tweak
Version: 1.4.18
Enabled: false
ID: fbt@quicksaver
Name: Firefox Interest Dashboard
Version: 0.9.1
Enabled: false
ID: firefox.interest.dashboard@up.mozilla
Name: Flip or Rotate Image
Version: 0.9
Enabled: false
ID: jid0-AGJXXzyS0rT1UudxcYiNRjbGttc@jetpack
Name: HTTPS-Everywhere
Version: 5.0development.2
Enabled: false
ID: https-everywhere@eff.org
Name: JSONView
Version: 0.9
Enabled: false
ID: jsonview@brh.numbera.com
Name: Lightbeam
Version: 1.2.1
Enabled: false
ID: jid1-F9UJ2thwoAm5gQ@jetpack
Name: Modify Headers
Version: 0.7.1.1
Enabled: false
ID: {b749fc7c-e949-447f-926c-3f4eed6accfe}
Name: Privacy Badger Firefox
Version: 0.2.5
Enabled: false
ID: jid1-MnnxcxisBPnSXQ@jetpack
Name: Reader
Version: 35.2
Enabled: false
ID: {20068ab2-1901-4140-9f3c-81207d4dacc4}
Name: Shumway
Version: 0.10.182
Enabled: false
ID: shumway@research.mozilla.org
Name: SPDY indicator
Version: 2.2
Enabled: false
ID: spdyindicator@chengsun.github.com
Name: Test Pilot
Version: 1.2.3
Enabled: false
ID: testpilot@labs.mozilla.com
Name: YouTube High Definition
Version: 35.5
Enabled: false
ID: {7b1bf0b6-a1b9-42b0-b75d-252036438bdc}
Name: YouTube Video and Audio Downloader
Version: 0.4.3
Enabled: false
ID: feca4b87-3be4-43da-a1b1-137c24220968@jetpack
Graphics
--------
Device ID: 0x fd5
GPU Accelerated Windows: 1/1 OpenGL (OMTC)
Vendor ID: 0x10de
WebGL Renderer: NVIDIA Corporation -- NVIDIA GeForce GT 650M OpenGL Engine
windowLayerManagerRemote: true
AzureCanvasBackend: quartz
AzureContentBackend: quartz
AzureFallbackCanvasBackend: none
AzureSkiaAccelerated: 0
Important Modified Preferences
------------------------------
accessibility.typeaheadfind.flashBar: 0
browser.cache.disk.capacity: 358400
browser.cache.disk.filesystem_reported: 1
browser.cache.disk.smart_size_cached_value: 358400
browser.cache.disk.smart_size.first_run: false
browser.cache.disk.smart_size.use_old_max: false
browser.cache.frecency_experiment: 2
browser.download.importedFromSqlite: true
browser.places.smartBookmarksVersion: 7
browser.search.useDBForOrder: true
browser.sessionstore.upgradeBackup.latestBuildID: 20150224030228
browser.startup.homepage: about:blank
browser.startup.homepage_override.buildID: 20150224030228
browser.startup.homepage_override.mstone: 39.0a1
browser.tabs.drawInTitlebar: false
browser.tabs.loadDivertedInBackground: true
browser.tabs.remote.autostart.1: false
dom.disable_open_during_load: false
dom.ipc.plugins.asyncInit: true
dom.max_script_run_time: 0
dom.mozApps.used: true
extensions.lastAppVersion: 39.0a1
font.internaluseonly.changed: false
media.gmp-gmpopenh264.lastUpdate: 1422504377
media.gmp-gmpopenh264.path: /Users/chris/Library/Application Support/Firefox/Profiles/7r7ocnh1.default-1404923350651/gmp-gmpopenh264
media.gmp-gmpopenh264.version: 1.3
media.gmp-manager.lastCheck: 1424836936
media.mediasource.webm.enabled: true
mousewheel.with_alt.action: 1
mousewheel.with_meta.action: 1
network.cookie.prefsMigrated: true
network.predictor.cleaned-up: true
places.database.lastMaintenance: 1424837927
places.history.expiration.transient_current_max_pages: 104858
plugin.disable_full_page_plugin_for_types: application/pdf
plugin.importedState: true
plugin.state.directorshockwave: 0
plugin.state.silverlight: 2
plugin.state.unity web player: 0
print.print_bgcolor: false
print.print_bgimages: false
print.print_colorspace:
print.print_command:
print.print_downloadfonts: false
print.print_duplex: 1515870810
print.print_evenpages: true
print.print_in_color: true
print.print_margin_bottom: 0.5
print.print_margin_left: 0.5
print.print_margin_right: 0.5
print.print_margin_top: 0.5
print.print_oddpages: true
print.print_orientation: 0
print.print_page_delay: 50
print.print_paper_data: 0
print.print_paper_height: 11.00
print.print_paper_name:
print.print_paper_size_type: 1
print.print_paper_size_unit: 0
print.print_paper_width: 8.50
print.print_plex_name:
print.print_resolution: 1515870810
print.print_resolution_name:
print.print_reversed: false
print.print_scaling: 1.00
print.print_shrink_to_fit: true
print.print_to_file: false
print.print_unwriteable_margin_bottom: 56
print.print_unwriteable_margin_left: 25
print.print_unwriteable_margin_right: 25
print.print_unwriteable_margin_top: 25
privacy.donottrackheader.enabled: true
privacy.sanitize.migrateFx3Prefs: true
security.dialog_enable_delay: 0
security.disable_button.openCertManager: false
security.ssl.errorReporting.automatic: true
storage.vacuum.last.index: 1
storage.vacuum.last.places.sqlite: 1424414981
Important Locked Preferences
----------------------------
JavaScript
----------
Incremental GC: true
Accessibility
-------------
Activated: false
Prevent Accessibility: 0
Library Versions
----------------
NSPR
Expected minimum version: 4.10.8
Version in use: 4.10.8
NSS
Expected minimum version: 3.17.4 Basic ECC
Version in use: 3.17.4 Basic ECC
NSSSMIME
Expected minimum version: 3.17.4 Basic ECC
Version in use: 3.17.4 Basic ECC
NSSSSL
Expected minimum version: 3.17.4 Basic ECC
Version in use: 3.17.4 Basic ECC
NSSUTIL
Expected minimum version: 3.17.4
Version in use: 3.17.4
Experimental Features
---------------------
Name: Invisible test of the experiment branching system.
ID: experiment-branch-test-nightly@experiments.mozilla.org
Description: An experiment using branches just to test whether branches get saved correctly.
Active: false
End Date: 1409120193510
Homepage:
| Assignee | ||
Comment 6•11 years ago
|
||
Thanks, Chris. Turns out you are on the same hardware as me so that's not the reason I'm not seeing this. You mentioned there is no reliable STR -- so the steps in comment 0 aren't 100% reliable? I tried dozens of times without seeing the issue once. How often should I expect to see it?
I was thinking this would be dom related but its starting to sound like it might be something else.
For the record, when I run the STR, I see the messed up screen on the external display for a fraction of a second before the browser redraws (with no intervention from me).
Flags: needinfo?(cpeterson)
| Reporter | ||
Comment 7•11 years ago
|
||
I don't remember if the STR were 100% reliable when I reported the bug, but they are definitely not now. I always see the messed up screen for a fraction of a second when connecting or disconnecting my external display. This feels like a race condition involving lost DOM events.
Flags: needinfo?(cpeterson)
Keywords: reproducible
Comment 8•11 years ago
|
||
[Tracking Requested - why for this release]:
Seeing this on 37.0b2 too, simply dragging the window between displays.
status-firefox37:
--- → affected
tracking-firefox37:
--- → ?
Comment 9•11 years ago
|
||
Turns out I can't reproduce this with a fresh profile, or after restarting 37.0b2. There's a graphical glitch when transferring the window between displays, but then the window is rerendered afterwards and looks correct.
Perhaps it's a state which develops after running for some time.
Comment 10•11 years ago
|
||
I can reproduce this reliably on my machine using 37 Beta 2 and Nightly 39. This occurs every time I plug in the monitor at my desk. I filed bug 1118290, which may be a dup of this one.
Tracking as this is quite annoying and reflects poorly on the browser. (Content renders incorrectly.) Given that other people are seeing this, I would prefer to have a fix. However, I will also say I don't think this is a stop ship issue as there is a simple workaround.
Comment 11•11 years ago
|
||
I can reproduce this too on Firefox 38 and Firefox 39. see https://www.evernote.com/shard/s63/sh/4b92ee0b-aadb-475b-9524-c5a302346d06/5c37ab2aaa8da81ac206ad4ffc2512d2
Comment 12•11 years ago
|
||
We can't make any headway here until we have STR good enough for *everyone* to be able to reproduce it, close to 100% of the time, starting from a clean profile.
Comment 13•11 years ago
|
||
I suspect we'll only be able to fix this bug by fixing the temporary glitches and artifacts. Safari never had them, of course (thanks to it's knowledge of OS X internals). And fairly recently Chrome stopped having them (see bug 962528 comment #33). So in principle we should be able to do the same. But it will be a *major* project, and require *lots* of reverse engineering (of Safari, Chrome, and OS X).
I'm not sure I'll ever have time for it. If/when I do, though, I'll probably work on it at bug 962528.
Comment 14•11 years ago
|
||
Changing the component given the last comment; I'd also suggest we should stop tracking for 37, and perhaps completely, or start tracking and prioritize bug 962528.
Component: Graphics → Widget: Cocoa
Comment 15•11 years ago
|
||
(In reply to Steven Michaud from comment #12)
> We can't make any headway here until we have STR good enough for *everyone*
> to be able to reproduce it, close to 100% of the time, starting from a clean
> profile.
My STR that happens 100% is:
1. Set 2nd screen as primary in OSX when it is connected
2. disconnect 2nd display
3. Resize firefox to be maximum on Laptop screen. I have 15" MBP with retina that is 2 1/2 years old
4. Close lib so laptop goes to sleep
5. connect 2nd display
6. Open lib so laptop wakes up. I regularly then see what I showed in comment 11
7. Refresh page so it becomes usuable again :/
Comment 16•11 years ago
|
||
Doesn't work for me. I assume there should be a step 0, "Start Firefox".
I tested on OS X 10.7.5. What version did you test on?
Comment 17•11 years ago
|
||
Another question, David:
Do you have OS X set to ask for a password when waking from sleep? I do (and I believe it's the default).
Comment 18•11 years ago
|
||
David, your STR doesn't work for me on OS X 10.10.2, either.
For both tests I used a "Mid 2012" 15" Retina MacBook Pro (possibly exactly the same as what you have).
Comment 19•11 years ago
|
||
(In reply to Steven Michaud from comment #16)
> Doesn't work for me. I assume there should be a step 0, "Start Firefox".
That is definitely step 0 :)
(In reply to Steven Michaud from comment #17)
> Another question, David:
>
> Do you have OS X set to ask for a password when waking from sleep? I do
> (and I believe it's the default).
Yes I do
(In reply to Steven Michaud from comment #18)
> David, your STR doesn't work for me on OS X 10.10.2, either.
>
> For both tests I used a "Mid 2012" 15" Retina MacBook Pro (possibly exactly
> the same as what you have).
I am using OSX Software OS X 10.9.5 (13F34)
System Version: OS X 10.9.5 (13F34)
Kernel Version: Darwin 13.4.0
Boot Volume: Macintosh HD
Boot Mode: Normal
Computer Name: AutomatedTester
User Name: dburns (dburns)
Secure Virtual Memory: Enabled
Time since boot: 4 days 6:31
The site that regularly shows this for me is github but I have seen it with about:home so don't think it's site specific.
Comment 20•11 years ago
|
||
> Time since boot: 4 days 6:31
Just for the fun of it, try rebooting your computer. I've seen all kinds of weird problems go away when people do this at my request. (For myself, I always turn my OS X client machines off overnight. I don't do this for servers, but frankly OS X is a lot flakier when used as a client (as most people use it).)
Comment 21•11 years ago
|
||
I restarted my machine, used it for a bit, put it to sleep overnight and then was able to reproduce it today by doing
0. Start firefox
1. Set 2nd screen as primary in OSX when it is connected
2. disconnect 2nd display
3. Resize firefox to be maximum on Laptop screen. I have 15" MBP with retina that is 2 1/2 years old
4. Close lib so laptop goes to sleep
5. connect 2nd display
6. Open lib so laptop wakes up.
7. cmd/crtl + T to load a new tab
I got https://www.evernote.com/shard/s63/sh/eacfd3a7-201c-4e9d-b32b-1bbdddeabe34/1d2c8136ba3c3acdd1032aee60fdd8c4 when the new tab loaded. Screenshot has most details you might want
Comment 22•11 years ago
|
||
I just tried your STR on OS X 10.9.5 and it didn't "work" -- I didn't see the bug. I tested with Firefox 36.0.1 (the current release).
I didn't first let my laptop sleep overnight. For obvious reasons including that step in your STR makes in unusable -- it may be necessary to exercise the STR a hundred or more times in order to figure out how to fix the bug or work around it.
Comment 23•11 years ago
|
||
This reproduces for me constantly. Resizing the window a single pixel is enough to fix it.
I get this through various orders of the following operations:
1) plugging in non-hidpi monitor
2) closing lid
3) moving windows between screens
When any of these three things happens, I'm likely to get a window that has a content area either four times too big or four times too small.
Comment 24•11 years ago
|
||
If you really can reproduce this so easily, please look for a regression range in mozilla-central nightlies.
Comment 25•11 years ago
|
||
John, can you do the bisect that Steven asked for?
Flags: needinfo?(jhford)
Comment 26•11 years ago
|
||
I can reliably reproduce this on my laptop and external monitor. Although the sizing is incorrect for just a flicker, the browser content immediately repaints to correct size. Most easily seen with about:home.
- Move browser from laptop to external monitor: a larger than expected content flickers once.
- Move browser from external monitor to laptop screen; a smaller than expected content flickers once.
I'll bisect for a regression window.
Flags: needinfo?(twalker)
Comment 27•11 years ago
|
||
This has been around since at least Jan. 1, 2014. It doesn't appear to me to be e10s isolated, as I can reproduce (in variations) with current Nightly, current release and old Nightlies with e10s disabled.
I noticed that at times (upon moving the browser from one screen to the other) it seems to flicker content from some other source, perhaps the cache? (probably should be noted I am running Nightly and release side by side)
Flags: needinfo?(twalker)
Comment 28•11 years ago
|
||
Tracy, don't bother to try to find a regression range for the temporary artifacts. They've been around since we starting supporting HiDPI mode.
However, we really do need someone to try to find a regression range (or ranges) for the "permanent" artifacts (those which only disappear after a manually triggered refresh). This will, of course, need to be someone who can reproduce them.
Comment 29•11 years ago
|
||
(In reply to Brad Lassey [:blassey] (use needinfo?) from comment #25)
> John, can you do the bisect that Steven asked for?
I can't remember when this problem began... I think it's been there since I got a retina screen years ago. For me to get that range, I'd probably need to spend days trying to reproduce.
The interesting thing to me is that any resizing event post-hidpi-switch, even a single pixel resize will fix the problem. The problem happens with switching both directions. It sounds like whatever is listening for an event to resize the content area is not getting the event, since a manual resize will fix the problem. If I knew how to hack on gecko, I'd look into it myself, but I don't really know how to.
Flags: needinfo?(jhford)
Comment 30•11 years ago
|
||
This reproduced again this morning. I was using my macbook with only the retina screen at home thing morning. I closed the lid, went to work and plugged in my monitor before unlocking the screen. Firefox was back on the non-hidpi monitor and with content at 1/4 scale but chrome at correct scale.
Comment 31•11 years ago
|
||
There's no need here for any more me-too comments. We know this is a real problem.
But unless we get good STR (which seems very unlikely at this point), there's nothing we can do about it. So as I said in comment #13, we'll probably only be able to fix this bug by fixing the temporary glitches (at bug 962528). I'm currently the only Mozilla developer really qualified to work on that bug, and I won't have time for it for a while. It will be a major project (probably requiring several weeks of work).
I intend to get to it within the next few months. When I do I'll be working on it with another Mozilla developer, as part of an effort to train someone up in my reverse engineering skills. My motivation is that I'll be retiring sometime this year :-)
Comment 32•11 years ago
|
||
Following the STR's in comment #11 I am able to reproduce this bug as reported. So I dug in for regression window finding. It turns out there are two regression windows.
The first where we went from good working build of 20140212, which regressed the next day, 201404213, as a build when simply moving browser from external browser to the laptop screen causes the content to shrink (bug 978913).
The pushlog for that regression window is: http://hg.mozilla.org/mozilla-central/pushloghtml?fromchange=802d87c77e76&tochange=a62bde1d6efe
The behavior remains that way until the build of 20140524 when it begins displaying this bug as reported.
The pushlog for this regression window is: http://hg.mozilla.org/mozilla-central/pushloghtml?fromchange=e9b2b72f4e6c&tochange=f2f81e83f4ff
Fix bug 978913 jumps out at me here.
Updated•11 years ago
|
Keywords: regressionwindow-wanted
Comment 33•11 years ago
|
||
or could be?
Kartikaya Gupta — Bug 1014034 - Use the root bounds to get the page size rather than scrollWidth/height which seem to not always work. r=Cwiiis
Kartikaya Gupta — Bug 1014054 - Use the right screen size when computing the displayport margins. r=Cwiiis
Comment 34•11 years ago
|
||
The obvious thing to try next is to back out bug 978913 (and its followup bug 111957) in current trunk code, and test with that. Can you do that, Tracy, in a tryserver build? If not I'll do it.
After that we can try backing out bug 1014034 and bug 1014054 on current trunk.
Comment 35•11 years ago
|
||
Steven, I don't know how to trigger a try server build with particular patches. But if you can do it and point me to the build, I'll test it.
Comment 36•11 years ago
|
||
Actually, before I do the tryserver build I have a question for you, Tracy:
Did you test in e10s mode? If so try testing in non-e10s mode and see if that makes a difference.
Comment 37•11 years ago
|
||
I see bug with e10s on and with it turned off.
Comment 38•11 years ago
|
||
Then the trigger isn't bug 978913 (which only effects e10s mode). And bug 1014034 and bug 1014054 only effect Android.
I'll pick over your regression ranges more carefully, and hopefully come up with other things to try.
Comment 39•11 years ago
|
||
> I see bug with e10s on and with it turned off.
Do you see the same regression ranges with and without e10s?
Comment 40•11 years ago
|
||
Yes, same.
But just to make sure, browser.tabs.remote is the config to flip, yes?
Also, in your first comment in bug 978913, you say it can happen even in non-e10s windows due to bug 974616.
Comment 41•11 years ago
|
||
> Then the trigger isn't bug 978913 (which only effects e10s mode).
I should have said that the patch for bug 978913 only effects e10s mode.
Comment 42•11 years ago
|
||
> But just to make sure, browser.tabs.remote is the config to flip, yes?
This needs to be true. But for e10s mode to be used "automatically" (for each new window to default to being an e10s window), browser.tabs.remote.autostart also needs to be true.
There's also a browser.tabs.remote.autostart.1 -- but I think that's only relevant for builds that have a way to turn e10s mode on and off in the UI (Preferences : General).
Note that all this applies only to m-c nightlies. On other branches (like aurora, beta and release) there's also code that tries to prevent e10s mode from ever being used at all.
Comment 43•11 years ago
|
||
Ok, so yes, I've been correctly flipping the switch as needed. Sorry I can't help with any of the code analysis to sort out what to try next.
Comment 44•11 years ago
|
||
I looked again at your first regression range from comment #32, Tracy, and I don't see anything that stands out.
So let me try, once again, to get decent STR for this bug.
Please write out an extremely detailed description of your STR. Tell me what version of OS X you're running, and at least something about your hardware (for example is it a Retina MacBook Pro?). Make sure your STR works from a clean profile.
Comment 45•11 years ago
|
||
hmmm, I can't reproduce this in a completely fresh profile.
Comment 46•11 years ago
|
||
> hmmm, I can't reproduce this in a completely fresh profile.
Then please try to figure out (if at all possible) which setting in your unclean profile allows you to trigger this bug.
Comment 47•11 years ago
|
||
We're at the end of the 37 Beta cycle. Although irritating, there is a simple workaround (manually resize the window) so I don't think this is critical for the release. I have marked this bug as wontfix for 37.
Comment 48•11 years ago
|
||
(In reply to [:tracy] Tracy Walker - QA Mentor from comment #45)
> hmmm, I can't reproduce this in a completely fresh profile.
Check that, I can actually reproduced this with a fresh profile on Latest Nightly.
The critical step, for me to be able to reproduce this, is putting the browser in full screen mode after the system has moved the browser to the laptop screen when you disconnect the external monitor. (step #3)
Comment 49•11 years ago
|
||
When I say Fullscreen, I mean use the expand arrows in upper right corner of the browser, not the Mac green max window size button.
my System info:
MacBook Pro
Retina, 15-inch, Late 2013
Processor 2.3 GHz Intel Core i7
Memory 16 GB 1600 MHz DDR3
Graphics NVIDIA GeForce GT 750M 2048 MB
Software OS X 10.9.5 (13F34)
Comment 50•11 years ago
|
||
> step #3
Which comment does this refer to?
Better still, please write out your full STR in detail.
Comment 51•11 years ago
|
||
| STR | ||
Pretty much as in comment #11. But I'll spell out the STR's with a bit more detail.
setup:
- Modern MacBook Pro laptop and external monitor (I have 25" HP)
- In System Prefs > Displays:
-- Display: Both screens have "Best for display" selected.
-- Arrangement: External monitor is directly above laptop screen. External display has the Menu Bar. Mirror Displays is not selected.
- Have latest build of Nightly running with the browser window in the external monitor. I just run with about:home loaded in a single tab.
STR's:
1. Disconnect the external monitor by removing HDMI cable from the Macbook port.
2. Wait for the browser to appear on Macbook display.
3. Then, resize Nightly to Full Screen mode (use expand arrows in upper right corner of browser window or shift+command+f)
4. Close the Macbook so it goes to sleep
5. Reconnect the external monitor by plugging the HDMI cable back into the external display port.
6. Open the Macbook so it wakes up and wait for Nightly to appear on the external monitor.
tested results: The browser content is about 1/4th of the expected size and is located in the upper left corner of the content pane.
note: sometimes, but less reliably than the full steps, after step 2, the content of about:home appears enlarged.
expected results: Normal sized content.
Comment 52•11 years ago
|
||
Yes! Thanks to you, Tracy, I've now got working STR!
As you said, it's crucial to go to fullscreen mode in step 3 (not just to "resize firefox to be maximum on Laptop screen", which must reasonably be interpreted as zooming up the Firefox browser window).
I'll double-check your ranges from comment #32, and hopefully be able to find exactly which patches triggered those changes.
Comment 53•11 years ago
|
||
Interestingly, though, I can only reproduce in e10s mode.
Comment 54•11 years ago
|
||
Tracy, can you still reproduce in non-e10s mode? The fact that I can't means that I'm stuck once again. Your first range from comment #32 was also the range in which e10s support was first turned on as an option (bug 960783).
Flags: needinfo?(twalker)
Comment 55•11 years ago
|
||
Tracy, I find that your first range from comment #32 is invalid in e10s mode.
In m-c builds before 2014-02-13 you need to explicitly set browser.tabs.remote and browser.tabs.remote.autostart to true to get e10s mode. When I do that I see the "content too small" bug in the 2014-02-12 m-c nightly (and m-c nightlies much earlier than that). I suspect that bug goes back to the earliest days of e10s support.
Comment 56•11 years ago
|
||
(In reply to Steven Michaud from comment #54)
> Tracy, can you still reproduce in non-e10s mode? The fact that I can't
> means that I'm stuck once again. Your first range from comment #32 was also
> the range in which e10s support was first turned on as an option (bug
> 960783).
fwiw, I can reproduce with latest release channel firefox, which doesn't have e10s.
I've also started to see content going to 4x normal size on the retina display.
Comment 57•11 years ago
|
||
I really need to be able to reproduce in non-e10s mode with m-c nightlies.
| Reporter | ||
Comment 58•11 years ago
|
||
(In reply to Steven Michaud from comment #57)
> I really need to be able to reproduce in non-e10s mode with m-c nightlies.
Steven, if you need to reproduce in non-e10s mode to bisect with mozregression, you can use the "File > New non-e10s Window" menu item to open a non-e10s window without needing to change a pref or restart the browser.
Comment 59•11 years ago
|
||
Yes, but I need to be able to reproduce this bug in a non-e10s window running a mozilla-central nightly -- no matter how I get that window. I currently can't.
| Assignee | ||
Comment 60•11 years ago
|
||
Sorry I haven't been paying attention to what's been going on in this bug for a bit. I didn't notice the flood of messages and it sounds like I could've saved some people some time. I'm turning my attention back to it now and expect to have a patch today.
The issue is the asynchronous way we call nsPresContext::UIResolutionChangedInternal. The OS sends the viewDidChangeBackingProperties message before the resize but, since we handle it asynchronously (adding it to the back of the event queue), the UIResolutionChanged actually happens after the resize (i.e. TabParent::UpdateDimensions). So the TabChild reflows and redraws with the wrong scale. I think the best option is to recognize when this is happening in TabParent::UpdateDimensions and correct it right there.
| Assignee | ||
Comment 61•11 years ago
|
||
Here we go.
Tests: https://treeherder.mozilla.org/#/jobs?repo=try&revision=4dae81577951
Comment 62•11 years ago
|
||
I am unable to reliably reproduce in non-e10s mode.
Flags: needinfo?(twalker)
| Assignee | ||
Updated•11 years ago
|
Attachment #8581735 -
Flags: review?(bugs)
Comment 63•11 years ago
|
||
Comment on attachment 8581735 [details] [diff] [review]
Detect stale display properties when resizing tabs
So we'd send UIResolutionChange messages twice, once in TabParent::UpdateDimensions, and once in nsPresContext::UIResolutionChangedInternal().
Latter should be enough. Why isn't receiving UIResolutionChange once in TabChild enough? If the bug happens on non-e10s too, sounds like either we don't
get UIResolutionChange even in the parent process when we should, or that
AppUnitsPerDevPixelChanged() doesn't end up causing a new repaint.
Attachment #8581735 -
Flags: review?(bugs) → review-
| Assignee | ||
Comment 64•11 years ago
|
||
AppUnitsPerDevPixelChanged doesn't initiate a repaint. That would also fix the bug since we have correct display stats at that point. I'll look into finding a way to request repaint in AppUnitsPerDevPixelChanged.
| Assignee | ||
Comment 65•11 years ago
|
||
Notes to self:
The UIResolutionChange handler is repainting the screen. The tiny screen is the result.
The issue is layer math. After the UpdateDimensions call but before the UIResolutionChange call, layers are resized to adapt to the new dimensions. Some telling Layer log info from this point:
1985741584[109d1c070]: Layer::Mutated(11b82b000) LayerBounds
1985741584[109d1c070]: Layer::Mutated(111b8b000) VisibleRegion was [] is [1649,0,1680,971]
1985741584[109d1c070]: Layer::Mutated(11b82b000) ClipRect was <none> is 0,0,1650,971
1985741584[109d1c070]: Layer::Mutated(11b82b000) VisibleRegion was [0,0,2880,1642] is [0,0,1650,971]
1985741584[109d1c070]: Layer::Mutated(11b82ac00) ContentFlags
1985741584[109d1c070]: Layer::Mutated(11b82ac00) VisibleRegion was [0,0,2880,1642] is [0,0,1680,971]
What happened here is that the tab's visible region resized from 2880x1642 (2x hidpi coords for 2x hidpi display 1) to 1680x971 (lowdpi coords for lowdpi display 2). But the graphics system doesn't know that it is on a lowdpi display at this point - it still thinks its hidpi. When it gets the UIResolutionChange message, indicating a shift to lowdpi, it assumes the 1680x971 was for hidpi and dutifully scales it by 1/2 here:
1985741584[109d1c070]: Layer::Mutated(11b82b000) LayerBounds
1985741584[109d1c070]: Layer::Mutated(111b8b000) VisibleRegion was [1649,0,1680,971] is [824,0,840,486]
1985741584[109d1c070]: Layer::Mutated(11b82b000) ClipRect was <none> is 0,0,825,486
1985741584[109d1c070]: Layer::Mutated(11b82b000) VisibleRegion was [0,0,1650,971] is [0,0,825,486]
1985741584[109d1c070]: Layer::Mutated(11b82ac00) VisibleRegion was [0,0,1680,971] is [0,0,840,486]
The original sin is the misinterpretation of the UpdateDimensions setting but there is logic to it. Instinct is to normalize the coordinates sent by UpdateDimensions (say, scaled by 1/display_scale) and rescale them in UpdateDimensions and UIResolutionChange based on the PuppetWidget's display scale. Currently, this fixes the issue but breaks everything else.
| Assignee | ||
Comment 66•11 years ago
|
||
The assessment in comment 65 was valid and the bugs have been dealt with. With this patch, the display does an incorrect rendering after the UpdateDimensions call and then a correct rendering after the UIResolutionChanged call. This doesn't look too bad.
Tests: https://treeherder.mozilla.org/#/jobs?repo=try&revision=85ce8df8c978
Attachment #8581735 -
Attachment is obsolete: true
| Assignee | ||
Comment 67•11 years ago
|
||
I prefer this patch. It uses app coordinates instead of 1x dpi coordinates so it avoids float math.
Tests: https://treeherder.mozilla.org/#/jobs?repo=try&revision=968c2acd99a5
Attachment #8585767 -
Attachment is obsolete: true
| Assignee | ||
Comment 68•11 years ago
|
||
See comments 65-67.
Tests: https://treeherder.mozilla.org/#/jobs?repo=try&revision=55271b358b95
Attachment #8585809 -
Attachment is obsolete: true
Attachment #8586866 -
Flags: review?(roc)
| Assignee | ||
Comment 69•11 years ago
|
||
I should mention that the difference between the attachment in 67 and the one in 68 - that fixed the B2G failures - is mainly about AppUnitsPerDevPixel vs AppUnitsPerDevPixelAtUnitFullZoom.
Attachment #8586866 -
Flags: review?(roc) → review+
(In reply to David Parks [:handyman] from comment #66)
> The assessment in comment 65 was valid and the bugs have been dealt with.
> With this patch, the display does an incorrect rendering after the
> UpdateDimensions call and then a correct rendering after the
> UIResolutionChanged call. This doesn't look too bad.
Really? It sounds bad :-). What would it take to fix that glitch?
| Assignee | ||
Comment 71•11 years ago
|
||
What I meant by 'not that bad' is that the behavior seems usually to be invisible -- pretty often, the display stays dark until the new layout is available (admittedly, this is true on my old Dell monitor and may not be true in general).
I'm not sure why the nsPresContext::UIResolutionChanged calls are made asynchronously:
https://mxr.mozilla.org/mozilla-central/source/layout/base/nsPresContext.cpp#1774
I suspect its for performance in the case where the browser is dragged between monitors. So making this synchronous would also fix this bug (without the glitch) but would probably break... something.
The alternative is to adapt either TabChild::RecvUpdateDimensions or TabChild::RecvUIResolutionChanged to ID this case and handle it. I'll try this in UpdateDimensions but it will take some bookkeeping. The TabParent can remember the last backingScale value it gave the child and, if it doesn't match the value in the widget when the SendUpdateDimensions call is happening, it can send a boolean to the child telling it to invalidate its backingScale cache value. (Since the async UIResolutionChanged calls happen, I believe, on the same thread, we won't end up in a race condition.) I could send the value but the child requests that from the parent by itself when the cache is invalidated (and there are potentially other things that happen so I won't reinvent it). This is a little involved but it wouldn't be fragile.
This may be a better implementation -- it should work even without the current patch. I'll sit on the checkin until you have a chance to chime in so let me know what you prefer.
Flags: needinfo?(roc)
| Assignee | ||
Comment 72•11 years ago
|
||
So... I decided to try for the alternative. Its probably the better solution. But its not perfect...
This patch does what I suggested in the last comment, and it fixes the original issue (without any graphics glitch in the STR), but it still has an additional glitch when going from the external display back to the laptop. The laptop screen wakes up much faster (I dont know if this is relevant).
My total guess as to what is happening is that the compositor is still running while the UpdateDimensions stuff is happening and the compositor blits an image from the ext display's form factor and scale... so on the laptop I see a small version of the screen in a big window before it is corrected. So I'd need to stop the compositor when the displayChanged message came in and restart it... sometime? I guess start it asynchronously once the child processed its UpdateDimesions call. Assuming thats possible. But this is jumping the gun... I dont know if any of that is the cause.
At any rate, I'd probably bug that rather than fix it right away.
So, roc... preference?
Comment on attachment 8587139 [details] [diff] [review]
WIP: Alternative solution
Review of attachment 8587139 [details] [diff] [review]:
-----------------------------------------------------------------
How about combining the UpdateDimensions and UIResolutionChanged calls, and always pass the UI resolution along with the dimensions?
Then the other thing we should do, to avoid obvious glitching, is to label the TabChild's layer tree with the UI resolution used to generate it, and in the compositor, scale it if necessary. That means, if the content process doesn't paint in time for whatever reason, we still render something reasonable.
Comment 74•11 years ago
|
||
(In reply to Robert O'Callahan (:roc) (Mozilla Corporation) from comment #73)
> Comment on attachment 8587139 [details] [diff] [review]
> WIP: Alternative solution
>
> Review of attachment 8587139 [details] [diff] [review]:
> -----------------------------------------------------------------
>
> How about combining the UpdateDimensions and UIResolutionChanged calls, and
> always pass the UI resolution along with the dimensions?
>
> Then the other thing we should do, to avoid obvious glitching, is to label
> the TabChild's layer tree with the UI resolution used to generate it, and in
> the compositor, scale it if necessary. That means, if the content process
> doesn't paint in time for whatever reason, we still render something
> reasonable.
This sounds like it adds a lot of complexity, how about we land this roughly as is and do that in a follow up?
Sure, feel free to land the patch I already r+ed.
Flags: needinfo?(roc)
Comment 76•10 years ago
|
||
Unfortunately, this is getting late for 38. I am going to mark it as wontfix for 38.
However, if you think that David's patch is really low risk, we might reconsider this.
| Assignee | ||
Comment 77•10 years ago
|
||
Comment on attachment 8587139 [details] [diff] [review]
WIP: Alternative solution
I'll obsolete this WIP patch and land the r+ed patch. I'll leave it to others to decide on submission for 38.
Attachment #8587139 -
Attachment is obsolete: true
| Assignee | ||
Comment 78•10 years ago
|
||
De-bitrot. r+ed at comment 69.
Updated tests are here:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=df2c2249a643
I've filed a new bug for the extraneous resize: bug 1156339.
| Assignee | ||
Updated•10 years ago
|
Keywords: checkin-needed
Comment 79•10 years ago
|
||
Hi, seems this failed to apply:
adding 1125325 to series file
renamed 1125325 -> extdisp.final2.patch
applying extdisp.final2.patch
patching file dom/ipc/TabChild.cpp
Hunk #3 FAILED at 273
1 out of 10 hunks FAILED -- saving rejects to file dom/ipc/TabChild.cpp.rej
patch failed, unable to continue (try -v)
patch failed, rejects left in working dir
errors during apply, please fix and refresh extdisp.final2.patch
could you take a look, thanks!
Flags: needinfo?(davidp99)
Keywords: checkin-needed
| Assignee | ||
Comment 80•10 years ago
|
||
This should do it...
Attachment #8586866 -
Attachment is obsolete: true
Attachment #8594834 -
Attachment is obsolete: true
Flags: needinfo?(davidp99)
| Assignee | ||
Updated•10 years ago
|
Keywords: checkin-needed
Comment 81•10 years ago
|
||
Comment on attachment 8595458 [details] [diff] [review]
Make TabParent/TabChild UpdateDimensions messages aware of the display scale (r+ed by roc)
Review of attachment 8595458 [details] [diff] [review]:
-----------------------------------------------------------------
A few drive-by comments from a cursory glance at this code, and I really hope you've tested this on b2g...
::: dom/ipc/TabChild.cpp
@@ +3151,5 @@
> nsCOMPtr<nsIPresShell> presShell = document->GetShell();
> nsRefPtr<nsPresContext> presContext = presShell->GetPresContext();
> presContext->UIResolutionChanged();
> +
> + ScreenIntSize devPixelSize = GetInnerSizeInDevPixels();
This doesn't make sense. If it's in layout device pixels, then use LayoutDeviceIntSize.
::: dom/ipc/TabParent.cpp
@@ +941,5 @@
> + appPixelRect.ScaleRoundOut(appPerDev);
> + appPixelSize = appPixelSize * appPerDev;
> + }
> + nsIntPoint chromeOffset = -LayoutDevicePixel::ToUntyped(GetChildProcessOffset());
> + unused << SendUpdateDimensions(appPixelRect, appPixelSize, mOrientation, chromeOffset);
Why are you not using mChromeOffset here?
Also you need to rebase on top of bug 1153023 on inbound, because this won't apply on that.
Updated•10 years ago
|
Keywords: checkin-needed
| Assignee | ||
Comment 82•10 years ago
|
||
I've cleaned up the coordinate system use but a new sync issue has snuck into the code base that causes the viewport to get fubar the second time you change monitors. I'm looking into that now.
| Assignee | ||
Comment 83•10 years ago
|
||
This deals with the incorrect use of coordinate system typedefs in general and kats' two concerns specifically (the first directly, the second was an unnecessary variable that resulted from an hg merge).
It also deals with the new issue I reported in comment 82. The problem was that the nsPresContext was asynchronously invalidating the scale/dpi. This should be unnecessary in the TabChild::RecvUIResolutionChanged IPDL message handler. I now invalidate the values synchronously there.
Tests:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=bc39e5a846bd
Attachment #8595458 -
Attachment is obsolete: true
| Assignee | ||
Comment 84•10 years ago
|
||
Comment on attachment 8597398 [details] [diff] [review]
Make TabParent/TabChild UpdateDimensions messages aware of the display scale
Tests look good. A quick check of B2G on Flame ran fine. And the coordinate systems should be lined up correctly.
Attachment #8597398 -
Attachment description: Make TabParent/TabChild UpdateDimensions messages aware of the display scale (r+ed by roc) → Make TabParent/TabChild UpdateDimensions messages aware of the display scale
Attachment #8597398 -
Flags: review?(bugmail.mozilla)
Comment 85•10 years ago
|
||
Comment on attachment 8597398 [details] [diff] [review]
Make TabParent/TabChild UpdateDimensions messages aware of the display scale
Review of attachment 8597398 [details] [diff] [review]:
-----------------------------------------------------------------
Sorry for the delay, this was hard to review for me. Based on my gut feeling I would r- this patch, but honestly I don't know enough about the UpdateDimensions call and the units of the variables being passed around to definitively point to something as wrong. I've braindumped my thoughts below so you can address what you want and land with roc's r+ if you like.
::: dom/ipc/TabChild.cpp
@@ +3216,5 @@
> + nsCOMPtr<nsIDocument> document(GetDocument());
> + nsIPresShell* presShell = document ? document->GetShell() : nullptr;
> + nsPresContext* presContext = presShell ? presShell->GetPresContext() : nullptr;
> + presContext = presContext ? presContext->GetDisplayRootPresContext() : presContext;
> + return presContext ? presContext->DeviceContext()->AppUnitsPerDevPixelAtUnitFullZoom() : 1;
You should probably MOZ_RELEASE_ASSERT things here so that you never actually fall through and return 1. If that ever happens then it's going to result in badness.
::: dom/ipc/TabChild.h
@@ +221,5 @@
> + int32_t AppUnitsPerDevPixelAtUnitFullZoom();
> +
> + ScreenIntSize GetInnerSizeInScreenUnits() {
> + int32_t scale = AppUnitsPerDevPixelAtUnitFullZoom();
> + return ScreenIntSize(mInnerSize.width / scale, mInnerSize.height / scale);
Not clear to me how you can convert from app units to ScreenPixels using AppUnitsPerDevPixelAtUnitFullZoom, because that converts from app units into a coordinate space that we haven't given a name. This needs some explanation. See my other comments later.
Also given the function is returning a ScreenIntSize, the "InScreenUnits" part of the function name is redundant. I'd rather just have it as GetInnerSize(), and make sure that mInnerSize is a private variable so it can only be accessed via this getter.
::: dom/ipc/TabParent.cpp
@@ +978,5 @@
> + int32_t appPerScreen = presContext->DeviceContext()->AppUnitsPerDevPixelAtUnitFullZoom();
> + appPixelRect.ScaleRoundOut(appPerScreen);
> + appPixelSize = appPixelSize * appPerScreen;
> + }
> + unused << SendUpdateDimensions(appPixelRect, appPixelSize, mOrientation, chromeOffset);
So a few things here:
- For consistency, please stick with using either the member variables or the local variables. For example you use |mRect| but also |size| (as opposed to mDimensions). The SendUpdateDimensions call also uses |mOrientation| with |chromeOffset| - I would prefer either |orientation| or |mChromeOffset|.
- If presContext is nullptr, then I think you should just return instead of sending an update dimensions call with what amounts to garbage values (they will be sent in one coordinate space and interpeted in a different one).
- "appPixelRect" and "appPixelSize" are not great names. There is no such thing as an "appPixel" - there's various kinds of pixels, and there's app units. I would prefer the names "appUnitsRect" and "appUnitsSize".
- Since you're converting to app units, the types should be nsRect and nsSize, because those store app units. The nsInt* types are for pixels (typically LayoutDevicePixels, but depends on the particular use). PBrowser.ipdl should be updated to use nsRect and nsSize as well.
- It's not clear to me why you're using AppUnitsPerDevPixelAtUnitFullZoom() instead of just AppUnitsPerDevPixel() here. Do the rect/size values change when full-zoom is applied? If so, please add a comment to that effect.
- In bug 1144940, dzbarsky changes the |rect| argument to this function from nsIntRect to a ScreenIntRect. If he's correct and the value is in ScreenPixels (quite possibly not the case) then you'll need to justify a little bit better why you can convert it to app units using AppUnitsPerDevPixelAtUnitFullZoom, because it's not clear to me. If you haven't taken a look at the documentation in layout/base/Units.h you might want to do that.
Attachment #8597398 -
Flags: review?(bugmail.mozilla)
| Assignee | ||
Comment 86•10 years ago
|
||
I will definitely re-ping roc in case he wants to refresh his r+ but first lets try to iron out a few things.
The central problem is that we are updating data in the UpdateDimensions call that is combined with the data in the UIResolutionChanged call. The algebra of the patch works by separating the information in the UpdateDimensions message. In UIResolutionChanged, we update the scale (X) and in UpdateDimensions, we were updating the *scaled* display size (X*Y). During a period where we’ve updated X*Y without updating X, some calculations do ‘Y/X’ to get Y but they are using the wrong X. At its core, the change just passes Y instead of X*Y, which it computes using the cached X. So e.g. we were passing ScreenIntSize (as dzbarsky wrote) and I’ve changed it to app units.
There were a few ways that this could be represented. I chose app units because they are widget-scale-agnostic but, rereading the coordinate stuff, I might have been able to use LayoutDevicePixel units. However, they are supposed to be widget-scale-sensitive [1]. So I went with app units.
Since the app units describe the screen dimensions with no scale or zoom, AppUnitsPerDevPixelAtUnitFullZoom seemed like the right way to do the conversion. Additionally, AppUnitsPerDevPixel fails here — it’s readily apparent on B2G. We do use this function for screen coords (for example, Event::GetScreenCoords [2]). Let me know if there is a better way.
The rest of your comments seem cosmetic and should be easy enough to fix. I'll put together a new patch if this sounds acceptable.
[1] https://mxr.mozilla.org/mozilla-central/source/layout/base/Units.h#230
[2] https://mxr.mozilla.org/mozilla-central/source/dom/events/Event.cpp#907
Flags: needinfo?(bugmail.mozilla)
Comment 87•10 years ago
|
||
Most of what you say makes sense. However my understanding of the widget-world coordinate systems isn't complete enough to convince myself that the value being passed in to UpdateDimensions is actually in ScreenPixels, and that it's reasonable to turn it into app units by using AppUnitsPerDevPixelAtUnitFullZoom. I looked at the GetWindowDimensions function that provides the rect that's passed to UpdateDimensions but I don't know what nsIBaseWindow actually represents and what coordinate system it's GetPosition/Size values are in. I'm attaching a picture that shows what my mental model is. Can you tell me what the UpdateDimensions rect would correspond to in this picture?
Flags: needinfo?(bugmail.mozilla)
| Assignee | ||
Comment 88•10 years ago
|
||
The rect in UpdateDimensions (currently) represents the widget's screen location and size, scaled by the display device-scale. The whole widget. So zoom isn't relevant to it. The value of GetWindowDimensions should therefore not be affected by any zoom (content, chrome, whatever). The PuppetWidget's position/size therefore exactly reflects the OS's widget. It just considers the browser chrome to be part of the 'non-client' region (which normally is the region where the OS puts window decorations). This stuff is key for things like Event::GetScreenCoordinates.
So, on my retina MBP, the screen is 1440x900 in unscaled units and 2880x1800 in scaled units. UpdateDimensions's rect (in fullscreen) is therefore 2880x1800.
The size parameter (poorly named) reflects what I've been referring to as the content area (aka "???" in your picture).
Does that help?
Flags: needinfo?(bugmail.mozilla)
Comment 89•10 years ago
|
||
Thanks, that helps too. So I'm reasonably convinced now that there are issues with the code but they only occur in scenarios that we don't care about right now. Specifically if the root presshell on the TabParent side has a resolution set on it, I think there will be problems because that's when the LayoutDevicePixels don't equal the ScreenPixels. However as far as I know that's not something that will happen until either we allow pinch-zooming the entire browser chrome (unlikely) or nested content processes in B2G finally is enabled (which has been in the works but AFAIK is stalled right now).
Also if the root presShell does have a resolution, then a lot of other stuff will break too so I don't think it's a problem if this is broken too, it won't even be noticeable until we clean up the mountain of other stuff. For example the cast from LayoutDevice to Screen pixels at [1] (which is where the size parameter appears to be coming from) probably needs to take into account the resolution too.
Just one more question for now: At [2] when we add the client offset, don't we need to truncate the width/height of the rect by the same amount? Otherwise the rect will "leak" outside the widget area.
The only remaining case that I'm slightly worried about is if the root presshell in the child process has a resolution set. So for example if you go into the B2G browser, load a page, and zoom in/out. Rotating the device should then also trigger UpdateDimensions calls, and if the screenX/screenY coordinates of events all come out correctly in those scenarios (or at least no differently than without the patch) then I'm fine with landing this. You can use my test page at http://people.mozilla.org/~kgupta/grid.html to check this (it will log touch events to logcat).
Thanks for being so patient and helping me understand how this stuff works!
[1] http://mxr.mozilla.org/mozilla-central/source/layout/generic/nsSubDocumentFrame.cpp?rev=a8963c3c2c56#289
[2] http://mxr.mozilla.org/mozilla-central/source/dom/ipc/TabParent.cpp?rev=a8963c3c2c56#951
Flags: needinfo?(bugmail.mozilla)
| Assignee | ||
Comment 90•10 years ago
|
||
(In reply to Kartikaya Gupta (email:kats@mozilla.com) from comment #89)
> Thanks, that helps too. So I'm reasonably convinced now that there are
> issues with the code but they only occur in scenarios that we don't care
> about right now. Specifically if the root presshell on the TabParent side
> has a resolution set on it, I think there will be problems because that's
> when the LayoutDevicePixels don't equal the ScreenPixels.
OK, this is about to get hairy...
What you say about the size in the presshell's dimensions is right but it actually is the *cause* of this issue and the reason there is still the minor issue of an incorrect resize before the correct resize is actually done (i.e. we still resize twice and the first one is wrong). During that period, the presshell has the right dimensions but the wrong scale (so, the flip of what you said, but really the same issue). This is laid out with data in comment 65. It might be most clearly shows by example:
Legend:
r1/r2 - window rect before the first/after the final reflow, respectively
s1/s2 - window display scale before the first/after the final reflow, respectively
Currently (buggy version -- sounds like all of this is already clear):
1. UpdateDimensions sends r2*s2 (new rect/scale)
1a. A reflow is initiated that sizes the widget to r2*s2. The logic thinks its doing r2*s1.
2. UIResolutionChanged invalidates s1
3. UIResolutionChanged synchronously fetches s2
3a. A reflow is initiated that sizes the window to r2*s2*(s2/s1) == r2*s2^2*s1. This is wrong.
With patch:
1. UpdateDimensions sends r2 (new rect)
1a. A reflow is initiated that sizes the widget to r2*s1. The logic thinks its doing r2*s1... and its right.
2. UIResolutionChanged invalidates s1
3. UIResolutionChanged synchronously fetches s2
3a. A reflow is initiated that sizes the window to r2*s1*(s2/s1) == r2*s2. Joy!
So, we *do* hit the case you mention in step 1a... but its not a big deal. As long as the logic is consistent with the math (and the final reflow happens in a timely manner), we get "eventual consistency". "Actual consistency" is the bug I filed in comment 78 (bug 1156339).
I haven't done it yet but I'll look at your B2G case before landing.
Comment 91•10 years ago
|
||
I think the "window display scale" you're referring to is different from the "resolution" I was referring to. The thing I was talking about is this thing: http://mxr.mozilla.org/mozilla-central/source/layout/base/nsIPresShell.h?rev=d47f66ce3822#1375 which is different from the BackingScaleFactor() thing that drives the UIResolutionChanged notification.
| Assignee | ||
Comment 92•10 years ago
|
||
Yes, I was confused - I thought you meant the rect of the view in the presshell. I've not encountered the resolution property before. I'll keep an eye out for it when I look at B2G again.
| Assignee | ||
Comment 93•10 years ago
|
||
> So for example if you
> go into the B2G browser, load a page, and zoom in/out. Rotating the device
> should then also trigger UpdateDimensions calls, and if the screenX/screenY
> coordinates of events all come out correctly in those scenarios (or at least
> no differently than without the patch) then I'm fine with landing this. You
> can use my test page at http://people.mozilla.org/~kgupta/grid.html to check
> this (it will log touch events to logcat).
I was expecting the logged screen coordinates *not* to scale with the zoom but they did... then I tried without this patch and they show the same behavior (they line up with the grid, modulo the titlebar, regardless of zoom). The behavior was the same with various combinations of zooming and rotating. This was on Flame.
I'll make the rest of kats' changes and ping roc to refresh the review.
Comment 94•10 years ago
|
||
Sounds good, thanks!
| Assignee | ||
Comment 95•10 years ago
|
||
Includes changes suggested by kats.
roc, this is just to give you the opportunity to re-review since your earlier r+. The logic of the bug hasn't changed -- but I've made a number of changes to the unit-types of the rect/size used (and the functions used to cast between them).
Tests:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=c94c73d7e0fa
Attachment #8597398 -
Attachment is obsolete: true
Attachment #8600060 -
Flags: review?(roc)
Comment on attachment 8600060 [details] [diff] [review]
Make TabParent/TabChild UpdateDimensions messages aware of the display scale
Review of attachment 8600060 [details] [diff] [review]:
-----------------------------------------------------------------
Kats has thought about this a lot more than I have :-)
Attachment #8600060 -
Flags: review?(roc) → review?(bugmail.mozilla)
Comment 97•10 years ago
|
||
Comment on attachment 8600060 [details] [diff] [review]
Make TabParent/TabChild UpdateDimensions messages aware of the display scale
Review of attachment 8600060 [details] [diff] [review]:
-----------------------------------------------------------------
::: dom/ipc/TabChild.cpp
@@ +3237,5 @@
> + nsIPresShell* presShell = document->GetShell();
> + MOZ_RELEASE_ASSERT(presShell);
> + nsPresContext* presContext = presShell->GetPresContext();
> + MOZ_RELEASE_ASSERT(presContext);
> + presContext = presContext->GetDisplayRootPresContext() ?
nit: trailing whitespace
Attachment #8600060 -
Flags: review?(bugmail.mozilla) → review+
| Assignee | ||
Comment 99•10 years ago
|
||
Whitespace fix.
For kicks, rerunning the tests:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=6f0cf8117a31
| Assignee | ||
Comment 101•10 years ago
|
||
Kicks... to the face.
The issue addressed now is that the code was not non-e10s only so I hadn't run enough tests. Remote PBrowsers in non-e10s code were failing as they were not found by nsContentUtils::CallOnAllRemoteChildren. On smaug's recommendation, I've added the set of TabParents to the top-level window of their top-level document. I've also changed CallOnAllRemoteChildren to iterate over that set instead of TabParents. This patch basically covers this half of the bug.
smaug, we had conjectured that the Tabs could attach to the top-level win on construction and then we'd be done but we forgot about dragging tabs between windows. Since dragging tabs changes the top-level window, I changed to register/unregister when the Tab's nsIContent changes.
Tests are coming here:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=e46d05b42023
FYI, as tests come in, an earlier WIP test shows this approach should fix the issues:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=e74cf1a3238b
Attachment #8600060 -
Attachment is obsolete: true
Attachment #8602206 -
Attachment is obsolete: true
Attachment #8604220 -
Flags: review?(bugs)
| Assignee | ||
Comment 102•10 years ago
|
||
This is the second half of the patch from the previous comment -- this is the same principle as the previous version but I had to change the units so I went back to the version I had in comment 66 before I had a stroke of geniustupid in comment 67.
kats, much of what we discussed was about the coordinates used to communicate between TabParent and TabChild for UpdateDimensions. Before comment 67, I was simply dividing the content scale out of the dimensions... which doesn't reflect units we use but is what Apple calls "Points". This has exactly the same algebraic properties we needed before but is simpler -- it just involves the dimensions and that scale value. The rest of the behavior is the same.
(Most of the other patch is extraneous to this part of the problem but that patch does have some of the relevant TabParent stuff.)
Attachment #8604225 -
Flags: review?(bugmail.mozilla)
| Assignee | ||
Comment 103•10 years ago
|
||
oops -- needed to de-bitrot
Attachment #8604220 -
Attachment is obsolete: true
Attachment #8604220 -
Flags: review?(bugs)
Attachment #8604286 -
Flags: review?(bugs)
| Assignee | ||
Comment 104•10 years ago
|
||
de-bitrot. See comment 102.
Rerun tests:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=abc74a3192bd
Attachment #8604225 -
Attachment is obsolete: true
Attachment #8604225 -
Flags: review?(bugmail.mozilla)
Attachment #8604288 -
Flags: review?(bugmail.mozilla)
| Assignee | ||
Updated•10 years ago
|
Attachment #8604286 -
Attachment description: 1. Make TabParent/TabChild UpdateDimensions messages aware of the display scale → 1. Store TabParents with their root window
| Assignee | ||
Comment 105•10 years ago
|
||
Retrying canceled tests:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=fc868fb51cfd
Comment 106•10 years ago
|
||
Comment on attachment 8604286 [details] [diff] [review]
1. Store TabParents with their root window
Review of attachment 8604286 [details] [diff] [review]:
-----------------------------------------------------------------
::: dom/ipc/TabParent.cpp
@@ +1000,5 @@
> + }
> + nsRect normalizedRect(mRect.x, mRect.y, mRect.width, mRect.height);
> + normalizedRect.ScaleInverseRoundOut(widgetScale);
> + nsSize normalizedSize(static_cast<double>(mDimensions.width) / widgetScale,
> + static_cast<double>(mDimensions.height) / widgetScale);
This is wrong. mRect and mDimensions are in ScreenPixels (which here are equivalent to LayoutDevicePixels) and widget->GetDefaultScale is a CSSToLayoutDeviceScale. So "normalizedRect" and "normalizedSize" are in CSSPixels and should not be stored in nsRect/nsSize (which are for app units only). Please rewrite this like so:
CSSToLayoutDeviceScale widgetScale;
if (widget) {
widgetScale = widget->GetDefaultScale();
}
CSSRect normalizedRect = ViewAs<LayoutDevicePixel>(mRect) / widgetScale;
CSSSize normalizedSize = ViewAs<LayoutDevicePixel>(mDimensions) / widgetScale;
I'm not a huge fan of "normalizedRect" and "normalizedSize" either but whatever. And shouldn't this hunk be in the part 2 patch?
Comment 107•10 years ago
|
||
Comment on attachment 8604288 [details] [diff] [review]
2. Make TabParent/TabChild UpdateDimensions messages aware of the display scale
Review of attachment 8604288 [details] [diff] [review]:
-----------------------------------------------------------------
The good news is that none of my suggested changes should actually change the mathematics of the values flowing around, they just updated variables to have the right types :) I'd like to see the updated patch with the changes so minusing for now.
::: dom/ipc/PBrowser.ipdl
@@ +44,5 @@
> using class mozilla::WidgetMouseEvent from "ipc/nsGUIEventIPC.h";
> using class mozilla::WidgetWheelEvent from "ipc/nsGUIEventIPC.h";
> using class mozilla::WidgetDragEvent from "ipc/nsGUIEventIPC.h";
> using struct nsRect from "nsRect.h";
> +using struct nsSize from "nsSize.h";
Won't need this
@@ +544,5 @@
> LoadURL(nsCString uri, BrowserConfiguration config);
>
> CacheFileDescriptor(nsString path, FileDescriptor fd);
>
> + UpdateDimensions(nsRect rect, nsSize size, ScreenOrientation orientation,
Based on the changes in part 1, these are CSSRect and CSSSize
::: dom/ipc/TabChild.h
@@ +320,5 @@
> const uint64_t& aLayersId,
> PRenderFrameChild* aRenderFrame,
> const bool& aParentIsActive) override;
> + virtual bool RecvUpdateDimensions(const nsRect& rect,
> + const nsSize& size,
CSSRect, CSSSize
@@ +502,5 @@
> }
>
> + virtual ScreenIntSize GetInnerSize() {
> + float scale = mWidget->GetDefaultScale().scale;
> + return ScreenIntSize(mNormalizedInnerSize.width * scale, mNormalizedInnerSize.height * scale);
Same changes here as what I say for GetOuterRect below
@@ +596,5 @@
> void SetTabId(const TabId& aTabId);
>
> + ScreenIntRect GetOuterRect() {
> + nsIntRect rect = mNormalizedOuterRect.ToNearestPixels(mWidget->GetDefaultScale().scale);
> + return ScreenIntRect::FromUnknownRect(rect);
LayoutDeviceIntRect outerRect = RoundedToInt(mNormalizedOuterRect * mWidget->GetDefaultScale());
return ViewAs<ScreenPixel>(outerRect, PixelCastJustification::LayoutDeviceIsScreenForOuter);
(You'll need to add the LayoutDeviceIsScreenForOuter value to the PixelCastJustfication enum)
@@ +599,5 @@
> + nsIntRect rect = mNormalizedOuterRect.ToNearestPixels(mWidget->GetDefaultScale().scale);
> + return ScreenIntRect::FromUnknownRect(rect);
> + }
> +
> + void SetNormalizedInnerSize(const nsSize& size) {
CSSSize
@@ +615,5 @@
> RenderFrameChild* mRemoteFrame;
> nsRefPtr<nsIContentChild> mManager;
> uint32_t mChromeFlags;
> uint64_t mLayersId;
> + nsRect mNormalizedOuterRect;
CSSRect
@@ +649,5 @@
> float mDPI;
> double mDefaultScale;
> bool mIPCOpen;
> bool mParentIsActive;
> + nsSize mNormalizedInnerSize;
CSSSize
::: gfx/ipc/GfxMessageUtils.h
@@ +445,5 @@
>
> +template<>
> +struct ParamTraits<nsSize>
> +{
> + typedef nsSize paramType;
Won't need this any more
Attachment #8604288 -
Flags: review?(bugmail.mozilla) → review-
| Assignee | ||
Comment 108•10 years ago
|
||
I haven't made kats' changes yet (they don't look controversial) -- I've been dealing with the orange that showed up in the tests. Good news is that the orange has been dealt with -- tests for these two patches are in:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=7e7bc7c7ccc9
Bad news is that I had to undo the change to nsContentUtils as the iteration was happening over some unwanted elements, causing new use-after-destroy actor bugs (not a use-after-free memory bug). Restricting the TabParent change that smaug proposed to the nsPresContext routine instead turns us back to green.
Attachment #8604286 -
Attachment is obsolete: true
Attachment #8604288 -
Attachment is obsolete: true
Attachment #8604286 -
Flags: review?(bugs)
| Assignee | ||
Comment 109•10 years ago
|
||
Second part of the patch
| Assignee | ||
Comment 110•10 years ago
|
||
In addition to all of the basic changes:
(In reply to Kartikaya Gupta (email:kats@mozilla.com) from comment #106)
> Comment on attachment 8604286 [details] [diff] [review]
> 1. Store TabParents with their root window
>
> Review of attachment 8604286 [details] [diff] [review]:
> -----------------------------------------------------------------
> Please rewrite this like so:
>
> CSSToLayoutDeviceScale widgetScale;
> if (widget) {
> widgetScale = widget->GetDefaultScale();
> }
> CSSRect normalizedRect = ViewAs<LayoutDevicePixel>(mRect) / widgetScale;
> CSSSize normalizedSize = ViewAs<LayoutDevicePixel>(mDimensions) /
> widgetScale;
I went a little wordier and used the PixelCastJustification I've switched the units.
> And shouldn't this hunk be in the part 2 patch?
Indeed. Fixed.
Attachment #8604690 -
Attachment is obsolete: true
Attachment #8606572 -
Flags: review?(bugmail.mozilla)
| Assignee | ||
Comment 111•10 years ago
|
||
The comments from the old patch (comment 101) are still valid:
> smaug, we had conjectured that the Tabs could attach to the top-level win on
> construction and then we'd be done but we forgot about dragging tabs between
> windows. Since dragging tabs changes the top-level window, I changed to
> register/unregister when the Tab's nsIContent changes.
Additionally, I had to add the line in TabParent::UIResolutionChanged for tests. I ran this past mconley, who wrote the original behavior, and he says it shouldn't break any contracts -- the only way this could create unexpected behavior is if we invalidate a tab's resolution for a widget change before changing the tab's widget, which would be odd.
Tests (with both patches applied):
https://treeherder.mozilla.org/#/jobs?repo=try&revision=586b940296f5
Attachment #8604689 -
Attachment is obsolete: true
Attachment #8606574 -
Flags: review?(bugs)
Comment 112•10 years ago
|
||
Comment on attachment 8606572 [details] [diff] [review]
1. Make TabParent/TabChild UpdateDimensions messages aware of the display scale
Review of attachment 8606572 [details] [diff] [review]:
-----------------------------------------------------------------
LGTM
::: dom/ipc/TabChild.cpp
@@ +860,5 @@
> , mRemoteFrame(nullptr)
> , mManager(aManager)
> , mChromeFlags(aChromeFlags)
> , mLayersId(0)
> + , mUnscaledOuterRect(0, 0, 0, 0)
Technically not needed since CSSRect gets initialized to zeros anyway
@@ +878,5 @@
> , mDPI(0)
> , mDefaultScale(0)
> , mIPCOpen(true)
> , mParentIsActive(false)
> + , mUnscaledInnerSize(0, 0)
Ditto
::: dom/ipc/TabChild.h
@@ +594,5 @@
> void SetTabId(const TabId& aTabId);
>
> + ScreenIntRect GetOuterRect();
> +
> + void SetUnscaledInnerSize(const CSSSize& size) {
s/size/aSize/
Attachment #8606572 -
Flags: review?(bugmail.mozilla) → review+
Comment 113•10 years ago
|
||
(In reply to David Parks [:handyman] from comment #111)
> 2. Store TabParents with their root window
WindowRoot, not root window.
Comment 114•10 years ago
|
||
Comment on attachment 8606574 [details] [diff] [review]
2. Store TabParents with their root window
>exporting patch:
># HG changeset patch
># User David Parks <davidp99@gmail.com>
># Date 1431545429 25200
># Wed May 13 12:30:29 2015 -0700
># Node ID e3c821fd5a6117b606c7a958705c8c08333f741a
># Parent 40863f35a1f48b8fdd83e8a17adcc9e369597855
>Bug 1125325 - Store TabParents with their root window
>
>nsContentUtils::CallOnAllRemoteChildren calls a callback on all tabs
>connected to a given window but it has only worked in Firefox e10s tabs.
>This patch adds a list of (weak) references to each top-level document's
>top-level window so that e.g. the nsPresContext can access them instead of
>using nsContentUtils.
not top-level window, but WindowRoot. Very different object.
>+namespace dom {
>+class TabParent;
>+}
>+}
>+
>+// A set of weak references to dom::TabParents
>+typedef std::set<nsWeakPtr> WeakTabParents;
Please no. We want O(1) access here.
nsTHashtable<nsRefPtrHashKey<nsIWeakReference>> might work.
>+nsWindowRoot::AddBrowser(mozilla::dom::TabParent* browser) {
aBrowser
and { goes to its worn line
>+void
>+nsWindowRoot::RemoveBrowser(mozilla::dom::TabParent* browser) {
ditto
>+ const WeakTabParents GetRegisteredBrowsers() {
{ to its own line
>+static already_AddRefed<nsPIWindowRoot>
>+GetTopLevelDocumentWindow(nsIDocument* doc)
aDoc
And the method name is wrong. It is about WindowRoot, not Window
>+ while (doc->GetParentDocument()) {
>+ doc = doc->GetParentDocument();
>+ }
Why you need this loop? win->GetTopWindowRoot() should work just fine.
>+static already_AddRefed<nsPIWindowRoot>
>+GetTopLevelDocumentWindow(nsIDocument* doc)
aDoc
>+{
>+ if (!doc) {
>+ return nullptr;
>+ }
>+ while (doc->GetParentDocument()) {
>+ doc = doc->GetParentDocument();
>+ }
>+ nsCOMPtr<nsPIDOMWindow> win = doc->GetWindow();
>+ return win ? win->GetTopWindowRoot() : nullptr;
>+}
... but you have exactly the same method already in TabParent.cpp.
Please add this kind of helper methods to nsContentUtils
Attachment #8606574 -
Flags: review?(bugs) → review-
| Assignee | ||
Comment 116•10 years ago
|
||
Includes kats requested changes.
Attachment #8606572 -
Attachment is obsolete: true
| Assignee | ||
Comment 117•10 years ago
|
||
Includes the stuff from review in comment 114. No big surprises here.
Tests (both patches):
https://treeherder.mozilla.org/#/jobs?repo=try&revision=8183c19bb372
Attachment #8606574 -
Attachment is obsolete: true
Attachment #8611540 -
Flags: review?(bugs)
Comment 118•10 years ago
|
||
Comment on attachment 8611540 [details] [diff] [review]
2. Store TabParents with their WindowRoot
>+already_AddRefed<nsPIWindowRoot>
>+nsContentUtils::GetWindowRoot(nsIDocument* aDoc)
>+{
>+ while (aDoc) {
>+ nsCOMPtr<nsPIDOMWindow> win = aDoc->GetWindow();
>+ if (win) {
>+ return win->GetTopWindowRoot();
>+ }
>+ aDoc = aDoc->GetParentDocument();
>+ }
Actually,
if (aDoc) {
nsPIDOMWindow* win = aDoc->GetWindow();
if (win) {
return win->GetTopWindowRoot();
}
}
return nullptr;
should be enough.
> #define NS_IWINDOWROOT_IID \
> { 0x728a2682, 0x55c0, 0x4860, \
> { 0x82, 0x6b, 0x0c, 0x30, 0x0a, 0xac, 0xaa, 0x60 } }
Update this IID
>+ typedef void (*BrowserEnumerator)(mozilla::dom::TabParent *aTab, void *aArg);
>+
>+ // Enumerate all stored browsers that for which the weak reference is valid.
>+ virtual void EnumerateBrowsers(BrowserEnumerator aEnumFunc, void *aArg) = 0;
* goes with the type, not with argument name
Same also elsewhere.
>+static PLDHashOperator
>+WeakBrowserEnumFunc(nsRefPtrHashKey<nsIWeakReference> *aKey, void *aArg)
>+{
>+ WeakBrowserCallback* callback = static_cast<WeakBrowserCallback*>(aArg);
>+ nsCOMPtr<nsITabParent> opener(do_QueryReferent((*aKey).GetKey()));
opener?
>+ TabParent* tab = TabParent::GetFrom(opener);
>+ if (tab) {
>+ callback->mUserFunc(tab, callback->mUserArg);
>+ }
>+ return PL_DHASH_NEXT;
>+}
>+
>+void
>+nsWindowRoot::EnumerateBrowsers(BrowserEnumerator aEnumFunc, void *aArg)
>+{
>+ WeakBrowserCallback callback;
>+ callback.mUserFunc = aEnumFunc;
>+ callback.mUserArg = aArg;
>+ mWeakBrowsers.EnumerateEntries(WeakBrowserEnumFunc, &callback);
I think this could would be a bit simpler and safer if you
collected TabBrowsers to nsTArray<nsRefPtr<TabParent>> tabParents; using EnumerateEntries()
static PLDHashOperator
WeakBrowserEnumFunc(nsRefPtrHashKey<nsIWeakReference>* aKey, void* aArg)
{
nsTArray<nsRefPtr<TabParent>>* tabParents = static_cast<nsTArray<nsRefPtr<TabParent>>*>(aArgs);
nsCOMPtr<nsITabParent> tabParent(do_QueryReferent((*aKey).GetKey()));
if (tabParent) {
tabParents->AppendElement(tabParent);
}
}
nsTArray<nsRefPtr<TabParent>> tabParents;
mWeakBrowsers.EnumerateEntries(WeakBrowserEnumFunc, &tabParent);
and then just
for (var i = 0; i < tabParents.Length(); ++i) {
aEnumFunc(tabParents[i], aArg);
}
This way it would be ok for aEnumFunc to end up causing changes to mWeakBrowsers (for example to remove TabParent)
You could then drop struct WeakBrowserCallback too.
Sure, it is O(2n) vs O(n), but I don't think that is an issue.
With those changes r+.
(if you think the change to enumeration needs a new review, feel free to ask such)
Attachment #8611540 -
Flags: review?(bugs) → review+
Comment 119•10 years ago
|
||
If this lands soon in m-c, let's verify the fix in nightly and uplift it to aurora. David when that's the case can you request upplift?
Depending on how that goes we might also want to uplift to beta.
Flags: qe-verify+
Flags: needinfo?(florin.mezei)
| Assignee | ||
Comment 120•10 years ago
|
||
Originally r+ed in comment 118. Includes smaug's requested changes.
(In reply to Liz Henry (:lizzard) from comment #119)
> If this lands soon in m-c, let's verify the fix in nightly and uplift it to
> aurora. David when that's the case can you request upplift?
Sure thing, Liz.
(In reply to Olli Pettay [:smaug] from comment #118)
> Comment on attachment 8611540 [details] [diff] [review]
> 2. Store TabParents with their WindowRoot
>
> (if you think the change to enumeration needs a new review, feel free to ask
> such)
Eh, it was basically cutting and pasting from your review. I'm just going to check it in.
Tests:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=321463ea63b4
Attachment #8611540 -
Attachment is obsolete: true
| Assignee | ||
Updated•10 years ago
|
Keywords: checkin-needed
Comment 121•10 years ago
|
||
Hi, this patch failed to apply:
patching file dom/ipc/TabChild.cpp
Hunk #1 FAILED at 234
1 out of 2 hunks FAILED -- saving rejects to file dom/ipc/TabChild.cpp.rej
could you take a look, thanks!
Flags: needinfo?(davidp99)
Keywords: checkin-needed
| Assignee | ||
Comment 122•10 years ago
|
||
de-bitrot and try again...
Attachment #8611533 -
Attachment is obsolete: true
Flags: needinfo?(davidp99)
| Assignee | ||
Updated•10 years ago
|
Keywords: checkin-needed
Comment 124•10 years ago
|
||
https://hg.mozilla.org/integration/mozilla-inbound/rev/e49c45545fe4
https://hg.mozilla.org/integration/mozilla-inbound/rev/a6f9a20a2bcc
Keywords: checkin-needed
Comment 125•10 years ago
|
||
Quoting part 1:
>+++ b/dom/ipc/TabChild.h
> class TabChild final : public TabChildBase,
[...]
>+ virtual ScreenIntSize GetInnerSize();
>+
This declaration was missing an 'override' annotation, which causes clang 3.6 & newer to spam a "-Winconsistent-missing-override" build warning, which busts --enable-warnings-as-errors builds (with clang 3.6+).
(TabChild's new GetInnerSize method overrides a pure virtual method of the same name, in TabChildBase, added elsewhere in this patch.)
Quoting part 2:
>+ // Stores a weak reference to the browser.
>+ virtual void AddBrowser(mozilla::dom::TabParent* aBrowser) = 0;
>+ virtual void RemoveBrowser(mozilla::dom::TabParent* aBrowser) = 0;
[...]
>+ virtual void EnumerateBrowsers(BrowserEnumerator aEnumFunc, void* aArg) = 0;
[...]
>+ virtual void AddBrowser(mozilla::dom::TabParent* aBrowser);
>+ virtual void RemoveBrowser(mozilla::dom::TabParent* aBrowser);
>+ virtual void EnumerateBrowsers(BrowserEnumerator aEnumFunc, void *aArg);
These were missing 'override' as well (in nsWindowRoot, overriding the new pure virtual versions in superclass nsPIWindowRoot).
I pushed a followup to add the 'override' keyword, with blanket r+ that ehsan granted me for fixes of this sort over in bug 1126447 comment 2:
https://hg.mozilla.org/integration/mozilla-inbound/rev/706987998e8e
Comment 126•10 years ago
|
||
https://hg.mozilla.org/mozilla-central/rev/e49c45545fe4
https://hg.mozilla.org/mozilla-central/rev/a6f9a20a2bcc
https://hg.mozilla.org/mozilla-central/rev/706987998e8e
Status: ASSIGNED → RESOLVED
Closed: 10 years ago
status-firefox41:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla41
Comment 127•10 years ago
|
||
I backed out the three patches here in https://hg.mozilla.org/integration/mozilla-inbound/rev/7e232a3c57ee to fix bug 1173224.
Comment 130•10 years ago
|
||
I can reproduce bug 1173224 on Aries with the patches reapplied on master. I'm investigating.
Comment 131•10 years ago
|
||
So the problem is that sometimes when SendUpdateDimensions is called on the TabParent, the GetWidget() returns null, and so we just use 1 for the widget scale. This ends up sending bad values over the pipe to the child. I later see the right values flowing through again, but it seems like the damage is done and the TabChild lays out the keyboard based on the bad values that came through earlier. So there might be a couple of bugs here; one is the fact that we're sending over bad values, and the other is that the child process doesn't relayout when the transiently-bad values are corrected to good values. I can write a simple patch to fix the first issue and assuming everything is green/it fixes this bug I think we should land it. I don't know how involved it will be to fix the second issue.
Comment 132•10 years ago
|
||
Attachment #8621726 -
Flags: review+
Comment 133•10 years ago
|
||
Attachment #8621730 -
Flags: review?(davidp99)
Attachment #8621730 -
Flags: review?(bugs)
Comment 134•10 years ago
|
||
Comment on attachment 8621730 [details] [diff] [review]
4. Fix for sending over bad data when widget is null
It is totally bizarre state to not have widget. Do you know when that happens?
Sounds like a bug elsewhere.
Perhaps add NS_WARNING to if (!widget)
But I guess we can take this anyhow.
Attachment #8621730 -
Flags: review?(bugs) → review+
| Assignee | ||
Comment 135•10 years ago
|
||
Comment on attachment 8621730 [details] [diff] [review]
4. Fix for sending over bad data when widget is null
> the child
> process doesn't relayout when the transiently-bad values are corrected to
> good values.
This could be an issue with the HasValidInnerSize() flag, although I was never clear on the reason for that initialization case (size == 0,0) either. There is special handling for both the null TabParent widget case and the size = 0,0 case -- if the point of still making the RPC call in those cases is to do some early initialization then maybe they should be conflated... ie send size=0,0 when the TabParent's widget is null, thereby not setting HasValidInnerSize, which, objectively, it does not.
But thats just a brainstorm. If cutting it out as done in this patch works, that's even better.
Attachment #8621730 -
Flags: review?(davidp99) → feedback+
Comment 136•10 years ago
|
||
(In reply to Olli Pettay [:smaug]
> It is totally bizarre state to not have widget. Do you know when that
> happens?
Not really sure. Seems to happen during startup of the keyboard process.
> Sounds like a bug elsewhere.
> Perhaps add NS_WARNING to if (!widget)
Added NS_WARNING.
(In reply to David Parks [:handyman] from comment #135)
> This could be an issue with the HasValidInnerSize() flag, although I was
> never clear on the reason for that initialization case (size == 0,0) either.
> There is special handling for both the null TabParent widget case and the
> size = 0,0 case -- if the point of still making the RPC call in those cases
> is to do some early initialization then maybe they should be conflated... ie
> send size=0,0 when the TabParent's widget is null, thereby not setting
> HasValidInnerSize, which, objectively, it does not.
>
> But thats just a brainstorm. If cutting it out as done in this patch works,
> that's even better.
Yeah I'm not really sure. I just went with the most straightforward fix that got the job done.
Comment 137•10 years ago
|
||
Comment 138•10 years ago
|
||
https://hg.mozilla.org/mozilla-central/rev/eec75d3d0344
https://hg.mozilla.org/mozilla-central/rev/824f596aadef
https://hg.mozilla.org/mozilla-central/rev/6b19e87c2d0a
https://hg.mozilla.org/mozilla-central/rev/0f75f079159c
Status: REOPENED → RESOLVED
Closed: 10 years ago → 10 years ago
Resolution: --- → FIXED
Comment 139•10 years ago
|
||
Tracking this for 40+. This might be good to uplift to aurora. Wontfix for 39 as I think this is too big of a change and not crucial enough fix to land in the last beta cycle before release.
Comment 140•10 years ago
|
||
FWIW I think this is a pretty high-risk change and would be strongly opposed to uplifting it. It's already been backed out multiple times and may very well be the cause of other regressions that have cropped up recently.
Comment 141•10 years ago
|
||
I was able to reliably reproduce the original issue on a MacBook Pro Retina, 15-inch, Late 2013, with an external monitor, using Nightly from 2015-05-25, and the following steps:
1. Have the external monitor disconnected from the MacBook.
2. Start Nightly and leave just the default about:home tab open.
3. Resize Nightly to Full Screen mode (use expand arrows in upper right corner of browser window or shift+command+f).
4. Connect the external monitor by plugging the HDMI cable into the external display port.
5. Once the external monitor is connected, close the MacBook's lid -> Nightly is moved to the external monitor and resizes incorrectly showing about 1/4 of the actual page.
6. Open the MacBook's lid again -> Nightly is moved back to the MacBook screen, but the page is still incorrectly resized.
I was able to reproduce the above issue only with e10s enabled, and was able to verify the fix (with e10s enabled) on latest Nightly 41 (BuildID=20150618134629). I see the temporary resizing animation on various pages, but the pages are never stuck displaying at incorrect size.
Since I am not able to reproduce in non-e10s mode, I'll keep the needinfo around to try again if I get some time, and I'll keep the bug Resolved to see if anyone else still sees this issue.
Comment 142•10 years ago
|
||
David, we are early in the Beta cycle. What is the status of this bug currently, and do you have any intention to uplift to Beta 40?
Flags: needinfo?(davidp99)
Comment 143•10 years ago
|
||
Note that this bug regressed bug 1164406 as a result of a rebase error, and this regression is being fixed in 1178847. However, the regression only affects APZ, so it's probably irrelevant for uplift purposes.
Comment 144•10 years ago
|
||
I believe handyman will be AFK for some time - so I don't think he'll be able to weigh in here.
| Assignee | ||
Comment 145•10 years ago
|
||
(In reply to Kate Glazko from comment #142)
> David, we are early in the Beta cycle. What is the status of this bug
> currently, and do you have any intention to uplift to Beta 40?
Mike's right -- I'll only be able to devote a little free time to this (and am currently on vacation) so I'm sure I wouldn't be the best person to support critical uplift issues. After me, kats knows the most about this patch (and this corner of the code base) so I'd defer to him and he's suggesting no uplift (comment 140).
Flags: needinfo?(davidp99)
Comment 146•10 years ago
|
||
OK. Let it ride the train then. The patches are too big for an uplift in beta...
Comment 147•10 years ago
|
||
I've tried again today to reproduce the issue using the latest Firefox 43 Nightly (e10s enabled) and Firefox 41 Beta 4, but I could not reproduce the issue. Since it's been more than a month without any regressions, or any additional reports of this happening, I'm closing it as verified.
| Reporter | ||
Comment 148•10 years ago
|
||
btw, I still see this HiDPI issue in Firefox 41 intermittently, though I don't have consistent STR.
Comment 149•10 years ago
|
||
I still have this issue on OSX on betas of Fx 45 and have been having it for a long time. For me, steps to reproduction:
0: Fx open on my Macbook Pro Retina, no monitor plugged in
1: Plug in monitor (doesn't matter if MbP is open or closed)
2: All open tabs now look like this: http://imgur.com/GDinbku
I've been triggering UI reloads by invoking the search UI (command + F)
Comment 150•10 years ago
|
||
(In reply to Miles Crabill from comment #149)
> I still have this issue on OSX on betas of Fx 45 and have been having it for
> a long time. For me, steps to reproduction:
>
> 0: Fx open on my Macbook Pro Retina, no monitor plugged in
> 1: Plug in monitor (doesn't matter if MbP is open or closed)
> 2: All open tabs now look like this: http://imgur.com/GDinbku
>
> I've been triggering UI reloads by invoking the search UI (command + F)
Hey Miles - are you able to reproduce if you have your add-ons disabled[1]?
[1]: https://support.mozilla.org/en-US/kb/troubleshoot-firefox-issues-using-safe-mode#w_how-to-start-firefox-in-safe-mode
Flags: needinfo?(mcrabill)
Comment 151•10 years ago
|
||
I too have started experiencing this bug again recently.
It appeared to be fixed for a while but either my recent upgrade to OS X 10.11.4 or Firefox 45.0.1 has caused it to return.
Manually resizing the window seems to cure it.
Comment 152•10 years ago
|
||
I experience this almost every time I drag Firefox (45.0.1) between iMac Retina and external display. External display is permanently connected, no connecting or disconnecting involved. (I can't quantify the "almost" I'm afraid)
Comment 153•9 years ago
|
||
This is not fixed. Unfortunately it makes Firefox unusable. So I am now using Chrome which works fine.
Basically I have the new Mac Laptop with Retina display. I select the option to mirror my display. My external display is a Dell2407WFP (1920 resolution). And Firefox is gigantic. And the native firefox popups that appear aren't sized right and sometimes you can see the "ok/cancel" buttons.
I believe it's basically rendering the display using the retina resolution size, and not the external display size. All other apps on my computer are sized fine. Just not Firefox.
Comment 154•9 years ago
|
||
(In reply to md from comment #153)
> This is not fixed. Unfortunately it makes Firefox unusable. So I am now
> using Chrome which works fine.
>
> Basically I have the new Mac Laptop with Retina display. I select the
> option to mirror my display. My external display is a Dell2407WFP (1920
> resolution). And Firefox is gigantic. And the native firefox popups that
> appear aren't sized right and sometimes you can see the "ok/cancel" buttons.
>
>
> I believe it's basically rendering the display using the retina resolution
> size, and not the external display size. All other apps on my computer are
> sized fine. Just not Firefox.
I should add I'm running these versions:
Firefox 46.0.1
OSX: 10.11.4
MacBook Pro (Retina, 15-inch, Mid 2015)
Mac Graphics: AMD Radeon R9 M370X 2048 MB
External Monitor: Dell 2407WFP 24inch (1920x1200)
And again I am running this mirror, with the Mac lid shut. Problem persists if I reboot with the mac lid open - this doesn't seem to matter. Problem persists if I restart with the mac lid open or mac lid shut.
Thanks--
Comment 155•9 years ago
|
||
(In reply to md from comment #154)
> (In reply to md from comment #153)
> > This is not fixed. Unfortunately it makes Firefox unusable. So I am now
> > using Chrome which works fine.
> >
> > Basically I have the new Mac Laptop with Retina display. I select the
> > option to mirror my display. My external display is a Dell2407WFP (1920
> > resolution). And Firefox is gigantic. And the native firefox popups that
> > appear aren't sized right and sometimes you can see the "ok/cancel" buttons.
> >
> >
> > I believe it's basically rendering the display using the retina resolution
> > size, and not the external display size. All other apps on my computer are
> > sized fine. Just not Firefox.
>
> I should add I'm running these versions:
> Firefox 46.0.1
> OSX: 10.11.4
> MacBook Pro (Retina, 15-inch, Mid 2015)
> Mac Graphics: AMD Radeon R9 M370X 2048 MB
> External Monitor: Dell 2407WFP 24inch (1920x1200)
> And again I am running this mirror, with the Mac lid shut. Problem persists
> if I reboot with the mac lid open - this doesn't seem to matter. Problem
> persists if I restart with the mac lid open or mac lid shut.
>
> Thanks--
Hello md,
This bug was strictly for the case where multiprocess mode ("e10s") is enabled in the browser. Have you somehow enabled e10s in your profile? You can check by going to about:support, and seeing if "Multiprocess Windows" under the "Application Basics" section is showing a value greater than 0 for the number of multiprocess windows.
If not, then I think this is a separate bug.
Flags: needinfo?(mdunnerstick)
Comment 156•9 years ago
|
||
I went to about support. This is what it says:
Multiprocess Windows: 0/1 (Disabled)
Below is raw data:
{
"application": {
"name": "Firefox",
"version": "46.0.1",
"buildID": "20160502172042",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:46.0) Gecko/20100101 Firefox/46.0",
"safeMode": false,
"updateChannel": "release",
"supportURL": "https://support.mozilla.org/1/firefox/46.0.1/Darwin/en-US/",
"numTotalWindows": 1,
"numRemoteWindows": 0,
"remoteAutoStart": false,
"autoStartStatus": 2
},
"modifiedPreferences": {
"accessibility.typeaheadfind.flashBar": 0,
"browser.cache.disk.hashstats_reported": 1,
"browser.cache.frecency_experiment": 3,
"browser.cache.disk.smart_size.first_run": false,
"browser.cache.disk.capacity": 358400,
"browser.cache.disk.filesystem_reported": 1,
"browser.download.importedFromSqlite": true,
"browser.download.useDownloadDir": false,
"browser.places.smartBookmarksVersion": 7,
"browser.search.suggest.enabled": false,
"browser.sessionstore.upgradeBackup.latestBuildID": "20160502172042",
"browser.startup.homepage": "https://news.google.com/news?ned=es_mx",
"browser.startup.homepage_override.buildID": "20160502172042",
"browser.startup.homepage_override.mstone": "46.0.1",
"browser.tabs.warnOnClose": false,
"dom.push.userAgentID": "e4a5add0f7fe49f492de2f9941c6f769",
"dom.apps.reset-permissions": true,
"dom.mozApps.used": true,
"extensions.lastAppVersion": "46.0.1",
"font.internaluseonly.changed": true,
"gfx.crash-guard.status.glcontext": 2,
"gfx.crash-guard.glcontext.deviceID": "0x0d26",
"gfx.crash-guard.glcontext.appVersion": "45.0.2",
"gfx.blacklist.direct2d": 3,
"gfx.blacklist.layers.direct3d9": 3,
"media.webrtc.debug.aec_log_dir": "/tmp/",
"media.webrtc.debug.log_file": "/tmp/WebRTC.log",
"media.gmp-gmpopenh264.version": "1.5.3",
"media.youtube-ua.override.to": "43",
"media.gmp-gmpopenh264.abi": "x86_64-gcc3-u-i386-x86_64",
"media.gmp-manager.buildID": "20160502172042",
"media.gmp-gmpopenh264.lastUpdate": 1451555675,
"media.gmp-manager.lastCheck": 1463699935,
"network.auth.allow-subresource-auth": 2,
"network.cookie.prefsMigrated": true,
"network.predictor.cleaned-up": true,
"places.history.expiration.transient_current_max_pages": 104858,
"places.database.lastMaintenance": 1463503931,
"plugin.state.silverlight": 1,
"plugin.importedState": true,
"plugin.disable_full_page_plugin_for_types": "application/pdf",
"plugin.state.flash": 1,
"print.print_plex_name": "",
"print.print_margin_top": "0.5",
"print.print_paper_width": " 8.50",
"print.print_to_file": false,
"print.print_evenpages": true,
"print.print_orientation": 0,
"print.print_unwriteable_margin_right": 25,
"print.print_unwriteable_margin_left": 25,
"print.print_margin_left": "0.5",
"print.print_command": "",
"print.print_reversed": false,
"print.print_unwriteable_margin_bottom": 56,
"print.print_resolution_name": "",
"print.print_duplex": 1515870810,
"print.print_scaling": " 1.00",
"print.print_margin_right": "0.5",
"print.print_oddpages": true,
"print.print_bgcolor": false,
"print.print_colorspace": "",
"print.print_bgimages": false,
"print.print_downloadfonts": false,
"print.print_paper_height": " 11.00",
"print.print_shrink_to_fit": true,
"print.print_unwriteable_margin_top": 25,
"print.print_paper_name": "",
"print.print_page_delay": 50,
"print.print_margin_bottom": "0.5",
"print.print_in_color": true,
"print.print_paper_size_type": 1,
"print.print_paper_data": 0,
"print.print_paper_size_unit": 0,
"print.print_resolution": 1515870810,
"privacy.cpd.sessions": false,
"privacy.sanitize.timeSpan": 0,
"privacy.sanitize.sanitizeOnShutdown": true,
"privacy.clearOnShutdown.sessions": false,
"privacy.clearOnShutdown.cookies": false,
"privacy.sanitize.migrateFx3Prefs": true,
"privacy.sanitize.migrateClearSavedPwdsOnExit": true,
"services.sync.declinedEngines": "",
"services.sync.lastPing": 1463698708,
"services.sync.lastSync": "Thu May 19 2016 19:34:36 GMT-0700 (PDT)",
"services.sync.numClients": 1,
"services.sync.engine.prefs.modified": false,
"storage.vacuum.last.places.sqlite": 1462749394,
"storage.vacuum.last.index": 1
},
"lockedPreferences": {},
"graphics": {
"numTotalWindows": 1,
"numAcceleratedWindows": 1,
"windowLayerManagerType": "OpenGL",
"windowLayerManagerRemote": true,
"supportsHardwareH264": "No; ",
"adapterDescription": "",
"adapterVendorID": "0x1002",
"adapterDeviceID": "0x6821",
"adapterRAM": "",
"adapterDrivers": "",
"driverVersion": "",
"driverDate": "",
"webglRenderer": "ATI Technologies Inc. -- AMD Radeon R9 M370X OpenGL Engine",
"info": {
"AzureCanvasBackend": "skia",
"AzureSkiaAccelerated": 1,
"AzureFallbackCanvasBackend": "none",
"AzureContentBackend": "quartz"
}
},
"javaScript": {
"incrementalGCEnabled": true
},
"accessibility": {
"isActive": false,
"forceDisabled": 0
},
"libraryVersions": {
"NSPR": {
"minVersion": "4.12",
"version": "4.12"
},
"NSS": {
"minVersion": "3.22.3 Basic ECC",
"version": "3.22.3 Basic ECC"
},
"NSSUTIL": {
"minVersion": "3.22.3",
"version": "3.22.3"
},
"NSSSSL": {
"minVersion": "3.22.3 Basic ECC",
"version": "3.22.3 Basic ECC"
},
"NSSSMIME": {
"minVersion": "3.22.3 Basic ECC",
"version": "3.22.3 Basic ECC"
}
},
"userJS": {
"exists": false
},
"crashes": {
"submitted": [],
"pending": 0
},
"extensions": [
{
"name": "BrowserStack",
"version": "22.0",
"isActive": true,
"id": "{6cc0f0f7-a6e2-4834-9682-24de2229b51e}"
},
{
"name": "Charles Proxy Auto-configuration",
"version": "3.11",
"isActive": true,
"id": "{3e9a3920-1b27-11da-8cd6-0800200c9a66}"
},
{
"name": "CodeBurner for Firebug",
"version": "1.6.1-signed.1-signed",
"isActive": true,
"id": "firebug@tools.sitepoint.com"
},
{
"name": "Empty Cache Button",
"version": "2.7.1-signed.1-signed",
"isActive": true,
"id": "{4cc4a13b-94a6-7568-370d-5f9de54a9c7f}"
},
{
"name": "Firebug",
"version": "3.0.0-beta.3",
"isActive": true,
"id": "firebug@software.joehewitt.com"
},
{
"name": "Firefox Hello",
"version": "1.2.6",
"isActive": true,
"id": "loop@mozilla.org"
},
{
"name": "Multi-process staged rollout",
"version": "1.0",
"isActive": true,
"id": "e10srollout@mozilla.org"
},
{
"name": "Pocket",
"version": "1.0",
"isActive": true,
"id": "firefox@getpocket.com"
},
{
"name": "anonymoX",
"version": "2.5.2",
"isActive": false,
"id": "client@anonymox.net"
},
{
"name": "Autofill Forms",
"version": "1.1.0.1",
"isActive": false,
"id": "autofillForms@blueimp.net"
},
{
"name": "Geolocater",
"version": "1.7.1.1-signed.1-signed",
"isActive": false,
"id": "geolocater@3liz.com"
},
{
"name": "Reddit Enhancement Suite",
"version": "4.6.1",
"isActive": false,
"id": "jid1-xUfzOsOFlzSOXg@jetpack"
}
],
"experiments": []
}
Comment 157•9 years ago
|
||
Whoops - I'm totally wrong. comment 0 makes it pretty clear that this wasn't intended to be an e10s-only bug.
Hey jfkthame - do you know if there are any outstanding bugs for Retina scaling stuff, like what md is reporting in comment 153?
Comment 158•9 years ago
|
||
ni'ing for comment 157.
Flags: needinfo?(mdunnerstick) → needinfo?(jfkthame)
Comment 159•9 years ago
|
||
There's bug 1279470, but that was originally filed for Windows; I think we should track the platforms separately as this is likely to be an issue in the platform-specific widget layer. I've heard a couple other reports of similar issues but can't seem to reproduce locally at the moment.
Filing a new bug is probably best, given the age of this one.
Flags: needinfo?(jfkthame)
Comment 160•9 years ago
|
||
I have this problem on OS X 10.11.5
Firefox 47.0.1
Thunderbird 45.1.1
Comment 161•9 years ago
|
||
I have this problem on OS X 10.11.6
MacBook Pro (Retina, 13-inch, Early 2015)
Firefox 47.0
I was recently using a Macbook Air on the same OS and Firefox version and this problem did not exist there, fwiw.
Comment 162•9 years ago
|
||
Hi, I just wanted to add that I was using my laptop to connect to a TV over Apple Airplay. And the same issue has occurred there. You have all my specs in Comment 153 & 154.
I just want to also say that I fully switched to Chrome now. It kind of bums me out, since I have been using Firefox since before Firefox back when it was still Mozilla. And really believe in the product. But this is a major deal breaker. Firefox is unusable when connecting to another monitor. So I had to switch. I hope people will escalate the priority of this. The status still says "VERIFIED FIXED" even though it is not and others are logging issues.
Thanks.
Comment 163•9 years ago
|
||
I suspect you may have been seeing bug 1154125, which showed a lot of the same symptoms as this issue, and was only fixed quite recently.
Current versions of Nightly[1] or Firefox Developer Edition[2] should have that fix, and no longer exhibit this kind of bug. That fix is currently on track to ship to the Release channel in Firefox 49.
[1] https://nightly.mozilla.org/
[2] https://www.mozilla.org/en-US/firefox/developer/
Updated•9 years ago
|
Flags: needinfo?(miles)
You need to log in
before you can comment on or make changes to this bug.
Description
•