add logging and loop

This commit is contained in:
Patrick Michl 2021-08-30 15:54:45 +02:00
parent a35996c519
commit 28e53ff17a
4 changed files with 225 additions and 15 deletions

174
Cargo.lock generated
View File

@ -36,6 +36,23 @@ dependencies = [
"num-traits",
]
[[package]]
name = "arc-swap"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5ab7d9e73059c86c36473f459b52adbd99c3554a4fec492caef460806006f00"
[[package]]
name = "atty"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
"hermit-abi",
"libc",
"winapi",
]
[[package]]
name = "autocfg"
version = "1.0.1"
@ -102,6 +119,19 @@ dependencies = [
"num-traits",
]
[[package]]
name = "chrono"
version = "0.4.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
dependencies = [
"libc",
"num-integer",
"num-traits",
"time",
"winapi",
]
[[package]]
name = "cocoa"
version = "0.24.0"
@ -329,6 +359,27 @@ dependencies = [
"syn",
]
[[package]]
name = "dirs-next"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
dependencies = [
"cfg-if 1.0.0",
"dirs-sys-next",
]
[[package]]
name = "dirs-sys-next"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
dependencies = [
"libc",
"redox_users",
"winapi",
]
[[package]]
name = "dispatch"
version = "0.2.0"
@ -408,6 +459,15 @@ dependencies = [
"xml-rs",
]
[[package]]
name = "hermit-abi"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
"libc",
]
[[package]]
name = "ident_case"
version = "1.0.1"
@ -660,6 +720,16 @@ dependencies = [
"winapi",
]
[[package]]
name = "num-integer"
version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.14"
@ -853,6 +923,16 @@ dependencies = [
"bitflags",
]
[[package]]
name = "redox_users"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
dependencies = [
"getrandom",
"redox_syscall",
]
[[package]]
name = "remove_dir_all"
version = "0.5.3"
@ -872,6 +952,12 @@ dependencies = [
"owned_ttf_parser",
]
[[package]]
name = "rustversion"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088"
[[package]]
name = "same-file"
version = "1.0.6"
@ -911,6 +997,53 @@ version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06"
[[package]]
name = "slog-async"
version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "766c59b252e62a34651412870ff55d8c4e6d04df19b43eecb2703e417b097ffe"
dependencies = [
"crossbeam-channel",
"slog",
"take_mut",
"thread_local",
]
[[package]]
name = "slog-scope"
version = "4.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f95a4b4c3274cd2869549da82b57ccc930859bdbf5bcea0424bc5f140b3c786"
dependencies = [
"arc-swap",
"lazy_static",
"slog",
]
[[package]]
name = "slog-stdlog"
version = "4.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8228ab7302adbf4fcb37e66f3cda78003feb521e7fd9e3847ec117a7784d0f5a"
dependencies = [
"log",
"slog",
"slog-scope",
]
[[package]]
name = "slog-term"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95c1e7e5aab61ced6006149ea772770b84a0d16ce0f7885def313e4829946d76"
dependencies = [
"atty",
"chrono",
"slog",
"term",
"thread_local",
]
[[package]]
name = "smallvec"
version = "1.6.1"
@ -983,6 +1116,12 @@ dependencies = [
"unicode-xid",
]
[[package]]
name = "take_mut"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60"
[[package]]
name = "tempfile"
version = "3.2.0"
@ -997,6 +1136,17 @@ dependencies = [
"winapi",
]
[[package]]
name = "term"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
dependencies = [
"dirs-next",
"rustversion",
"winapi",
]
[[package]]
name = "thiserror"
version = "1.0.26"
@ -1017,13 +1167,37 @@ dependencies = [
"syn",
]
[[package]]
name = "thread_local"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd"
dependencies = [
"once_cell",
]
[[package]]
name = "tilers"
version = "0.1.0"
dependencies = [
"slog",
"slog-async",
"slog-scope",
"slog-stdlog",
"slog-term",
"smithay",
]
[[package]]
name = "time"
version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
dependencies = [
"libc",
"winapi",
]
[[package]]
name = "toml"
version = "0.5.8"

View File

@ -3,6 +3,13 @@ name = "tilers"
version = "0.1.0"
edition = "2018"
[dependencies]
slog = "2.1.1"
slog-term = "2.8"
slog-async = "2.2"
slog-stdlog = "4.1.0"
slog-scope = "4.4.0"
[dependencies.smithay]
version = "0.3.0"
default-features = false

View File

