Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
2404eeaf
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2404eeaf
编写于
1月 18, 2018
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
copy/print factory times as csv, #41712
上级
8062caad
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
120 addition
and
0 deletion
+120
-0
src/vs/workbench/parts/performance/electron-browser/performance.contribution.ts
.../performance/electron-browser/performance.contribution.ts
+1
-0
src/vs/workbench/parts/performance/electron-browser/stats.ts
src/vs/workbench/parts/performance/electron-browser/stats.ts
+119
-0
未找到文件。
src/vs/workbench/parts/performance/electron-browser/performance.contribution.ts
浏览文件 @
2404eeaf
...
...
@@ -6,3 +6,4 @@
'
use strict
'
;
import
'
./startupProfiler
'
;
import
'
./stats
'
;
src/vs/workbench/parts/performance/electron-browser/stats.ts
0 → 100644
浏览文件 @
2404eeaf
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
{
CommandsRegistry
}
from
'
vs/platform/commands/common/commands
'
;
import
{
IClipboardService
}
from
'
vs/platform/clipboard/common/clipboardService
'
;
interface
IRequire
{
(...
a
:
any
[]):
any
;
getStats
():
ILoaderEvent
[];
}
declare
var
require
:
IRequire
;
/* Copied from loader.ts */
enum
LoaderEventType
{
LoaderAvailable
=
1
,
BeginLoadingScript
=
10
,
EndLoadingScriptOK
=
11
,
EndLoadingScriptError
=
12
,
BeginInvokeFactory
=
21
,
EndInvokeFactory
=
22
,
NodeBeginEvaluatingScript
=
31
,
NodeEndEvaluatingScript
=
32
,
NodeBeginNativeRequire
=
33
,
NodeEndNativeRequire
=
34
}
interface
ILoaderEvent
{
type
:
LoaderEventType
;
timestamp
:
number
;
detail
:
string
;
}
class
Tick
{
public
readonly
duration
:
number
;
public
readonly
detail
:
string
;
constructor
(
public
readonly
start
:
ILoaderEvent
,
public
readonly
end
:
ILoaderEvent
)
{
console
.
assert
(
start
.
detail
===
end
.
detail
);
this
.
duration
=
this
.
end
.
timestamp
-
this
.
start
.
timestamp
;
this
.
detail
=
start
.
detail
;
}
static
compareUsingStartTimestamp
(
a
:
Tick
,
b
:
Tick
):
number
{
if
(
a
.
start
.
timestamp
<
b
.
start
.
timestamp
)
{
return
-
1
;
}
else
if
(
a
.
start
.
timestamp
>
b
.
start
.
timestamp
)
{
return
1
;
}
else
{
return
0
;
}
}
}
function
getStats
():
Map
<
LoaderEventType
,
Tick
[]
>
{
const
stats
=
require
.
getStats
().
slice
(
0
).
sort
((
a
:
ILoaderEvent
,
b
:
ILoaderEvent
)
=>
{
if
(
a
.
detail
<
b
.
detail
)
{
return
-
1
;
}
else
if
(
a
.
detail
>
b
.
detail
)
{
return
1
;
}
else
if
(
a
.
type
<
b
.
type
)
{
return
-
1
;
}
else
if
(
a
.
type
>
b
.
type
)
{
return
1
;
}
else
{
return
0
;
}
});
const
ticks
=
new
Map
<
LoaderEventType
,
Tick
[]
>
();
ticks
.
set
(
LoaderEventType
.
BeginLoadingScript
,
[]);
ticks
.
set
(
LoaderEventType
.
BeginInvokeFactory
,
[]);
ticks
.
set
(
LoaderEventType
.
NodeBeginEvaluatingScript
,
[]);
ticks
.
set
(
LoaderEventType
.
NodeBeginNativeRequire
,
[]);
for
(
let
i
=
1
;
i
<
stats
.
length
-
1
;
i
++
)
{
const
stat
=
stats
[
i
];
const
nextStat
=
stats
[
i
+
1
];
if
(
nextStat
.
type
-
stat
.
type
>
2
)
{
//bad?!
break
;
}
i
+=
1
;
ticks
.
get
(
stat
.
type
).
push
(
new
Tick
(
stat
,
nextStat
));
}
ticks
.
get
(
LoaderEventType
.
BeginLoadingScript
).
sort
(
Tick
.
compareUsingStartTimestamp
);
ticks
.
get
(
LoaderEventType
.
BeginInvokeFactory
).
sort
(
Tick
.
compareUsingStartTimestamp
);
ticks
.
get
(
LoaderEventType
.
NodeBeginEvaluatingScript
).
sort
(
Tick
.
compareUsingStartTimestamp
);
ticks
.
get
(
LoaderEventType
.
NodeBeginNativeRequire
).
sort
(
Tick
.
compareUsingStartTimestamp
);
return
ticks
;
}
CommandsRegistry
.
registerCommand
(
'
dev.stats.loader
'
,
accessor
=>
{
const
clipboard
=
accessor
.
get
(
IClipboardService
);
let
value
=
`Name\tDuration\n`
;
for
(
let
tick
of
getStats
().
get
(
LoaderEventType
.
BeginInvokeFactory
))
{
value
+=
`
${
tick
.
detail
}
\t
${
tick
.
duration
.
toPrecision
(
2
)}
\n`
;
}
console
.
log
(
value
);
clipboard
.
writeText
(
value
);
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录