Closed Bug 868047 Opened 11 years ago Closed 11 years ago

Zoom level is not reset between page loads

Categories

(Core :: Graphics: Layers, defect)

ARM
Gonk (Firefox OS)
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla24
blocking-b2g -
Tracking Status
firefox22 --- wontfix
firefox23 --- wontfix
firefox24 --- fixed
b2g18 + fixed
b2g18-v1.0.0 --- wontfix
b2g18-v1.0.1 --- affected

People

(Reporter: cwiiis, Assigned: ajones)

References

Details

(Whiteboard: [status: needs STR] c=)

Attachments

(7 files)

If you navigate to a page, zoom in, then navigate to a new page, the zoom-level stays the same. This is especially unfortunate when the new page you've navigated to has a viewport that restricts zooming, as you end up stuck zoomed in with nothing you can do about it without navigating away from the page.

STR:

1. Open browser
2. Navigate to bing.com
3. Navigate to planet.mozilla.org
4. Zoom in
5. Press back

You are now stuck at the previous zoom level with no way to zoom out beyond either closing the tab or navigating to a page that allows zooming.

This is an extremely common occurrence if you do any amount of browsing on a device. I've verified this issue exists in v1.0.1 and v1-train.
I can reproduce this on 1.0.1 on a Keon, I wonder if it might be a regression as I don't remember seeing it before.

Is this the right place for this bug?
Component: Gaia::Browser → Graphics: Layers
Product: Boot2Gecko → Core
I cannot reproduce this with latest 1.0.1: 

Gecko-b3d69b5
Gaia-716c192

qawanted to try to reproduce it
Keywords: qawanted
Whiteboard: [tef-triage]
I was not able to reproduce this issue one the Unagi device with the latest builds. Which device were you able to reproduce this on?

Unagi
Build ID: 20130503070204
Kernel Date: Dec 5
Gecko: http://hg.mozilla.org/releases/mozilla-b2g18/rev/8becaf2a0bc7
Gaia: b0aca0dd1e2955e11190ede725e1fb9ee596438b

Unagi
Build ID: 20130503070205
Kernel Date: Dec 5
Gecko: http://hg.mozilla.org/releases/mozilla-b2g18_v1_0_1/rev/3f3489356bbc
Gaia: 3e232bce289c9e156d92553e752616cba284bc8f
I reproduced this on a Keon - I'm fairly certain this isn't device-specific, I'll see if I can get hold of an unagi and reproduce on that. I'll record a video on Monday to clarify.
Pulling qawanted per comment 3.
Keywords: qawanted
Can we get an Inari/Buri test here too & also a sense of how frequently someone might hit a page that does not allow zooming?
Keywords: qawanted
I tested this issue on the Unagi again and I was able to reproduce this. Issue reproduced on the Inari device as well. 
Using these steps to repro: 
1. go to msn.com
2. go to cnn.com
3. zoom in
4. press back


Unagi
Build ID: 20130506070204
Kernel Date: Dec 5
Gecko: http://hg.mozilla.org/releases/mozilla-b2g18/rev/00c554abfc17
Gaia: 9377636cee5ac55b9f1d68f598afc7aadfbb2b00

Inari
Build ID: 20130503070205
Kernel Date: Feb 21
Gecko: http://hg.mozilla.org/releases/mozilla-b2g18_v1_0_1/rev/3f3489356bbc
Gaia: 3e232bce289c9e156d92553e752616cba284bc8f
Keywords: qawanted
Those are pretty high traffic sites (at least in en-US) so blocking since it leaves a user stuck in zoomed view.
blocking-b2g: tef? → tef+
Whiteboard: [tef-triage] → c=
Ben, could we work around this in the browser?
Flags: needinfo?(bfrancis)
(In reply to Andrew Overholt [:overholt] from comment #9)
> Ben, could we work around this in the browser?

No
Flags: needinfo?(bfrancis)
Whiteboard: c= → [status: needs owner] c=
Daniel - given that this is being reproduced since your comment 2 results can you a) try again to reproduce with the steps in comment 7 and b) weigh in on whether you would also consider this now to be a blocker (and for which milestone) if you are able to reproduce?
Flags: needinfo?(dcoloma)
Attached file logcat
Is this an issue only when using back/forward, or is it sometimes also an issue when clicking a link?
It may take a few tries before being able to reproduce this issue, or after a couple of minutes of browsing. Here is a logcat of one of the times: https://bug868047.bugzilla.mozilla.org/attachment.cgi?id=747650 

