Skip to content

Commit 1d5d87b

Browse files
authored
Send pre-renderings with plot updates (#894)
1 parent 97456d4 commit 1d5d87b

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

crates/amalthea/src/comm/plot_comm.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@ pub struct RenderParams {
113113
pub format: PlotRenderFormat,
114114
}
115115

116+
/// Parameters for the Update method.
117+
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
118+
pub struct UpdateParams {
119+
/// Optional pre-rendering data for immediate display
120+
pub pre_render: Option<PlotResult>,
121+
}
122+
116123
/**
117124
* Backend RPC request types for the plot comm
118125
*/
@@ -172,7 +179,7 @@ pub enum PlotFrontendReply {
172179
#[serde(tag = "method", content = "params")]
173180
pub enum PlotFrontendEvent {
174181
#[serde(rename = "update")]
175-
Update,
182+
Update(UpdateParams),
176183

177184
#[serde(rename = "show")]
178185
Show,

crates/ark/src/plots/graphics_device.rs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use amalthea::comm::plot_comm::PlotRenderFormat;
2323
use amalthea::comm::plot_comm::PlotRenderSettings;
2424
use amalthea::comm::plot_comm::PlotResult;
2525
use amalthea::comm::plot_comm::PlotSize;
26+
use amalthea::comm::plot_comm::UpdateParams;
2627
use amalthea::socket::comm::CommInitiator;
2728
use amalthea::socket::comm::CommSocket;
2829
use amalthea::socket::iopub::IOPubMessage;
@@ -585,9 +586,31 @@ impl DeviceContext {
585586
return;
586587
});
587588

588-
let value = serde_json::to_value(PlotFrontendEvent::Update).unwrap();
589+
// Create a pre-rendering of the updated plot
590+
let settings = self.prerender_settings.get();
591+
let update_params = match self.render_plot(id, &settings) {
592+
Ok(pre_render) => {
593+
let mime_type = Self::get_mime_type(&settings.format);
594+
595+
let pre_render = PlotResult {
596+
data: pre_render.to_string(),
597+
mime_type: mime_type.to_string(),
598+
settings: Some(settings),
599+
};
600+
601+
UpdateParams {
602+
pre_render: Some(pre_render),
603+
}
604+
},
605+
Err(err) => {
606+
log::warn!("Can't pre-render plot update: {err:?}");
607+
UpdateParams { pre_render: None }
608+
},
609+
};
610+
611+
let value = serde_json::to_value(PlotFrontendEvent::Update(update_params)).unwrap();
589612

590-
// Tell Positron we have an updated plot that it should request a rerender for
613+
// Tell Positron we have an updated plot with optional pre-rendering
591614
socket
592615
.outgoing_tx
593616
.send(CommMsg::Data(value))

0 commit comments

Comments
 (0)