@ -1,7 +1,16 @@
pub const OUTPUT_NAME: &str = "winit";
use slog::*;
use std::{cell::RefCell, rc::Rc};
use smithay::{backend::{renderer::{ImportDma, ImportEgl}, winit}, reexports::wayland_server::Display, wayland::{dmabuf::init_dmabuf_global, output::Mode}};
use smithay::{
backend::{
renderer::{ImportDma, ImportEgl},
winit,
},
reexports::{calloop::EventLoop, wayland_server::Display},
wayland::{dmabuf::init_dmabuf_global, output::Mode},
};
mod state;
use crate::state::*;
@ -16,19 +25,25 @@ impl Backend for WinitData {
}
}
fn main() {
println!("Hello, world!");
let log = slog::Logger::root(
slog_async::Async::default(slog_term::term_full().fuse()).fuse(),
o!(),
);
let _guard = slog_scope::set_global_logger(log.clone());
slog_stdlog::init().expect("Could not setup log backend");
run_winit(log)
}
#[cfg(feature = "winit")]
fn run_winit() {
let mut event_loop = smithay::reexports::calloop::EventLoop::try_new().unwrap();
fn run_winit(log: Logger) {
let mut event_loop = EventLoop::try_new().unwrap();
let display = Rc::new(RefCell::new(Display::new()));
let (renderer, mut input) = match winit::init(None) {
let (renderer, mut input) = match winit::init(log.clone()) {
Ok(ret) => ret,
Err(_) => return
Err(_) => return,
};
let renderer = Rc::new(RefCell::new(renderer));
@ -36,8 +51,10 @@ fn run_winit() {
if renderer
.borrow_mut()
.renderer()
.bind_wl_display(&display.borrow()).is_ok() {
dbg!("EGL hardware-acceleration enabled");
.bind_wl_display(&display.borrow())
.is_ok()
{
info!(log, "EGL hardware-acceleration enabled");
let dmabuf_formats = renderer
.borrow_mut()
.renderer()
@ -48,19 +65,27 @@ fn run_winit() {
init_dmabuf_global(
&mut *display.borrow_mut(),
dmabuf_formats,
move |buffer, _| renderer.borrow_mut().renderer().import_dmabuf(buffer).is_ok(),
None,
move |buffer, _| {
renderer
.borrow_mut()
.renderer()
.import_dmabuf(buffer)
.is_ok()
},
log.clone(),
);
}
let size = renderer.borrow().window_size().physical_size;
let data = WinitData{};
let data = WinitData {};
let mut state = State::init(display.clone(), event_loop.handle(), data);
let mut state = State::init(display.clone(), event_loop.handle(), data, log.clone());
let mode = Mode {
size,
refresh: 60_000
refresh: 60_000,
};
loop {}
}

View File

@ -1,4 +1,5 @@
pub const OUTPUT_NAME: &str = "winit";
use slog::*;
use std::{cell::RefCell, rc::Rc, sync::{Arc, Mutex}, sync::atomic::{AtomicBool, Ordering}, time::Duration};
use smithay::{reexports::{calloop::{Mode, Interest, LoopHandle, PostAction, generic::Generic}, wayland_server::{Display, protocol::wl_surface::WlSurface}}, utils::{Logical, Point}, wayland::{data_device::{DataDeviceEvent, default_action_chooser, init_data_device, set_data_device_focus}, output::xdg::init_xdg_output_manager, seat::{CursorImageStatus, KeyboardHandle, PointerHandle, Seat, XkbConfig}, shm::init_shm_global}};
@ -15,10 +16,11 @@ pub struct State<BackendData> {
pub running: Arc<AtomicBool>,
pub seat_name: String,
pub seat: Seat,
pub log: Logger,
}
impl<BackendData: Backend + 'static> State<BackendData> {
pub fn init(display: Rc<RefCell<Display>>, loop_handle: LoopHandle<'static, State<BackendData>>, backend_data: BackendData) -> Self {
pub fn init(display: Rc<RefCell<Display>>, loop_handle: LoopHandle<'static, State<BackendData>>, backend_data: BackendData, log: Logger) -> Self {
loop_handle.insert_source(
Generic::from_fd(display.borrow().get_poll_fd(), Interest::READ, Mode::Level),
move |_,_, state: &mut State<BackendData>| {
@ -40,6 +42,7 @@ impl<BackendData: Backend + 'static> State<BackendData> {
init_xdg_output_manager(&mut display.borrow_mut(), None);
let socket_name = display.borrow_mut().add_socket_auto().unwrap().into_string().unwrap();
dbg!(&socket_name);
std::env::set_var("WAYLAND_DISPLAY", &socket_name);
let dnd_icon = Arc::new(Mutex::new(None));
@ -82,6 +85,7 @@ impl<BackendData: Backend + 'static> State<BackendData> {
pointer,
seat_name,
seat,
log: log.clone()
}
}
}