[go: up one dir, main page]

tracy-client 0.18.3

High level bindings to the client libraries for the Tracy profiler
Documentation
#[cfg(loom)]
mod loom {

    use loom::thread;
    use tracy_client::Client;

    fn model<F>(f: F)
    where
        F: Fn() + Sync + Send + 'static,
    {
        #[cfg(not(loom))]
        {
            f()
        }
        #[cfg(loom)]
        {
            let mut builder = loom::model::Builder::new();
            builder.preemption_bound = Some(3);
            builder.check(f)
        }
    }

    fn main() {
        model(|| {
            let client = Client::start();
            assert!(Client::is_running());
            drop(client);
            unsafe {
                ___tracy_shutdown_profiler();
            }
        });

        model(|| {
            let t1 = thread::spawn(|| {
                let client = Client::start();
                assert!(Client::is_running());
                drop(client);
            });
            let client = Client::start();
            assert!(Client::is_running());
            drop(client);
            t1.join().unwrap();
            unsafe {
                ___tracy_shutdown_profiler();
            }
        });

        model(|| {
            let t1 = thread::spawn(move || {
                let client = Client::start();
                assert!(Client::is_running());
                let client2 = client.clone();
                assert!(Client::is_running());
                drop(client);
                assert!(Client::is_running());
                drop(client2);
            });
            let client = Client::start();
            assert!(Client::is_running());
            let client2 = client.clone();
            assert!(Client::is_running());
            drop(client2);
            assert!(Client::is_running());
            drop(client);
            t1.join().unwrap();
            unsafe {
                ___tracy_shutdown_profiler();
            }
        });
    }
}

fn main() {
    #[cfg(loom)]
    loom::main();
}