Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
ae6a270a
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,发现更多精彩内容 >>
提交
ae6a270a
编写于
10月 16, 2016
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
use queued sender for ext host communication
上级
844484aa
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
14 addition
and
7 deletion
+14
-7
src/vs/workbench/node/extensionHostProcess.ts
src/vs/workbench/node/extensionHostProcess.ts
+7
-3
src/vs/workbench/services/extensions/electron-browser/extensionHost.ts
...nch/services/extensions/electron-browser/extensionHost.ts
+7
-4
未找到文件。
src/vs/workbench/node/extensionHostProcess.ts
浏览文件 @
ae6a270a
...
...
@@ -10,6 +10,7 @@ import { TPromise } from 'vs/base/common/winjs.base';
import
{
ExtensionHostMain
,
IInitData
,
exit
}
from
'
vs/workbench/node/extensionHostMain
'
;
import
{
create
as
createIPC
,
IMainProcessExtHostIPC
}
from
'
vs/platform/extensions/common/ipcRemoteCom
'
;
import
marshalling
=
require
(
'
vs/base/common/marshalling
'
);
import
{
createQueuedSender
}
from
'
vs/base/node/processes
'
;
interface
IRendererConnection
{
remoteCom
:
IMainProcessExtHostIPC
;
...
...
@@ -22,6 +23,9 @@ let onTerminate = function () {
exit
();
};
// Utility to not flood the process.send() with messages if it is busy catching up
const
queuedSender
=
createQueuedSender
(
process
);
function
connectToRenderer
():
TPromise
<
IRendererConnection
>
{
return
new
TPromise
<
IRendererConnection
>
((
c
,
e
)
=>
{
const
stats
:
number
[]
=
[];
...
...
@@ -32,7 +36,7 @@ function connectToRenderer(): TPromise<IRendererConnection> {
let
msg
=
marshalling
.
parse
(
raw
);
const
remoteCom
=
createIPC
(
data
=>
{
process
.
send
(
data
);
queuedSender
.
send
(
data
);
stats
.
push
(
data
.
length
);
});
...
...
@@ -92,13 +96,13 @@ function connectToRenderer(): TPromise<IRendererConnection> {
},
1000
);
// Tell the outside that we are initialized
process
.
send
(
'
initialized
'
);
queuedSender
.
send
(
'
initialized
'
);
c
({
remoteCom
,
initData
:
msg
});
});
// Tell the outside that we are ready to receive messages
process
.
send
(
'
ready
'
);
queuedSender
.
send
(
'
ready
'
);
});
}
...
...
src/vs/workbench/services/extensions/electron-browser/extensionHost.ts
浏览文件 @
ae6a270a
...
...
@@ -29,6 +29,7 @@ import { ExtensionScanner, MessagesCollector } from 'vs/workbench/node/extension
import
{
IMessagePassingProtocol
}
from
'
vs/base/parts/ipc/common/ipc
'
;
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
IStorageService
,
StorageScope
}
from
'
vs/platform/storage/common/storage
'
;
import
{
createQueuedSender
,
IQueuedSender
}
from
'
vs/base/node/processes
'
;
export
const
EXTENSION_LOG_BROADCAST_CHANNEL
=
'
vscode:extensionLog
'
;
export
const
EXTENSION_ATTACH_BROADCAST_CHANNEL
=
'
vscode:extensionAttach
'
;
...
...
@@ -47,6 +48,7 @@ export interface ILogEntry {
export
class
ExtensionHostProcessWorker
{
private
initializeExtensionHostProcess
:
TPromise
<
ChildProcess
>
;
private
extensionHostProcessHandle
:
ChildProcess
;
private
extensionHostProcessQueuedSender
:
IQueuedSender
;
private
extensionHostProcessReady
:
boolean
;
private
initializeTimer
:
number
;
...
...
@@ -126,6 +128,7 @@ export class ExtensionHostProcessWorker {
// Run Extension Host as fork of current process
this
.
extensionHostProcessHandle
=
fork
(
URI
.
parse
(
require
.
toUrl
(
'
bootstrap
'
)).
fsPath
,
[
'
--type=extensionHost
'
],
opts
);
this
.
extensionHostProcessQueuedSender
=
createQueuedSender
(
this
.
extensionHostProcessHandle
);
// Notify debugger that we are ready to attach to the process if we run a development extension
if
(
this
.
isExtensionDevelopmentHost
&&
port
)
{
...
...
@@ -221,7 +224,7 @@ export class ExtensionHostProcessWorker {
workspaceStoragePath
:
this
.
storageService
.
getStoragePath
(
StorageScope
.
WORKSPACE
),
extensions
:
extensionDescriptors
});
this
.
extensionHostProcess
Handle
.
send
(
initPayload
);
this
.
extensionHostProcess
QueuedSender
.
send
(
initPayload
);
});
}
...
...
@@ -351,9 +354,9 @@ export class ExtensionHostProcessWorker {
public
send
(
msg
:
any
):
void
{
if
(
this
.
extensionHostProcessReady
)
{
this
.
extensionHostProcess
Handle
.
send
(
msg
);
this
.
extensionHostProcess
QueuedSender
.
send
(
msg
);
}
else
if
(
this
.
initializeExtensionHostProcess
)
{
this
.
initializeExtensionHostProcess
.
done
(
p
=>
p
.
send
(
msg
));
this
.
initializeExtensionHostProcess
.
done
(
()
=>
this
.
extensionHostProcessQueuedSender
.
send
(
msg
));
}
else
{
this
.
unsentMessages
.
push
(
msg
);
}
...
...
@@ -363,7 +366,7 @@ export class ExtensionHostProcessWorker {
this
.
terminating
=
true
;
if
(
this
.
extensionHostProcessHandle
)
{
this
.
extensionHostProcess
Handle
.
send
({
this
.
extensionHostProcess
QueuedSender
.
send
({
type
:
'
__$terminate
'
});
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录