Also a video if that helps: 
http://www.youtube.com/watch?v=dU9G_3iqO_4&feature=youtu.be

If you look towards the end of the video, I got a "Well this is embarrassing" page. Only happened once after repro'ing this bug a number of times.
David, 
The screen stays zoomed in when clicking on other links, unable to zoom out from any of them.
Unable to produce with v1.1 . I followed steps from https://bugzilla.mozilla.org/show_bug.cgi?id=868047#c7 and https://bugzilla.mozilla.org/show_bug.cgi?id=868047#c15 .

Could you please mention whether you are using 1.1 or 1.0.1 or master ?
Flags: needinfo?(ahubenya)
Assignee: nobody → tkundu
Status: NEW → ASSIGNED
I also verified with AU_LINUX_GECKO_ICS_STRAWBERRY_V1.01.00.01.019.100 QRD7x27 device.

But still I can't reproduce any this issue.
Whiteboard: [status: needs owner] c= → [status: needs STR] c=
Yesterday's logcat and video were reproduced with yesterday's v1.0.1 build. I just reproduced the issue again with today's v1 and v1.0.1 builds. 

https://pvtbuilds.mozilla.org/pub/mozilla.org/b2g/nightly/mozilla-b2g18-unagi/latest/

https://pvtbuilds.mozilla.org/pub/mozilla.org/b2g/nightly/mozilla-b2g18_v1_0_1-unagi/latest/
Flags: needinfo?(ahubenya)
i just checked to see what the forward button does.. when the user is in the zoomed in state and presses the -> arrow, and then <- again, the page is no longer zoomed in and the user is able to navigate through the page.
Not able to produce it.
Assignee: tkundu → nobody
I also see similar problem in v1.0.1 MozBuild buri.

STR:

1. Open browser
2. Navigate to bug 870564
      https://bugzilla.mozilla.org/show_bug.cgi?id=870564
4. Zoom in
5. touch youtube link in bug 870564 comment #0

youtube page is sometimes zoomed in.
I've seen this intermittently. I believe it is a race condition mentioned in https://bugzilla.mozilla.org/show_bug.cgi?id=833795#c94
Assignee: nobody → ajones
Flags: needinfo?(dcoloma)
Unable to reproduce on Keon with gaia master and gecko b2g18.
Neither with gaia v1-train.
And neither with gaia v1.0.1.

FYI,

$ git describe --always 
e980247
$ git describe --always local.v1-train 
08074c4
$ git describe --always local.master
6f1813f
Flags: needinfo?
Chris, do you still reproduce it with v1.0.1 that I refer to ?
Flags: needinfo? → needinfo?(chrislord.net)
(In reply to Alexandre LISSY :gerard-majax from comment #27)
> Chris, do you still reproduce it with v1.0.1 that I refer to ?

With the 1.0.1 image you just sent me (thanks :)) I can still reproduce this.

These were my exact steps:

1. go to bing.com
2. search for 'monaco'
3. Let it load
4. Go to planet.mozilla.org
5. While it's loading, scroll down and zoom in
6. Wait for it to load
7. Press back

It's now in a zoomed in state that you can't very easily recover from.
Flags: needinfo?(chrislord.net)
(In reply to Chris Lord [:cwiiis] from comment #28)
> (In reply to Alexandre LISSY :gerard-majax from comment #27)
> > Chris, do you still reproduce it with v1.0.1 that I refer to ?
> 
> With the 1.0.1 image you just sent me (thanks :)) I can still reproduce this.
> 
> These were my exact steps:
> 
> 1. go to bing.com
> 2. search for 'monaco'
> 3. Let it load
> 4. Go to planet.mozilla.org
> 5. While it's loading, scroll down and zoom in
> 6. Wait for it to load
> 7. Press back
> 
> It's now in a zoomed in state that you can't very easily recover from.

It's master at https://github.com/mozilla-b2g/gaia/commit/6f1813f, not 1.0.1. For now, if I don't wait that the page is totally loaded (wifi slow :/), not reproduced.
For whatever reason, it won't reproduce in the same way now, but it does reproduce a rendering glitch consistently that may be a different manifestation of the same bug.

Will attach a video for reference.
Here's what happens, consistently (the first time I did this, the zoom bug happened, but I couldn't get it to happen afterwards...):

