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