Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
c3e6110d
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,发现更多精彩内容 >>
提交
c3e6110d
编写于
3月 18, 2020
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
quick access - reduce flicker for slow&fast provioders (fix #92853)
上级
03ee6b27
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
58 addition
and
24 deletion
+58
-24
src/vs/platform/quickinput/browser/pickerQuickAccess.ts
src/vs/platform/quickinput/browser/pickerQuickAccess.ts
+58
-24
未找到文件。
src/vs/platform/quickinput/browser/pickerQuickAccess.ts
浏览文件 @
c3e6110d
...
...
@@ -8,6 +8,7 @@ import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cance
import
{
IQuickPickSeparator
,
IKeyMods
,
IQuickPickAcceptEvent
}
from
'
vs/base/parts/quickinput/common/quickInput
'
;
import
{
IQuickAccessProvider
}
from
'
vs/platform/quickinput/common/quickAccess
'
;
import
{
IDisposable
,
DisposableStore
,
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
timeout
}
from
'
vs/base/common/async
'
;
export
enum
TriggerAction
{
...
...
@@ -67,6 +68,8 @@ function isFastAndSlowPicksType<T>(obj: unknown): obj is FastAndSlowPicksType<T>
export
abstract
class
PickerQuickAccessProvider
<
T
extends
IPickerQuickAccessItem
>
extends
Disposable
implements
IQuickAccessProvider
{
private
static
FAST_PICKS_RACE_DELAY
=
200
;
// timeout before we accept fast results before slow results are present
constructor
(
private
prefix
:
string
,
protected
options
?:
IPickerQuickAccessProviderOptions
)
{
super
();
}
...
...
@@ -95,32 +98,63 @@ export abstract class PickerQuickAccessProvider<T extends IPickerQuickAccessItem
const
picksToken
=
picksCts
.
token
;
const
res
=
this
.
getPicks
(
picker
.
value
.
substr
(
this
.
prefix
.
length
).
trim
(),
disposables
.
add
(
new
DisposableStore
()),
picksToken
);
if
(
isFastAndSlowPicksType
(
res
))
{
if
(
res
.
picks
.
length
>
0
)
{
// Optimization: if there are no fast results
// we do nto simply unset all the existing items
// to reduce the flickering.
picker
.
items
=
res
.
picks
;
}
picker
.
busy
=
true
;
try
{
const
additionalPicks
=
await
res
.
additionalPicks
;
if
(
picksToken
.
isCancellationRequested
)
{
return
;
}
let
fastPicksHandlerDone
=
false
;
let
slowPicksHandlerDone
=
false
;
await
Promise
.
all
([
// Fast Picks: to reduce amount of flicker, we race against
// the slow picks over 500ms and then set the fast picks.
// If the slow picks are faster, we reduce the flicker by
// only setting the items once.
(
async
()
=>
{
try
{
await
timeout
(
PickerQuickAccessProvider
.
FAST_PICKS_RACE_DELAY
);
if
(
picksToken
.
isCancellationRequested
)
{
return
;
}
if
(
!
slowPicksHandlerDone
)
{
picker
.
items
=
res
.
picks
;
}
}
finally
{
fastPicksHandlerDone
=
true
;
}
})(),
// Slow Picks: we await the slow picks and then set them at
// once together with the fast picks, but only if we actually
// have additional results.
(
async
()
=>
{
picker
.
busy
=
true
;
try
{
const
additionalPicks
=
await
res
.
additionalPicks
;
if
(
picksToken
.
isCancellationRequested
)
{
return
;
}
if
(
additionalPicks
.
length
>
0
||
!
fastPicksHandlerDone
)
{
picker
.
items
=
[...
res
.
picks
,
...
additionalPicks
];
}
}
finally
{
if
(
!
picksToken
.
isCancellationRequested
)
{
picker
.
busy
=
false
;
}
slowPicksHandlerDone
=
true
;
}
})()
]);
}
if
(
res
.
picks
.
length
===
0
||
additionalPicks
.
length
>
0
)
{
// Optimization: we only update the picker items if we either
// did not update them earlier, or we actually got new results
picker
.
items
=
[...
res
.
picks
,
...
additionalPicks
];
}
}
finally
{
if
(
!
picksToken
.
isCancellationRequested
)
{
picker
.
busy
=
false
;
}
}
}
else
if
(
Array
.
isArray
(
res
))
{
// Fast Picks
else
if
(
Array
.
isArray
(
res
))
{
picker
.
items
=
res
;
}
else
{
}
// Slow Picks
else
{
picker
.
busy
=
true
;
try
{
const
items
=
await
res
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录