mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
implement Visual Studio logs
This commit is contained in:
parent
661170c61c
commit
0d96bbde4b
2 changed files with 55 additions and 1 deletions
|
@ -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)
|
||||
}
|
||||
|
|
28
ports/libsimpleservo/capi/src/vslogger.rs
Normal file
28
ports/libsimpleservo/capi/src/vslogger.rs
Normal 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) {}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue