Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openthos
gecko-dev
提交
b0dce097
G
gecko-dev
项目概览
openthos
/
gecko-dev
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gecko-dev
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b0dce097
编写于
9月 02, 2016
作者:
T
Tooru Fujisawa
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Bug 1284511 - Fix slow script check to use elapsed time from last check. r=mrbkap, a=sylvestre
上级
8a41aaac
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
40 addition
and
19 deletion
+40
-19
js/xpconnect/src/XPCJSRuntime.cpp
js/xpconnect/src/XPCJSRuntime.cpp
+40
-19
未找到文件。
js/xpconnect/src/XPCJSRuntime.cpp
浏览文件 @
b0dce097
...
...
@@ -1004,7 +1004,8 @@ class Watchdog
,
mHibernating
(
false
)
,
mInitialized
(
false
)
,
mShuttingDown
(
false
)
,
mSlowScriptSecondHalfCount
(
0
)
,
mSlowScriptSecondHalf
(
false
)
,
mSlowScriptHalfLastElapsedTime
(
0
)
,
mMinScriptRunTimeSeconds
(
1
)
{}
~
Watchdog
()
{
MOZ_ASSERT
(
!
Initialized
());
}
...
...
@@ -1114,9 +1115,27 @@ class Watchdog
return
mMinScriptRunTimeSeconds
;
}
uint32_t
GetSlowScriptSecondHalfCount
()
{
return
mSlowScriptSecondHalfCount
;
}
void
IncrementSlowScriptSecondHalfCount
()
{
mSlowScriptSecondHalfCount
++
;
}
void
ResetSlowScriptSecondHalfCount
()
{
mSlowScriptSecondHalfCount
=
0
;
}
bool
IsSlowScriptSecondHalf
()
{
return
mSlowScriptSecondHalf
;
}
void
FlipSlowScriptSecondHalf
()
{
mSlowScriptSecondHalf
=
!
mSlowScriptSecondHalf
;
}
PRTime
GetSlowScriptHalfLastElapsedTime
()
{
return
mSlowScriptHalfLastElapsedTime
;
}
void
SetSlowScriptHalfLastElapsedTime
(
PRTime
t
)
{
mSlowScriptHalfLastElapsedTime
=
t
;
}
void
ResetSlowScript
()
{
mSlowScriptSecondHalf
=
false
;
mSlowScriptHalfLastElapsedTime
=
0
;
}
private:
WatchdogManager
*
mManager
;
...
...
@@ -1129,7 +1148,8 @@ class Watchdog
bool
mShuttingDown
;
// See the comment in WatchdogMain.
uint32_t
mSlowScriptSecondHalfCount
;
bool
mSlowScriptSecondHalf
;
PRTime
mSlowScriptHalfLastElapsedTime
;
mozilla
::
Atomic
<
int32_t
>
mMinScriptRunTimeSeconds
;
};
...
...
@@ -1199,7 +1219,7 @@ class WatchdogManager : public nsIObserver
// Write state.
mTimestamps
[
TimestampRuntimeStateChange
]
=
PR_Now
();
if
(
mWatchdog
)
mWatchdog
->
ResetSlowScript
SecondHalfCount
();
mWatchdog
->
ResetSlowScript
();
mRuntimeState
=
active
?
RUNTIME_ACTIVE
:
RUNTIME_INACTIVE
;
// The watchdog may be hibernating, waiting for the runtime to go
...
...
@@ -1338,32 +1358,32 @@ WatchdogMain(void* arg)
// T/2 periods, the script still has the other T/2 seconds to finish.
//
// + <-- TimestampRuntimeStateChange = PR_Now()
// | mSlowScriptSecondHalfCount = 0
// |
// | T/2
// |
t0 >=
T/2
// |
// + <-- mSlowScriptSecondHalf
Count = 1
// + <-- mSlowScriptSecondHalf
== false
// |
// | T/2
// |
t1 >=
T/2
// |
// + <-- mSlowScriptSecondHalf
Count = 2
// + <-- mSlowScriptSecondHalf
== true
// | Invoke interrupt callback
// |
// | T/2
// |
t2 >=
T/2
// |
// + <-- mSlowScriptSecondHalf
Count = 3
// + <-- mSlowScriptSecondHalf
== false
// |
// | T/2
// |
t3 >=
T/2
// |
// + <-- mSlowScriptSecondHalf
Count = 4
// + <-- mSlowScriptSecondHalf
== true
// Invoke interrupt callback
//
PRTime
usecs
=
self
->
MinScriptRunTimeSeconds
()
*
PR_USEC_PER_SEC
;
if
(
manager
->
IsRuntimeActive
())
{
uint32_t
count
=
self
->
GetSlowScriptSecondHalfCount
()
+
1
;
if
(
manager
->
TimeSinceLastRuntimeStateChange
()
>=
usecs
*
count
/
2
)
{
self
->
IncrementSlowScriptSecondHalfCount
();
if
(
count
%
2
==
0
)
{
PRTime
elapsedTime
=
manager
->
TimeSinceLastRuntimeStateChange
();
PRTime
lastElapsedTime
=
self
->
GetSlowScriptHalfLastElapsedTime
();
if
(
elapsedTime
>=
lastElapsedTime
+
usecs
/
2
)
{
self
->
SetSlowScriptHalfLastElapsedTime
(
elapsedTime
);
if
(
self
->
IsSlowScriptSecondHalf
())
{
bool
debuggerAttached
=
false
;
nsCOMPtr
<
nsIDebug2
>
dbg
=
do_GetService
(
"@mozilla.org/xpcom/debug;1"
);
if
(
dbg
)
...
...
@@ -1371,6 +1391,7 @@ WatchdogMain(void* arg)
if
(
!
debuggerAttached
)
JS_RequestInterruptCallback
(
manager
->
Runtime
()
->
Runtime
());
}
self
->
FlipSlowScriptSecondHalf
();
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录