Parallelize deserialization of pane items on startup
Co-Authored-By: Mikayla Maki <mikayla@zed.dev>
This commit is contained in:
parent
526ea40005
commit
e4604ebedf
1 changed files with 18 additions and 18 deletions
|
@ -233,24 +233,28 @@ impl SerializedPane {
|
||||||
workspace: WeakView<Workspace>,
|
workspace: WeakView<Workspace>,
|
||||||
cx: &mut AsyncWindowContext,
|
cx: &mut AsyncWindowContext,
|
||||||
) -> Result<Vec<Option<Box<dyn ItemHandle>>>> {
|
) -> Result<Vec<Option<Box<dyn ItemHandle>>>> {
|
||||||
let mut items = Vec::new();
|
let mut item_tasks = Vec::new();
|
||||||
let mut active_item_index = None;
|
let mut active_item_index = None;
|
||||||
for (index, item) in self.children.iter().enumerate() {
|
for (index, item) in self.children.iter().enumerate() {
|
||||||
let project = project.clone();
|
let project = project.clone();
|
||||||
let item_handle = pane
|
item_tasks.push(pane.update(cx, |_, cx| {
|
||||||
.update(cx, |_, cx| {
|
if let Some(deserializer) = cx.global::<ItemDeserializers>().get(&item.kind) {
|
||||||
if let Some(deserializer) = cx.global::<ItemDeserializers>().get(&item.kind) {
|
deserializer(project, workspace.clone(), workspace_id, item.item_id, cx)
|
||||||
deserializer(project, workspace.clone(), workspace_id, item.item_id, cx)
|
} else {
|
||||||
} else {
|
Task::ready(Err(anyhow::anyhow!(
|
||||||
Task::ready(Err(anyhow::anyhow!(
|
"Deserializer does not exist for item kind: {}",
|
||||||
"Deserializer does not exist for item kind: {}",
|
item.kind
|
||||||
item.kind
|
)))
|
||||||
)))
|
}
|
||||||
}
|
})?);
|
||||||
})?
|
if item.active {
|
||||||
.await
|
active_item_index = Some(index);
|
||||||
.log_err();
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut items = Vec::new();
|
||||||
|
for item_handle in futures::future::join_all(item_tasks).await {
|
||||||
|
let item_handle = item_handle.log_err();
|
||||||
items.push(item_handle.clone());
|
items.push(item_handle.clone());
|
||||||
|
|
||||||
if let Some(item_handle) = item_handle {
|
if let Some(item_handle) = item_handle {
|
||||||
|
@ -258,10 +262,6 @@ impl SerializedPane {
|
||||||
pane.add_item(item_handle.clone(), true, true, None, cx);
|
pane.add_item(item_handle.clone(), true, true, None, cx);
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
|
||||||
if item.active {
|
|
||||||
active_item_index = Some(index);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(active_item_index) = active_item_index {
|
if let Some(active_item_index) = active_item_index {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue