MCPcopy Create free account
hub / github.com/elastic/devfiler / draw

Method draw

src/ui/tabs/flamegraph.rs:182–239  ·  view source on GitHub ↗
(&mut self, ui: &mut Ui, cfg: &DevfilerConfig, root: &FlameGraphNode)

Source from the content-addressed store, hash-verified

180
181impl FlameGraphWidget {
182 pub fn draw(&mut self, ui: &mut Ui, cfg: &DevfilerConfig, root: &FlameGraphNode) {
183 egui::Frame::canvas(ui.style()).show(ui, |ui| {
184 let size = ui.available_size_before_wrap();
185 let (response, painter) = ui.allocate_painter(size, Sense::click_and_drag());
186
187 self.process_inputs(ui, size, &response, root);
188
189 if self.filter != self.cached_filter {
190 self.matching_frames.clear();
191 self.match_count = 0;
192 self.cached_filter = self.filter.clone();
193 self.rebuild_matches = true;
194 }
195
196 let to_screen = RectTransform::from_to(
197 Rect::from_min_size(self.origin, response.rect.size()),
198 response.rect,
199 );
200
201 let visible_x_range = Rangef::new(self.origin.x, self.origin.x + size.x);
202 let clicked = response.clicked() && !response.double_clicked();
203 let ctrl_held = ui.input(|i| i.modifiers.ctrl);
204 let hover_pos = response.hover_pos();
205
206 // Check if we're in sandwich view mode
207 let is_sandwich_view = self.sandwich_view.is_some();
208 if is_sandwich_view {
209 // Draw sandwich view: callers on top, selected in middle, callees on bottom
210 self.draw_sandwich_view(
211 ui.ctx(),
212 cfg,
213 &painter,
214 &to_screen,
215 visible_x_range,
216 hover_pos,
217 size,
218 );
219 } else {
220 // Normal flamegraph view
221 self.draw_level(
222 ui.ctx(),
223 cfg,
224 &painter,
225 &to_screen,
226 visible_x_range,
227 hover_pos,
228 clicked,
229 ctrl_held,
230 Pos2::ZERO,
231 size.x * self.x_zoom,
232 root,
233 root,
234 );
235 }
236
237 self.rebuild_matches = false;
238 });
239 }

Callers 1

updateMethod · 0.80

Calls 3

process_inputsMethod · 0.80
draw_sandwich_viewMethod · 0.80
draw_levelMethod · 0.80

Tested by

no test coverage detected