OSDN Git Service

Simplify browser pause/resume logic to avoid stuck timer.
authorShimeng (Simon) Wang <swang@google.com>
Mon, 23 May 2011 16:33:31 +0000 (09:33 -0700)
committerShimeng (Simon) Wang <swang@google.com>
Mon, 23 May 2011 17:00:39 +0000 (10:00 -0700)
commit358d2cd96403383cfb91bb68598a4cb2fe2e170e
treed32fe41ebe50e8ecc9d8e45f660e8d7d3b36a5ed
parenta5293d1ca4459293f4993ea39c09ea703a022844
Simplify browser pause/resume logic to avoid stuck timer.

The current browser pause/resume logic uses an integer count to track
the pause/resume behavior, which is mostly working fine in phone.  The interger
count is usually 0 when browser is paused, and its value is usually 1
when the browser is resumed and will trigger any delayed timer.

But in tablet, where tabs can be easily created/switched/deleted, this
logic will not work well and sometimes cause resources timers get stuck.
For example, in case multiple tabs are created, and you reload one of the
tabs, when it's almost finished, switch to another tab, and hit home or power
button, at this point of time, the browser will be suspended at
Controller.java::onPause, hence the integer count will be 0; but since
the other tab is also finished after the pause, the current logic at
Controller.java::onPageFinished will call pause timer again, which will make
the integer count to be -1.  Before the time the browser is resumed, it's very
possible some tabs will have some resources, such as images/flashs,
scheduled to be loaded, these will be in delayed timer in
ResourceLoadScheduler.cpp's m_requestTimer.
Now when the browser is resumed, the integer count will be 0, which will not
trigger delayed timer.  Then all the new timers will be stuck as well since
old timers are not executed yet.

The fix is to simplify the pause/resume logic by just using a boolean variable
instead of error-prone integer counting.

issue: 4177932
Change-Id: Id10af9298c7be1f82222d0b94c34c5dc68403630
core/java/android/webkit/JWebCoreJavaBridge.java