#![deny(unsafe_code)]
use std::cell::Cell;
use std::rc::Rc;
use compositing_traits::rendering_context::RenderingContext;
use compositing_traits::{CompositorMsg, CompositorProxy};
use constellation_traits::EmbedderToConstellationMessage;
use crossbeam_channel::{Receiver, Sender};
use embedder_traits::{EventLoopWaker, ShutdownState};
use profile_traits::{mem, time};
use webrender::RenderApi;
use webrender_api::DocumentId;
pub use crate::compositor::{IOCompositor, WebRenderDebugOption};
#[macro_use]
mod tracing;
mod compositor;
mod refresh_driver;
mod touch;
mod webview_manager;
mod webview_renderer;
pub struct InitialCompositorState {
pub sender: CompositorProxy,
pub receiver: Receiver<CompositorMsg>,
pub constellation_chan: Sender<EmbedderToConstellationMessage>,
pub time_profiler_chan: time::ProfilerChan,
pub mem_profiler_chan: mem::ProfilerChan,
pub shutdown_state: Rc<Cell<ShutdownState>>,
pub webrender: webrender::Renderer,
pub webrender_document: DocumentId,
pub webrender_api: RenderApi,
pub rendering_context: Rc<dyn RenderingContext>,
pub webrender_gl: Rc<dyn gleam::gl::Gl>,
#[cfg(feature = "webxr")]
pub webxr_main_thread: webxr::MainThreadRegistry,
pub event_loop_waker: Box<dyn EventLoopWaker>,
}