MCPcopy Create free account
hub / github.com/NativeScript/SimDeck / start_refresh_pump

Method start_refresh_pump

packages/server/src/simulators/session.rs:432–469  ·  view source on GitHub ↗
(self: &Arc<Self>)

Source from the content-addressed store, hash-verified

430
431impl SimulatorSessionInner {
432 fn start_refresh_pump(self: &Arc<Self>) {
433 if self
434 .refresh_pump_running
435 .compare_exchange(false, true, Ordering::AcqRel, Ordering::Acquire)
436 .is_err()
437 {
438 return;
439 }
440
441 let inner = self.clone();
442 tokio::spawn(async move {
443 let mut next_tick = Instant::now();
444 loop {
445 if inner.active_frame_subscribers.load(Ordering::Relaxed) == 0 {
446 inner.refresh_pump_running.store(false, Ordering::Release);
447 if inner.active_frame_subscribers.load(Ordering::Relaxed) == 0 {
448 break;
449 }
450 if inner
451 .refresh_pump_running
452 .compare_exchange(false, true, Ordering::AcqRel, Ordering::Acquire)
453 .is_err()
454 {
455 break;
456 }
457 }
458
459 inner.request_refresh();
460 let refresh_interval = shared_refresh_interval();
461 next_tick += refresh_interval;
462 let now = Instant::now();
463 if next_tick <= now {
464 next_tick = now + refresh_interval;
465 }
466 sleep_until(next_tick).await;
467 }
468 });
469 }
470
471 fn request_refresh(&self) {
472 let now = now_us();

Callers 1

subscribeMethod · 0.80

Calls 4

shared_refresh_intervalFunction · 0.85
loadMethod · 0.80
cloneMethod · 0.65
request_refreshMethod · 0.45

Tested by

no test coverage detected