mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
[OHOS] Allow setting the log-filter via cli arguments (#36444)
This PR allows setting the log-filter according to the env_filter spec via CLI arguments. Testing is currently in progress, will be done on machines running OHOS. --------- Signed-off-by: Astraea Quinn Skoutelli <astraea.quinn.skoutelli@huawei.com> Co-authored-by: Jonathan Schwender <schwenderjonathan@gmail.com>
This commit is contained in:
parent
1ea80c4335
commit
064f82d0a3
3 changed files with 75 additions and 29 deletions
|
@ -7,7 +7,7 @@ use std::cell::RefCell;
|
|||
use std::mem::MaybeUninit;
|
||||
use std::os::raw::c_void;
|
||||
use std::sync::mpsc::{Receiver, Sender};
|
||||
use std::sync::{Once, OnceLock, mpsc};
|
||||
use std::sync::{LazyLock, Once, OnceLock, mpsc};
|
||||
use std::thread;
|
||||
use std::thread::sleep;
|
||||
use std::time::Duration;
|
||||
|
@ -386,32 +386,38 @@ extern "C" fn on_dispatch_key_event(xc: *mut OH_NativeXComponent, _window: *mut
|
|||
}
|
||||
}
|
||||
|
||||
static LOGGER: LazyLock<hilog::Logger> = LazyLock::new(|| {
|
||||
let mut builder = hilog::Builder::new();
|
||||
let filters = [
|
||||
"fonts",
|
||||
"servo",
|
||||
"servoshell",
|
||||
"servoshell::egl:gl_glue",
|
||||
// Show redirected stdout / stderr by default
|
||||
"servoshell::egl::log",
|
||||
// Show JS errors by default.
|
||||
"script::dom::bindings::error",
|
||||
// Show GL errors by default.
|
||||
"canvas::webgl_thread",
|
||||
"compositing::compositor",
|
||||
"compositing::touch",
|
||||
"constellation::constellation",
|
||||
"ohos_ime",
|
||||
];
|
||||
for &module in &filters {
|
||||
builder.filter_module(module, log::LevelFilter::Debug);
|
||||
}
|
||||
|
||||
builder.filter_level(LevelFilter::Warn).build()
|
||||
});
|
||||
|
||||
fn initialize_logging_once() {
|
||||
static ONCE: Once = Once::new();
|
||||
ONCE.call_once(|| {
|
||||
let mut builder = hilog::Builder::new();
|
||||
let filters = [
|
||||
"fonts",
|
||||
"servo",
|
||||
"servoshell",
|
||||
"servoshell::egl:gl_glue",
|
||||
// Show redirected stdout / stderr by default
|
||||
"servoshell::egl::log",
|
||||
// Show JS errors by default.
|
||||
"script::dom::bindings::error",
|
||||
// Show GL errors by default.
|
||||
"canvas::webgl_thread",
|
||||
"compositing::compositor",
|
||||
"compositing::touch",
|
||||
"constellation::constellation",
|
||||
"ohos_ime",
|
||||
];
|
||||
for &module in &filters {
|
||||
builder.filter_module(module, log::LevelFilter::Debug);
|
||||
}
|
||||
|
||||
builder.filter_level(LevelFilter::Warn).init();
|
||||
|
||||
let logger: &'static hilog::Logger = &LOGGER;
|
||||
let max_level = logger.filter();
|
||||
let r = log::set_logger(logger).and_then(|()| Ok(log::set_max_level(max_level)));
|
||||
debug!("Attempted to register the logger: {r:?} and set max level to: {max_level}");
|
||||
info!("Servo Register callback called!");
|
||||
|
||||
std::panic::set_hook(Box::new(|info| {
|
||||
|
@ -447,7 +453,26 @@ fn initialize_logging_once() {
|
|||
if let Err(e) = super::log::redirect_stdout_and_stderr() {
|
||||
error!("Failed to redirect stdout and stderr to hilog due to: {e:?}");
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
pub fn set_log_filter(filter: Option<&str>) {
|
||||
let Some(filter) = filter else {
|
||||
debug!("Called ohos::set_log_filter without providing a filter");
|
||||
return;
|
||||
};
|
||||
|
||||
debug!("Updating log filter to {filter}");
|
||||
let mut builder = env_filter::Builder::new();
|
||||
let filter = match builder.try_parse(filter) {
|
||||
Result::Ok(filter) => filter,
|
||||
Result::Err(err) => {
|
||||
error!("Failed to parse log filter: {err}");
|
||||
return;
|
||||
},
|
||||
};
|
||||
let filter = filter.build();
|
||||
(*LOGGER).set_filter(filter);
|
||||
}
|
||||
|
||||
fn register_xcomponent_callbacks(env: &Env, xcomponent: &JsObject) -> napi_ohos::Result<()> {
|
||||
|
|
|
@ -97,6 +97,8 @@ pub fn init(
|
|||
};
|
||||
|
||||
crate::init_tracing(servoshell_preferences.tracing_filter.as_deref());
|
||||
#[cfg(target_env = "ohos")]
|
||||
crate::egl::ohos::set_log_filter(servoshell_preferences.log_filter.as_deref());
|
||||
|
||||
let Ok(window_size) = (unsafe { super::get_xcomponent_size(xcomponent, native_window) }) else {
|
||||
return Err("Failed to get xcomponent size");
|
||||
|
|
|
@ -57,6 +57,11 @@ pub(crate) struct ServoShellPreferences {
|
|||
/// Where to load userscripts from, if any.
|
||||
/// and if the option isn't passed userscripts won't be loaded.
|
||||
pub userscripts_directory: Option<PathBuf>,
|
||||
|
||||
/// Log filter given in the `log_filter` spec as a String, if any.
|
||||
/// If a filter is passed, the logger should adjust accordingly.
|
||||
#[cfg(target_env = "ohos")]
|
||||
pub log_filter: Option<String>,
|
||||
}
|
||||
|
||||
impl Default for ServoShellPreferences {
|
||||
|
@ -75,6 +80,8 @@ impl Default for ServoShellPreferences {
|
|||
output_image_path: None,
|
||||
exit_after_stable_image: false,
|
||||
userscripts_directory: None,
|
||||
#[cfg(target_env = "ohos")]
|
||||
log_filter: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -348,6 +355,14 @@ pub(crate) fn parse_command_line_arguments(args: Vec<String>) -> ArgumentParsing
|
|||
"FILTER",
|
||||
);
|
||||
|
||||
#[cfg(target_env = "ohos")]
|
||||
opts.optmulti(
|
||||
"",
|
||||
"log-filter",
|
||||
"Define a custom filter for logging.",
|
||||
"FILTER",
|
||||
);
|
||||
|
||||
opts.optflag(
|
||||
"",
|
||||
"enable-experimental-web-platform-features",
|
||||
|
@ -408,10 +423,12 @@ pub(crate) fn parse_command_line_arguments(args: Vec<String>) -> ArgumentParsing
|
|||
}
|
||||
// Env-Filter directives are comma seperated.
|
||||
let filters = opt_match.opt_strs("tracing-filter").join(",");
|
||||
let tracing_filter = if filters.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(filters)
|
||||
let tracing_filter = (!filters.is_empty()).then_some(filters);
|
||||
|
||||
#[cfg(target_env = "ohos")]
|
||||
let log_filter = {
|
||||
let filters = opt_match.opt_strs("log-filter").join(",");
|
||||
(!filters.is_empty()).then_some(filters)
|
||||
};
|
||||
|
||||
let mut debug_options = DebugOptions::default();
|
||||
|
@ -626,6 +643,8 @@ pub(crate) fn parse_command_line_arguments(args: Vec<String>) -> ArgumentParsing
|
|||
userscripts_directory: opt_match
|
||||
.opt_default("userscripts", "resources/user-agent-js")
|
||||
.map(PathBuf::from),
|
||||
#[cfg(target_env = "ohos")]
|
||||
log_filter,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue