Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
3ab2eda4
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,发现更多精彩内容 >>
提交
3ab2eda4
编写于
11月 21, 2016
作者:
R
roblou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add performance test for TextSearch
上级
0f285e91
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
169 addition
and
0 deletion
+169
-0
src/vs/workbench/test/electron-browser/textsearch.perf.test.ts
...s/workbench/test/electron-browser/textsearch.perf.test.ts
+169
-0
未找到文件。
src/vs/workbench/test/electron-browser/textsearch.perf.test.ts
0 → 100644
浏览文件 @
3ab2eda4
/*---------------------------------------------------------------------------------------------
* 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
'
vs/workbench/parts/search/browser/search.contribution
'
;
// load contributions
import
*
as
assert
from
'
assert
'
;
import
{
WorkspaceContextService
,
IWorkspaceContextService
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
createSyncDescriptor
}
from
'
vs/platform/instantiation/common/descriptors
'
;
import
{
IEditorGroupService
}
from
'
vs/workbench/services/group/common/groupService
'
;
import
{
ISearchService
,
IQueryOptions
}
from
'
vs/platform/search/common/search
'
;
import
{
ITelemetryService
,
ITelemetryInfo
,
ITelemetryExperiments
,
defaultExperiments
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
IUntitledEditorService
,
UntitledEditorService
}
from
'
vs/workbench/services/untitled/common/untitledEditorService
'
;
import
{
IWorkbenchEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
*
as
minimist
from
'
minimist
'
;
import
*
as
path
from
'
path
'
;
import
{
SearchService
}
from
'
vs/workbench/services/search/node/searchService
'
;
import
{
ServiceCollection
}
from
'
vs/platform/instantiation/common/serviceCollection
'
;
import
{
TestEnvironmentService
,
TestEditorService
,
TestEditorGroupService
}
from
'
vs/test/utils/servicesTestUtils
'
;
import
{
IEnvironmentService
}
from
'
vs/platform/environment/common/environment
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
URI
from
'
vs/base/common/uri
'
;
import
{
InstantiationService
}
from
'
vs/platform/instantiation/common/instantiationService
'
;
import
{
SimpleConfigurationService
}
from
'
vs/editor/browser/standalone/simpleServices
'
;
import
{
IConfigurationService
}
from
'
vs/platform/configuration/common/configuration
'
;
import
{
ModelServiceImpl
}
from
'
vs/editor/common/services/modelServiceImpl
'
;
import
{
IModelService
}
from
'
vs/editor/common/services/modelService
'
;
import
{
SearchModel
}
from
'
vs/workbench/parts/search/common/searchModel
'
;
import
{
QueryBuilder
}
from
'
vs/workbench/parts/search/common/searchQuery
'
;
import
Event
,
*
as
event
from
'
vs/base/common/event
'
;
declare
var
__dirname
:
string
;
// Checkout sources to run against:
// git clone --separate-git-dir=testGit --no-checkout --single-branch https://chromium.googlesource.com/chromium/src testWorkspace
// cd testWorkspace; git checkout 39a7f93d67f7
// Run from repository root folder with (test.bat on Windows): ./scripts/test.sh --grep TextSearch.performance --timeout 500000 --testWorkspace <path>
suite
(
'
TextSearch performance
'
,
()
=>
{
test
(
'
Measure
'
,
()
=>
{
if
(
process
.
env
[
'
VSCODE_PID
'
])
{
return
;
// TODO@Rob find out why test fails when run from within VS Code
}
const
n
=
3
;
const
argv
=
minimist
(
process
.
argv
);
const
testWorkspaceArg
=
argv
[
'
testWorkspace
'
];
const
testWorkspacePath
=
testWorkspaceArg
?
path
.
resolve
(
testWorkspaceArg
)
:
__dirname
;
const
telemetryService
=
new
TestTelemetryService
();
const
configurationService
=
new
SimpleConfigurationService
();
const
instantiationService
=
new
InstantiationService
(
new
ServiceCollection
(
[
ITelemetryService
,
telemetryService
],
[
IConfigurationService
,
new
SimpleConfigurationService
()],
[
IModelService
,
new
ModelServiceImpl
(
null
,
configurationService
,
null
)],
[
IWorkspaceContextService
,
new
WorkspaceContextService
({
resource
:
URI
.
file
(
testWorkspacePath
)
})],
[
IWorkbenchEditorService
,
new
TestEditorService
()],
[
IEditorGroupService
,
new
TestEditorGroupService
()],
[
IEnvironmentService
,
TestEnvironmentService
],
[
IUntitledEditorService
,
createSyncDescriptor
(
UntitledEditorService
)],
[
ISearchService
,
createSyncDescriptor
(
SearchService
)]
));
let
queryOptions
:
IQueryOptions
=
{
folderResources
:
[
URI
.
file
(
testWorkspacePath
)],
maxResults
:
2048
};
function
runSearch
():
TPromise
<
any
>
{
const
searchModel
:
SearchModel
=
instantiationService
.
createInstance
(
SearchModel
);
const
queryBuilder
:
QueryBuilder
=
instantiationService
.
createInstance
(
QueryBuilder
);
const
query
=
queryBuilder
.
text
({
pattern
:
'
static_library(
'
},
queryOptions
);
// Wait for the 'searchResultsFinished' event, which is fired after the search() promise is resolved
const
onSearchResultsFinished
=
event
.
filterEvent
(
telemetryService
.
eventLogged
,
e
=>
e
.
name
===
'
searchResultsFinished
'
);
event
.
once
(
onSearchResultsFinished
)(
onComplete
);
function
onComplete
():
void
{
try
{
const
allEvents
=
telemetryService
.
events
.
map
(
e
=>
JSON
.
stringify
(
e
)).
join
(
'
\n
'
);
assert
.
equal
(
telemetryService
.
events
.
length
,
3
,
'
Expected 3 telemetry events, got:
\n
'
+
allEvents
);
const
[
firstRenderEvent
,
resultsShownEvent
,
resultsFinishedEvent
]
=
telemetryService
.
events
;
assert
.
equal
(
firstRenderEvent
.
name
,
'
searchResultsFirstRender
'
);
assert
.
equal
(
resultsShownEvent
.
name
,
'
searchResultsShown
'
);
assert
.
equal
(
resultsFinishedEvent
.
name
,
'
searchResultsFinished
'
);
telemetryService
.
events
=
[];
resolve
(
resultsFinishedEvent
);
}
catch
(
e
)
{
// Fail the runSearch() promise
error
(
e
);
}
}
let
resolve
;
let
error
;
return
new
TPromise
((
_resolve
,
_error
)
=>
{
resolve
=
_resolve
;
error
=
_error
;
// Don't wait on this promise, we're waiting on the event fired above
searchModel
.
search
(
query
).
then
(
null
,
_error
);
});
}
const
finishedEvents
=
[];
return
runSearch
()
// Warm-up first
.
then
(()
=>
{
if
(
testWorkspaceArg
)
{
// Don't measure by default
let
i
=
n
;
return
(
function
iterate
()
{
if
(
!
i
--
)
{
return
;
}
return
runSearch
()
.
then
((
resultsFinishedEvent
:
any
)
=>
{
console
.
log
(
`Iteration
${
n
-
i
}
:
${
resultsFinishedEvent
.
data
.
duration
/
1000
}
s`
);
finishedEvents
.
push
(
resultsFinishedEvent
);
return
iterate
();
});
})().
then
(()
=>
{
const
totalTime
=
finishedEvents
.
reduce
((
sum
,
e
)
=>
sum
+
e
.
data
.
duration
,
0
);
console
.
log
(
`Avg duration:
${
totalTime
/
n
/
1000
}
s`
);
});
}
});
});
});
class
TestTelemetryService
implements
ITelemetryService
{
public
_serviceBrand
:
any
;
public
isOptedIn
=
true
;
public
events
:
any
[]
=
[];
private
emitter
=
new
event
.
Emitter
<
any
>
();
public
get
eventLogged
():
Event
<
any
>
{
return
this
.
emitter
.
event
;
}
public
publicLog
(
eventName
:
string
,
data
?:
any
):
TPromise
<
void
>
{
const
event
=
{
name
:
eventName
,
data
:
data
};
this
.
events
.
push
(
event
);
this
.
emitter
.
fire
(
event
);
return
TPromise
.
as
<
void
>
(
null
);
}
public
getTelemetryInfo
():
TPromise
<
ITelemetryInfo
>
{
return
TPromise
.
as
({
instanceId
:
'
someValue.instanceId
'
,
sessionId
:
'
someValue.sessionId
'
,
machineId
:
'
someValue.machineId
'
});
}
public
getExperiments
():
ITelemetryExperiments
{
return
defaultExperiments
;
}
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录