implement Visual Studio logs

This commit is contained in:
Paul Rouget 2019-05-29 10:37:47 +02:00
parent 661170c61c
commit 0d96bbde4b
2 changed files with 55 additions and 1 deletions

View file

@ -5,6 +5,10 @@
#[macro_use]
extern crate log;
#[cfg(target_os = "windows")]
mod vslogger;
#[cfg(not(target_os = "windows"))]
use env_logger;
use simpleservo::{self, gl_glue, ServoGlue, SERVO};
use simpleservo::{Coordinates, EventLoopWaker, HostTrait, InitOptions, VRInitOptions};
@ -67,13 +71,33 @@ pub extern "C" fn servo_version() -> *const c_char {
ptr
}
#[cfg(target_os = "windows")]
fn init_logger() {
use log::LevelFilter;
use std::sync::Once;
use vslogger::VSLogger;
static LOGGER: VSLogger = VSLogger;
static LOGGER_INIT: Once = Once::new();
LOGGER_INIT.call_once(|| {
log::set_logger(&LOGGER)
.map(|_| log::set_max_level(LevelFilter::Debug))
.unwrap();
});
}
#[cfg(not(target_os = "windows"))]
fn init_logger() {
crate::env_logger::init();
}
fn init(
opts: CInitOptions,
gl: gl_glue::ServoGl,
wakeup: extern "C" fn(),
callbacks: CHostCallbacks,
) {
crate::env_logger::init();
init_logger();
let args = if !opts.args.is_null() {
let args = unsafe { CStr::from_ptr(opts.args) };
@ -117,6 +141,7 @@ pub extern "C" fn init_with_egl(
wakeup: extern "C" fn(),
callbacks: CHostCallbacks,
) {
init_logger();
let gl = gl_glue::egl::init().unwrap();
init(opts, gl, wakeup, callbacks)
}
@ -128,6 +153,7 @@ pub extern "C" fn init_with_gl(
wakeup: extern "C" fn(),
callbacks: CHostCallbacks,
) {
init_logger();
let gl = gl_glue::gl::init().unwrap();
init(opts, gl, wakeup, callbacks)
}

View file

@ -0,0 +1,28 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use log::{self, Level, Metadata, Record};
extern "C" {
fn OutputDebugStringA(s: *const u8);
}
pub struct VSLogger;
impl log::Log for VSLogger {
fn enabled(&self, metadata: &Metadata) -> bool {
metadata.level() <= Level::Warn
}
fn log(&self, record: &Record) {
if self.enabled(record.metadata()) {
let log = format!("RUST: {} - {}\r\n\0", record.level(), record.args());
unsafe {
OutputDebugStringA(log.as_ptr());
};
}
}
fn flush(&self) {}
}