https://www.youtube.com/watch?v=WAOnyCNhkRU
It's now too late in the cycle to take a fairly intermittent issue like this and the risk involved with a fix.
blocking-b2g: tef+ → -
tracking-b2g18: --- → +
(In reply to Chris Lord [:cwiiis] from comment #30)
> For whatever reason, it won't reproduce in the same way now, but it does
> reproduce a rendering glitch consistently that may be a different
> manifestation of the same bug.
> 
> Will attach a video for reference.

If you had provided a screenshot, I could have noticed that I have the exact same behavior as in the video you posted :)
Attached image Screenshot of the issue
Chris, is it the issue you described ? If so, I've just reproduced it on Nexus S with up to date gecko b2g18 and gaia master.
Flags: needinfo?(chrislord.net)
(In reply to Alexandre LISSY :gerard-majax from comment #34)
> Created attachment 751440 [details]
> Screenshot of the issue
> 
> Chris, is it the issue you described ? If so, I've just reproduced it on
> Nexus S with up to date gecko b2g18 and gaia master.

Yes, this is it :)
Flags: needinfo?(chrislord.net)
Here are some additionnal data which matches the attached screenshot,

0. Zooming on planet.mozilla.org:
Breakpoint 4, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a91480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mResolution 
$19 = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 3.2046909332275386, height = 1.0464296924824616}, <No data fields>}
(gdb) continue 

1. Pressing back, going back on google.fr:
Breakpoint 4, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a91480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mResolution 
$20 = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 3.0625, height = 0.32653061224489793}, <No data fields>}
(gdb) continue 
Breakpoint 4, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a91480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mResolution 
$21 = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 1, height = 3.0625}, <No data fields>}
(gdb) continue 

2. Google.fr reloaded:
Breakpoint 4, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a91480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mResolution 
$22 = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 3.2046909332275391, height = 1.0464296924824616}, <No data fields>}
(gdb) continue 
Breakpoint 4, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a91480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mResolution 
$24 = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 3.2046909332275391, height = 1.0464296924824616}, <No data fields>}
(gdb) continue 

==> Correct display.


0. Pressing back, going to google.fr from planet.mozilla.org:
Breakpoint 1, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a98480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) watch metrics.mResolution 
Watchpoint 2: metrics.mResolution
(gdb) print metrics.mResolution 
$1 = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 3.0625, height = 0.32653061224489793}, <No data fields>}
(gdb) continue 
Continuing.
Watchpoint 2: metrics.mResolution

Old value = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 3.0625, height = 0.32653061224489793}, <No data fields>}
New value = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 3.0625, height = 3.0625}, <No data fields>}
mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a98480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) continue 
Continuing.

Watchpoint 2 deleted because the program has left the block in
which its expression is valid.
0x408054d4 in nsGlobalWindow::QueryInterface (this=0x42a178b0, aIID=..., aInstancePtr=0xbe8986cc) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/base/nsGlobalWindow.cpp:1238
1238	NS_INTERFACE_MAP_END
(gdb) continue 
Continuing.

1. Google.fr reloaded:
Breakpoint 1, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a98480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mResolution 
$2 = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 1, height = 3.0625}, <No data fields>}
(gdb) continue 
Continuing.

Breakpoint 1, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a98480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mResolution 
$3 = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 2.4658710956573486, height = 0.80518239858199137}, <No data fields>}
(gdb) continue 

