(
bridge: &NativeBridge,
udid: String,
metrics: Arc<Metrics>,
)
| 94 | } |
| 95 | |
| 96 | pub fn new( |
| 97 | bridge: &NativeBridge, |
| 98 | udid: String, |
| 99 | metrics: Arc<Metrics>, |
| 100 | ) -> Result<Self, AppError> { |
| 101 | let native = bridge.create_session(&udid)?; |
| 102 | let simulator = bridge.simulator(&udid).ok().flatten(); |
| 103 | let is_tvos = simulator.as_ref().map(simulator_is_tvos).unwrap_or(false); |
| 104 | let is_watchos = simulator |
| 105 | .as_ref() |
| 106 | .map(simulator_is_watchos) |
| 107 | .unwrap_or(false); |
| 108 | let has_fixed_orientation = simulator |
| 109 | .as_ref() |
| 110 | .map(simulator_has_fixed_orientation) |
| 111 | .unwrap_or(false); |
| 112 | let (sender, _) = broadcast::channel(FRAME_BROADCAST_CAPACITY); |
| 113 | let inner = Arc::new(SimulatorSessionInner { |
| 114 | udid, |
| 115 | native, |
| 116 | is_tvos, |
| 117 | is_watchos, |
| 118 | has_fixed_orientation, |
| 119 | metrics, |
| 120 | sender, |
| 121 | latest_keyframe: RwLock::new(None), |
| 122 | state: Mutex::new(SessionState::Detached), |
| 123 | start_condvar: Condvar::new(), |
| 124 | display_ready: AtomicBool::new(false), |
| 125 | display_width: AtomicU64::new(0), |
| 126 | display_height: AtomicU64::new(0), |
| 127 | frame_sequence: AtomicU64::new(0), |
| 128 | last_frame_ms: AtomicU64::new(0), |
| 129 | last_refresh_us: AtomicU64::new(0), |
| 130 | last_keyframe_ms: AtomicU64::new(0), |
| 131 | active_frame_subscribers: AtomicU64::new(0), |
| 132 | refresh_pump_running: AtomicBool::new(false), |
| 133 | }); |
| 134 | |
| 135 | let user_data = Weak::into_raw(Arc::downgrade(&inner)) as *mut c_void; |
| 136 | unsafe { |
| 137 | inner |
| 138 | .native |
| 139 | .set_frame_callback(Some(native_frame_callback), user_data); |
| 140 | } |
| 141 | |
| 142 | Ok(Self { |
| 143 | inner, |
| 144 | callback_user_data: user_data as usize, |
| 145 | }) |
| 146 | } |
| 147 | |
| 148 | pub fn ensure_started(&self) -> Result<(), AppError> { |
| 149 | loop { |
nothing calls this directly
no test coverage detected