Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
e25d7ddb
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e25d7ddb
编写于
9月 21, 2018
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fail more graceful when a process cannot be profiled, #58929
上级
27b7b13f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
42 addition
and
24 deletion
+42
-24
src/vs/code/node/cli.ts
src/vs/code/node/cli.ts
+42
-24
未找到文件。
src/vs/code/node/cli.ts
浏览文件 @
e25d7ddb
...
...
@@ -19,6 +19,7 @@ import { resolveTerminalEncoding } from 'vs/base/node/encoding';
import
*
as
iconv
from
'
iconv-lite
'
;
import
{
writeFileAndFlushSync
}
from
'
vs/base/node/extfs
'
;
import
{
isWindows
}
from
'
vs/base/common/platform
'
;
import
{
ProfilingSession
}
from
'
v8-inspect-profiler
'
;
function
shouldSpawnCliProcess
(
argv
:
ParsedArgs
):
boolean
{
return
!!
argv
[
'
install-source
'
]
...
...
@@ -271,37 +272,54 @@ export async function main(argv: string[]): Promise<any> {
fs
.
writeFileSync
(
filenamePrefix
,
argv
.
slice
(
-
6
).
join
(
'
|
'
));
processCallbacks
.
push
(
async
_child
=>
{
class
Profiler
{
static
async
start
(
name
:
string
,
filenamePrefix
:
string
,
opts
:
{
port
:
number
,
tries
?:
number
})
{
const
profiler
=
await
import
(
'
v8-inspect-profiler
'
);
let
session
:
ProfilingSession
;
try
{
session
=
await
profiler
.
startProfiling
(
opts
);
}
catch
(
err
)
{
console
.
error
(
`FAILED to start profiling for '
${
name
}
' on port '
${
opts
.
port
}
'`
);
}
return
{
async
stop
()
{
if
(
!
session
)
{
return
;
}
let
suffix
=
''
;
let
profile
=
await
session
.
stop
();
if
(
!
process
.
env
[
'
VSCODE_DEV
'
])
{
// when running from a not-development-build we remove
// absolute filenames because we don't want to reveal anything
// about users. We also append the `.txt` suffix to make it
// easier to attach these files to GH issues
profile
=
profiler
.
rewriteAbsolutePaths
(
profile
,
'
piiRemoved
'
);
suffix
=
'
.txt
'
;
}
await
profiler
.
writeProfile
(
profile
,
`
${
filenamePrefix
}
-
${
name
}
.cpuprofile
${
suffix
}
`
);
}
};
}
}
try
{
// load and start profiler
const
profiler
=
await
import
(
'
v8-inspect-profiler
'
);
const
main
=
await
profiler
.
startProfiling
({
port
:
portMain
});
const
renderer
=
await
profiler
.
startProfiling
({
port
:
portRenderer
,
tries
:
200
});
const
extHost
=
await
profiler
.
startProfiling
({
port
:
portExthost
,
tries
:
300
});
const
main
=
await
Profiler
.
start
(
'
main
'
,
filenamePrefix
,
{
port
:
portMain
});
const
renderer
=
await
Profiler
.
start
(
'
renderer
'
,
filenamePrefix
,
{
port
:
portRenderer
,
tries
:
200
});
const
extHost
=
await
Profiler
.
start
(
'
extHost
'
,
filenamePrefix
,
{
port
:
portExthost
,
tries
:
300
});
// wait for the renderer to delete the
// marker file
await
whenDeleted
(
filenamePrefix
);
let
profileMain
=
await
main
.
stop
();
let
profileRenderer
=
await
renderer
.
stop
();
let
profileExtHost
=
await
extHost
.
stop
();
let
suffix
=
''
;
if
(
!
process
.
env
[
'
VSCODE_DEV
'
])
{
// when running from a not-development-build we remove
// absolute filenames because we don't want to reveal anything
// about users. We also append the `.txt` suffix to make it
// easier to attach these files to GH issues
profileMain
=
profiler
.
rewriteAbsolutePaths
(
profileMain
,
'
piiRemoved
'
);
profileRenderer
=
profiler
.
rewriteAbsolutePaths
(
profileRenderer
,
'
piiRemoved
'
);
profileExtHost
=
profiler
.
rewriteAbsolutePaths
(
profileExtHost
,
'
piiRemoved
'
);
suffix
=
'
.txt
'
;
}
// finally stop profiling and save profiles to disk
await
profiler
.
writeProfile
(
profileMain
,
`
${
filenamePrefix
}
-main.cpuprofile
${
suffix
}
`
);
await
profiler
.
writeProfile
(
profileRenderer
,
`
${
filenamePrefix
}
-renderer.cpuprofile
${
suffix
}
`
);
await
profiler
.
writeProfile
(
profileExtHost
,
`
${
filenamePrefix
}
-exthost.cpuprofile
${
suffix
}
`
);
// stop profiling
await
main
.
stop
();
await
renderer
.
stop
();
await
extHost
.
stop
();
// re-create the marker file to signal that profiling is done
fs
.
writeFileSync
(
filenamePrefix
,
''
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录