===> Incorrect display
0. Zoomed on planet.mozilla.org
Breakpoint 1, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a98480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mDisplayPort 
$4 = {<mozilla::gfx::BaseRect<float, mozilla::gfx::Rect, mozilla::gfx::Point, mozilla::gfx::Size, mozilla::gfx::Margin>> = {x = 0, y = 0, width = 1213, height = 1954.75}, <No data fields>}
(gdb) continue 
Continuing.

1. Pressing back,

Breakpoint 1, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a98480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mDisplayPort 
$5 = {<mozilla::gfx::BaseRect<float, mozilla::gfx::Rect, mozilla::gfx::Point, mozilla::gfx::Size, mozilla::gfx::Margin>> = {x = -99.75, y = -363.046112, width = 598.5, 
    height = 1269.54614}, <No data fields>}
(gdb) continue 
Continuing.

Breakpoint 1, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a98480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mDisplayPort 
$6 = {<mozilla::gfx::BaseRect<float, mozilla::gfx::Rect, mozilla::gfx::Point, mozilla::gfx::Size, mozilla::gfx::Margin>> = {x = 0, y = 0, width = 320, height = 726.25}, <No data fields>}
(gdb) continue 
Continuing.

Breakpoint 1, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a98480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mDisplayPort 
$7 = {<mozilla::gfx::BaseRect<float, mozilla::gfx::Rect, mozilla::gfx::Point, mozilla::gfx::Size, mozilla::gfx::Margin>> = {x = 0, y = 0, width = 320, height = 638.75}, <No data fields>}
(gdb) continue 
Continuing.

2. Google.fr reloaded,

Breakpoint 1, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a98480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mDisplayPort 
$8 = {<mozilla::gfx::BaseRect<float, mozilla::gfx::Rect, mozilla::gfx::Point, mozilla::gfx::Size, mozilla::gfx::Margin>> = {x = -32.5, y = -126.75, width = 162.5, 
    height = 422.499969}, <No data fields>}

=====> Incorrect display
And, for the record, a correct display session:

0. Zoom on planet.mozilla.org:
Breakpoint 4, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a91480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mResolution 
$19 = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 3.2046909332275386, height = 1.0464296924824616}, <No data fields>}
(gdb) continue 

1. Pressing back button, going back on google.fr:
Breakpoint 4, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a91480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mResolution 
$20 = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 3.0625, height = 0.32653061224489793}, <No data fields>}
(gdb) continue 
Breakpoint 4, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a91480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mResolution 
$21 = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 1, height = 3.0625}, <No data fields>}
(gdb) continue 

2. Google.fr reloaded:
Breakpoint 4, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a91480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mResolution 
$22 = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 3.2046909332275391, height = 1.0464296924824616}, <No data fields>}
(gdb) continue 
Breakpoint 4, mozilla::dom::TabChild::HandlePossibleViewportChange (this=0x41a91480) at /media/FirefoxOS/Keon/B2G.v1-train/gecko/dom/ipc/TabChild.cpp:536
536	  utils->SetResolution(metrics.mResolution.width, metrics.mResolution.height);
(gdb) print metrics.mResolution 
$24 = {<mozilla::gfx::BaseSize<double, gfxSize>> = {width = 3.2046909332275391, height = 1.0464296924824616}, <No data fields>}
(gdb) continue 

==> Correct display
Funny, somehow, oldScreenWidth's value disappears,

I/Gecko   ( 2348): TabChild::HandlePossibleViewportChange: oldScreenWidth=320
I/Gecko   ( 2348): TabChild::HandlePossibleViewportChange: oldBrowserWidth=320.000000 -- oldScreenWidth=0.000000

With the first line being emitted when we declare OldScreenWidth and the second one just after computing hysteresis value.
(In reply to Alexandre LISSY :gerard-majax from comment #39)
> Funny, somehow, oldScreenWidth's value disappears,
> 
> I/Gecko   ( 2348): TabChild::HandlePossibleViewportChange: oldScreenWidth=320
> I/Gecko   ( 2348): TabChild::HandlePossibleViewportChange:
> oldBrowserWidth=320.000000 -- oldScreenWidth=0.000000
> 
> With the first line being emitted when we declare OldScreenWidth and the
> second one just after computing hysteresis value.

Nope, nevermind, I was using %f for int32_t :).
Here is a diff on some printf'd values. In both case, I went on planet.mozilla.org, zoomed, then pressed the "back" button in the browser to get back to the Google search I did previously.

