2024-02-26 07:00:51 +01:00
|
|
|
pub use iced_core as core;
|
2024-02-27 15:19:26 +01:00
|
|
|
|
2024-05-09 12:32:25 +02:00
|
|
|
use crate::core::theme;
|
2024-02-28 15:25:45 +01:00
|
|
|
use crate::core::window;
|
2024-02-26 07:00:51 +01:00
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub use internal::Span;
|
2024-02-26 07:00:51 +01:00
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn init(name: &str) {
|
|
|
|
|
internal::init(name);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn open_comet() {}
|
2024-02-26 07:00:51 +01:00
|
|
|
|
|
|
|
|
pub fn log_message(_message: &impl std::fmt::Debug) {}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn theme_changed(f: impl FnOnce() -> Option<theme::Palette>) {
|
|
|
|
|
internal::theme_changed(f);
|
2024-02-27 15:19:26 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn boot() -> Span {
|
|
|
|
|
internal::boot()
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn update() -> Span {
|
|
|
|
|
internal::update()
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn view(window: window::Id) -> Span {
|
|
|
|
|
internal::view(window)
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn layout(window: window::Id) -> Span {
|
|
|
|
|
internal::layout(window)
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn interact(window: window::Id) -> Span {
|
|
|
|
|
internal::interact(window)
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn draw(window: window::Id) -> Span {
|
|
|
|
|
internal::draw(window)
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn present(window: window::Id) -> Span {
|
|
|
|
|
internal::present(window)
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn time(window: window::Id, name: impl AsRef<str>) -> Span {
|
2024-02-28 15:25:45 +01:00
|
|
|
internal::time(window, name)
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-03-01 22:04:46 +01:00
|
|
|
pub fn skip_next_timing() {
|
|
|
|
|
internal::skip_next_timing();
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-26 07:00:51 +01:00
|
|
|
#[cfg(feature = "enable")]
|
|
|
|
|
mod internal {
|
2024-05-09 12:32:25 +02:00
|
|
|
use crate::core::theme;
|
2024-05-10 20:08:09 +02:00
|
|
|
use crate::core::time::Instant;
|
2024-02-28 15:25:45 +01:00
|
|
|
use crate::core::window;
|
2024-02-26 07:00:51 +01:00
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
use iced_beacon as beacon;
|
|
|
|
|
|
|
|
|
|
use beacon::client::{self, Client};
|
|
|
|
|
use beacon::span;
|
2024-02-26 07:00:51 +01:00
|
|
|
|
|
|
|
|
use once_cell::sync::Lazy;
|
2024-05-10 20:08:09 +02:00
|
|
|
use std::sync::atomic::{self, AtomicBool};
|
|
|
|
|
use std::sync::RwLock;
|
2024-02-26 07:00:51 +01:00
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn init(name: &str) {
|
|
|
|
|
name.clone_into(&mut NAME.write().expect("Write application name"));
|
|
|
|
|
}
|
2024-02-27 15:38:47 +01:00
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn theme_changed(f: impl FnOnce() -> Option<theme::Palette>) {
|
|
|
|
|
let Some(palette) = f() else {
|
|
|
|
|
return;
|
|
|
|
|
};
|
2024-02-27 15:38:47 +01:00
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
if LAST_PALETTE.read().expect("Read last palette").as_ref()
|
|
|
|
|
!= Some(&palette)
|
|
|
|
|
{
|
|
|
|
|
BEACON.log(client::Event::ThemeChanged(palette));
|
|
|
|
|
|
|
|
|
|
*LAST_PALETTE.write().expect("Write last palette") = Some(palette);
|
2024-02-27 15:38:47 +01:00
|
|
|
}
|
2024-02-27 15:19:26 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn boot() -> Span {
|
|
|
|
|
span(span::Stage::Boot)
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn update() -> Span {
|
|
|
|
|
span(span::Stage::Update)
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn view(window: window::Id) -> Span {
|
|
|
|
|
span(span::Stage::View(window))
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn layout(window: window::Id) -> Span {
|
|
|
|
|
span(span::Stage::Layout(window))
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn interact(window: window::Id) -> Span {
|
|
|
|
|
span(span::Stage::Interact(window))
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn draw(window: window::Id) -> Span {
|
|
|
|
|
span(span::Stage::Draw(window))
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn present(window: window::Id) -> Span {
|
|
|
|
|
span(span::Stage::Present(window))
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn time(window: window::Id, name: impl AsRef<str>) -> Span {
|
|
|
|
|
span(span::Stage::Custom(window, name.as_ref().to_owned()))
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-03-01 22:04:46 +01:00
|
|
|
pub fn skip_next_timing() {
|
2024-05-10 20:08:09 +02:00
|
|
|
SKIP_NEXT_SPAN.store(true, atomic::Ordering::Relaxed);
|
2024-03-01 22:04:46 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
fn span(span: span::Stage) -> Span {
|
|
|
|
|
BEACON.log(client::Event::SpanStarted(span.clone()));
|
|
|
|
|
|
|
|
|
|
Span {
|
|
|
|
|
span,
|
2024-02-26 07:00:51 +01:00
|
|
|
start: Instant::now(),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug)]
|
2024-05-10 20:08:09 +02:00
|
|
|
pub struct Span {
|
|
|
|
|
span: span::Stage,
|
2024-02-26 07:00:51 +01:00
|
|
|
start: Instant,
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
impl Span {
|
2024-02-26 07:00:51 +01:00
|
|
|
pub fn finish(self) {
|
2024-05-10 20:08:09 +02:00
|
|
|
if SKIP_NEXT_SPAN.fetch_and(false, atomic::Ordering::Relaxed) {
|
2024-03-01 22:04:46 +01:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
BEACON.log(client::Event::SpanFinished(
|
|
|
|
|
self.span,
|
|
|
|
|
self.start.elapsed(),
|
|
|
|
|
));
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
static BEACON: Lazy<Client> = Lazy::new(|| {
|
|
|
|
|
client::connect(NAME.read().expect("Read application name").to_owned())
|
|
|
|
|
});
|
2024-02-26 07:00:51 +01:00
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
static NAME: RwLock<String> = RwLock::new(String::new());
|
|
|
|
|
static LAST_PALETTE: RwLock<Option<theme::Palette>> = RwLock::new(None);
|
|
|
|
|
static SKIP_NEXT_SPAN: AtomicBool = AtomicBool::new(false);
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(not(feature = "enable"))]
|
|
|
|
|
mod internal {
|
2024-05-10 20:08:09 +02:00
|
|
|
use crate::core::theme;
|
2024-02-28 15:25:45 +01:00
|
|
|
use crate::core::window;
|
2024-02-27 15:19:26 +01:00
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn init(_name: &str) {}
|
|
|
|
|
|
|
|
|
|
pub fn theme_changed(_f: impl FnOnce() -> Option<theme::Palette>) {}
|
2024-02-27 15:19:26 +01:00
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn boot() -> Span {
|
|
|
|
|
Span
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn update() -> Span {
|
|
|
|
|
Span
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn view(_window: window::Id) -> Span {
|
|
|
|
|
Span
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn layout(_window: window::Id) -> Span {
|
|
|
|
|
Span
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn interact(_window: window::Id) -> Span {
|
|
|
|
|
Span
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn draw(_window: window::Id) -> Span {
|
|
|
|
|
Span
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn present(_window: window::Id) -> Span {
|
|
|
|
|
Span
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
pub fn time(_window: window::Id, _name: impl AsRef<str>) -> Span {
|
|
|
|
|
Span
|
2024-02-26 07:00:51 +01:00
|
|
|
}
|
|
|
|
|
|
2024-03-01 22:04:46 +01:00
|
|
|
pub fn skip_next_timing() {}
|
|
|
|
|
|
2024-02-26 07:00:51 +01:00
|
|
|
#[derive(Debug)]
|
2024-05-10 20:08:09 +02:00
|
|
|
pub struct Span;
|
2024-02-26 07:00:51 +01:00
|
|
|
|
2024-05-10 20:08:09 +02:00
|
|
|
impl Span {
|
2024-02-26 07:00:51 +01:00
|
|
|
pub fn finish(self) {}
|
|
|
|
|
}
|
|
|
|
|
}
|