gloss_renderer/
lib.rs

1//! Documentation for your library.
2// #![deny(missing_docs)]
3
4#![doc = include_str!("../README.md")]
5
6#[macro_use]
7extern crate static_assertions;
8
9use gloss_utils::string::float2string;
10use log::log;
11use re_memory::{AccountingAllocator, MemoryUse};
12
13#[global_allocator]
14static GLOBAL: AccountingAllocator<std::alloc::System> = AccountingAllocator::new(std::alloc::System);
15
16pub mod actor;
17pub mod camera;
18pub mod components;
19pub mod config;
20pub mod forward_renderer;
21pub mod geom;
22#[cfg(feature = "with-gui")]
23pub mod gui;
24pub mod light;
25pub mod logger;
26pub mod plugin_manager;
27pub mod scene;
28pub mod viewer;
29pub mod viewer_headless;
30
31pub use logger::{gloss_setup_logger, gloss_setup_logger_from_config, gloss_setup_logger_from_config_file};
32
33pub fn print_memory_usage_info(mem_use: MemoryUse, verbosity: log::Level) {
34    if let Some(mem_resident) = mem_use.resident {
35        log!(verbosity, "MB resident total: {}", (mem_resident / (1024 * 1024)));
36    }
37    if let Some(mem_counted) = mem_use.counted {
38        log!(verbosity, "MB counted total: {}", (mem_counted / (1024 * 1024)));
39    }
40}
41
42pub fn aa_print_memory_usage_info(show_backtrace: bool, verbosity: log::Level) {
43    if let Some(tracks) = re_memory::accounting_allocator::tracking_stats() {
44        #[allow(clippy::cast_precision_loss)]
45        for cb in tracks.top_callstacks.iter() {
46            let mb_cb = cb.extant.size as f32 / (1024.0 * 1024.0);
47            if show_backtrace {
48                log!(verbosity, "MB: {} Callstack: {}", float2string(mb_cb, 1), cb.readable_backtrace);
49            } else {
50                log!(verbosity, "MB: {} Func: {}", float2string(mb_cb, 1), cb.readable_backtrace,);
51            }
52        }
53    }
54}
55
56fn set_panic_hook() {
57    cfg_if::cfg_if! {
58        if #[cfg(target_arch = "wasm32")] {
59            std::panic::set_hook(Box::new(move |info| {
60                web_sys::console::error_1(&format!("PANICKED: Will print memory usage info:").into());
61                // MemoryUse::capture().print_memory_usage_info(log::Level::Error);
62                // accounting_allocator::print_memory_usage_info(false, log::Level::Error);
63                print_memory_usage_info(MemoryUse::capture(), log::Level::Error);
64                aa_print_memory_usage_info(false, log::Level::Error);
65                console_error_panic_hook::hook(info);
66            }));
67        }else{
68            let default_panic = std::panic::take_hook();
69            std::panic::set_hook(Box::new(move |info| {
70                // println!("PANICKED: Will print memory usage info:");
71                // MemoryUse::capture().print_memory_usage_info(log::Level::Error);
72                // let enabled_backtrace = std::env::var("RUST_BACKTRACE").map_or(false, |_| true);
73                // accounting_allocator::print_memory_usage_info(enabled_backtrace, log::Level::Error);
74                default_panic(info);
75            }));
76        }
77    }
78}