--- ../../../zoom.correct.txt	2013-05-19 20:09:46.711585474 +0200
+++ ../../../zoom.incorrect.txt	2013-05-19 20:09:42.883571975 +0200
@@ -10,7 +10,10 @@
 I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (w/ hysteresis) mResolution={3.062500,3.062500}
 I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: screenW=320.000000, screenH=365.000000, viewportW=320.000000, viewportH=365.000000
 I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldScreenWidth=320
-I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=0
+I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=1
+I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: intrinsicScale={1.000000,1.000000}
+I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: metrics.mZoom={1.000000,1.000000}
+I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: metrics.mZoom={1.000000,1.000000}
 I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldBrowserWidth=320.000000 -- oldScreenWidth=320
 I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: hysteresis=1.000000
 I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (wo/ hysteresis) mResolution={3.062500,3.062500}
@@ -20,5 +23,5 @@
 I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=0
 I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldBrowserWidth=320.000000 -- oldScreenWidth=320
 I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: hysteresis=1.000000
-I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (wo/ hysteresis) mResolution={1.000000,1.000000}
-I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (w/ hysteresis) mResolution={1.000000,1.000000}
+I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (wo/ hysteresis) mResolution={0.834063,0.834063}
+I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (w/ hysteresis) mResolution={2.554319,2.554319}
Forgot to add both full logs:

correct:
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: screenW=320.000000, screenH=415.000000, viewportW=320.000000, viewportH=415.000000
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldScreenWidth=320
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=1
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: intrinsicScale={1.000000,1.000000}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: metrics.mZoom={1.000000,1.000000}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: metrics.mZoom={1.000000,1.000000}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldBrowserWidth=980.000000 -- oldScreenWidth=320
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: hysteresis=3.062500
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (wo/ hysteresis) mResolution={0.326531,0.326531}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (w/ hysteresis) mResolution={3.062500,3.062500}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: screenW=320.000000, screenH=365.000000, viewportW=320.000000, viewportH=365.000000
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldScreenWidth=320
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=0
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldBrowserWidth=320.000000 -- oldScreenWidth=320
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: hysteresis=1.000000
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (wo/ hysteresis) mResolution={3.062500,3.062500}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (w/ hysteresis) mResolution={1.000000,1.000000}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: screenW=320.000000, screenH=415.000000, viewportW=320.000000, viewportH=415.000000
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldScreenWidth=320
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=0
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldBrowserWidth=320.000000 -- oldScreenWidth=320
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: hysteresis=1.000000
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (wo/ hysteresis) mResolution={1.000000,1.000000}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (w/ hysteresis) mResolution={1.000000,1.000000}

incorrect:
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: screenW=320.000000, screenH=415.000000, viewportW=320.000000, viewportH=415.000000
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldScreenWidth=320
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=1
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: intrinsicScale={1.000000,1.000000}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: metrics.mZoom={1.000000,1.000000}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: metrics.mZoom={1.000000,1.000000}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldBrowserWidth=980.000000 -- oldScreenWidth=320
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: hysteresis=3.062500
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (wo/ hysteresis) mResolution={0.326531,0.326531}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (w/ hysteresis) mResolution={3.062500,3.062500}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: screenW=320.000000, screenH=365.000000, viewportW=320.000000, viewportH=365.000000
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldScreenWidth=320
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=1
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: intrinsicScale={1.000000,1.000000}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: metrics.mZoom={1.000000,1.000000}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: metrics.mZoom={1.000000,1.000000}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldBrowserWidth=320.000000 -- oldScreenWidth=320
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: hysteresis=1.000000
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (wo/ hysteresis) mResolution={3.062500,3.062500}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (w/ hysteresis) mResolution={1.000000,1.000000}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: screenW=320.000000, screenH=415.000000, viewportW=320.000000, viewportH=415.000000
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldScreenWidth=320
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=0
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: oldBrowserWidth=320.000000 -- oldScreenWidth=320
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: hysteresis=1.000000
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (wo/ hysteresis) mResolution={0.834063,0.834063}
I/Gecko   ( 3206): TabChild::HandlePossibleViewportChange: (w/ hysteresis) mResolution={2.554319,2.554319}
One can see that in the incorrect case, the second isFirstPaint=1 while it's =0 in the correct case. Could it be the issue ?

Looking at the code (https://mxr.mozilla.org/mozilla-b2g18/source/dom/ipc/TabChild.cpp#501):
  // Changing the zoom when we're not doing a first paint will get ignored
  // by AsyncPanZoomController and causes a blurry flash.
  bool isFirstPaint;
  nsresult rv = utils->GetIsFirstPaint(&isFirstPaint);

That could be linked, couldn't it be ?
0. Loading planet.mozilla.org:
I/Gecko   ( 3911): TabChild::OnLocationChange SetIsFirstPaint(true)
I/Gecko   ( 3911): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=1
I/Gecko   ( 3911): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=0

1. During load, zooming and scrolling

2. Pressing back, google reloads:
I/Gecko   ( 3911): TabChild::OnLocationChange SetIsFirstPaint(true)
I/Gecko   ( 3911): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=1
I/Gecko   ( 3911): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=1
I/Gecko   ( 3911): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=0
With a bit more printf(), on a bad case:
$ adb logcat -d | grep -i "isFirstPaint" | grep -v "ShadowLayerForwarder::EndTransaction"
I/Gecko   ( 4163): TabChild::OnLocationChange SetIsFirstPaint(true)
I/Gecko   ( 4163): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=1
I/Gecko   ( 4163): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=1
I/Gecko   ( 4163): PresShell::Paint: mIsFirstPaint = false
I/Gecko   ( 4163): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=0

And on a good case:
$ adb logcat -d | grep -i "isFirstPaint" | grep -v "ShadowLayerForwarder::EndTransaction"
I/Gecko   ( 4163): TabChild::OnLocationChange SetIsFirstPaint(true)
I/Gecko   ( 4163): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=1
I/Gecko   ( 4163): PresShell::Paint: mIsFirstPaint = false
I/Gecko   ( 4163): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=0
I/Gecko   ( 4163): TabChild::HandlePossibleViewportChange: rv=0 -- isFirstPaint=0
A commit just landed that makes changes around zooming, https://git.mozilla.org/?p=releases/gecko.git;a=commit;h=29f0fc2f5945f721363cefa4061b4d983a2301d8

I'll check if it changes anything.
(In reply to Alexandre LISSY :gerard-majax from comment #46)
> A commit just landed that makes changes around zooming,
> https://git.mozilla.org/?p=releases/gecko.git;a=commit;
> h=29f0fc2f5945f721363cefa4061b4d983a2301d8
> 
> I'll check if it changes anything.

Does not fix at all, I'm still reproducing the issue.
The problem is caused by a paint request being sent from the APZC after TabChild has moved to the new location. I'm close to fixing the problem.
(In reply to Alex Keybl [:akeybl] from comment #32)
> It's now too late in the cycle to take a fairly intermittent issue like this
> and the risk involved with a fix.

It's not at all intermittent. It occurs regularly on slow web sites.
Attachment #752557 - Flags: review?(roc)
Attachment #752557 - Flags: review?(bgirard)
Comment on attachment 752557 [details] [diff] [review]
Use a PresShell ID to eliminate stale APZC events;

Review of attachment 752557 [details] [diff] [review]:
-----------------------------------------------------------------

::: dom/ipc/TabChild.cpp
@@ +1465,5 @@
> +}
> +
> +bool
> +TabChild::ProcessUpdateFrame(const FrameMetrics& aFrameMetrics)
> +  {

Fix indent.

::: layout/base/nsIPresShell.h
@@ +1228,5 @@
>     * Get the isFirstPaint flag.
>     */
>    bool GetIsFirstPaint() const { return mIsFirstPaint; }
>  
> +  uint32_t GetPresShellId() { return mPresShellId; }

Document this!
Attachment #752557 - Flags: review?(roc) → review+
Comment on attachment 752557 [details] [diff] [review]
Use a PresShell ID to eliminate stale APZC events;

Review of attachment 752557 [details] [diff] [review]:
-----------------------------------------------------------------

r+ with this fixed

::: gfx/layers/FrameMetrics.h
@@ +70,5 @@
>    bool IsDefault() const
>    {
> +    FrameMetrics def;
> +
> +    def.mPresShellId = mPresShellId;

This is already checked by operator== below isn't it?

::: layout/base/nsPresShell.cpp
@@ +686,5 @@
>  
>  //----------------------------------------------------------------------
>  
>  static bool sSynthMouseMove = true;
> +static uint32_t sNextPresShellId;

= 0

@@ +713,5 @@
>    mIsFirstPaint = false;
>  #else
>    mIsFirstPaint = true;
>  #endif
> +  mPresShellId = sNextPresShellId++;

Use pre-increment.
Attachment #752557 - Flags: review?(bgirard) → review+
https://hg.mozilla.org/mozilla-central/rev/3ee7ee6ad391
Status: ASSIGNED → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla24
(In reply to Anthony Jones (:kentuckyfriedtakahe) from comment #49)
> (In reply to Alex Keybl [:akeybl] from comment #32)
> > It's now too late in the cycle to take a fairly intermittent issue like this
> > and the risk involved with a fix.
> 
> It's not at all intermittent. It occurs regularly on slow web sites.

Should it be uplifted then ? Because I tried to apply it to current b2g18 and a lot of chunks are rejected, so it might need a bit of work.
Flags: needinfo?(akeybl)
STR:

1. Enter nytimes into URL bar
2. Select nytimes from search results
3. Zoom in
4. Press back before the page is fully loaded/finished

This bug will affect pages that are slow to paint and in theory could affect moving forward if going from a slow page to a fast (or cached) one.
Comment on attachment 754309 [details] [diff] [review]
Use a PresShell ID to eliminate stale APZC events (rebased for b2g18)

NOTE: Please see https://wiki.mozilla.org/Release_Management/B2G_Landing to better understand the B2G approval process and landings.

[Approval Request Comment]
Bug caused by (feature/regressing bug #): n/a

User impact if declined:
Pages occasionally get shown with the wrong zoom.

Testing completed:
Limited testing of affected sites and others.

Risk to taking this patch (and alternatives if risky): 
Will stop responding if there are bugs where first paint is somehow not set. Bug 804808 is an example but it is reasonable to expect it to stay fixed.

String or UUID changes made by this patch:
None.
Attachment #754309 - Flags: approval-mozilla-b2g18?
Bug 873573 would also relate to this patch.
Comment on attachment 754309 [details] [diff] [review]
Use a PresShell ID to eliminate stale APZC events (rebased for b2g18)

This is the sort of consistency issue our partners hate. Let's land for v1.1 and backout at the first sign of new blockers.
Attachment #754309 - Flags: approval-mozilla-b2g18? → approval-mozilla-b2g18+
Flags: needinfo?(akeybl)
Could you please check this?

I think there is a side effect of this patch.

When I try to scroll up on some web pages(ex, google search result page), there is a white space instead of repainting the scrolled area some times.

It is caused by  this,  http://dxr.mozilla.org/mozilla-central/source/dom/ipc/TabChild.cpp?from=TabChild.cpp#l1477 

AsyncPanZoomController request to repaint scrolled area but some times this patch just block the updating request because the PresShellID of the FrameMetrics on Layer root tree is different with the DocWindow's one.
 
I checked this on my Leo Device.
Flags: needinfo?(ajones)
just make sure we sync the PresShellID of FrameMetrics with DocWindow PresShell ID to the previous patch work fine at all.
Attachment #759639 - Flags: review?(ajones)
Comment on attachment 759639 [details] [diff] [review]
Additional Patch for bug 868047

See bug	880932.
Attachment #759639 - Flags: review?(ajones)
Flags: needinfo?(ajones)
You need to log in before you can comment on or make changes to this bug.