core: Switch from log to tracing

This commit is contained in:
Nathan Adams 2023-01-04 11:09:47 +01:00
parent d6b8d6e488
commit 13fd830e7c
64 changed files with 230 additions and 218 deletions

2
Cargo.lock generated
View File

@ -3374,7 +3374,6 @@ dependencies = [
"generational-arena",
"indexmap",
"instant",
"log",
"lzma-rs",
"nellymoser-rs",
"num-derive",
@ -3395,6 +3394,7 @@ dependencies = [
"swf",
"symphonia",
"thiserror",
"tracing",
"url",
"wasm-bindgen-futures",
"weak-table",

View File

@ -15,7 +15,7 @@ fnv = "1.0.7"
gc-arena = { git = "https://github.com/ruffle-rs/gc-arena" }
generational-arena = "0.2.8"
indexmap = "1.9.2"
log = "0.4"
tracing = "0.1.37"
ruffle_render = { path = "../render" }
ruffle_video = { path = "../video" }
ruffle_macros = { path = "macros" }

View File

@ -46,9 +46,9 @@ pub use value::Value;
macro_rules! avm_warn {
($activation: ident, $($arg:tt)*) => (
if cfg!(feature = "avm_debug") {
log::warn!("{} -- in {}", format!($($arg)*), $activation.id)
tracing::warn!("{} -- in {}", format!($($arg)*), $activation.id)
} else {
log::warn!($($arg)*)
tracing::warn!($($arg)*)
}
)
}
@ -57,9 +57,9 @@ macro_rules! avm_warn {
macro_rules! avm_error {
($activation: ident, $($arg:tt)*) => (
if cfg!(feature = "avm_debug") {
log::error!("{} -- in {}", format!($($arg)*), $activation.id)
tracing::error!("{} -- in {}", format!($($arg)*), $activation.id)
} else {
log::error!($($arg)*)
tracing::error!($($arg)*)
}
)
}

View File

@ -31,7 +31,7 @@ use url::form_urlencoded;
macro_rules! avm_debug {
($avm: expr, $($arg:tt)*) => (
if $avm.show_debug_output() {
log::debug!($($arg)*)
tracing::debug!($($arg)*)
}
)
}

View File

@ -341,7 +341,7 @@ pub fn clear_interval<'gc>(
.unwrap_or(&Value::Undefined)
.coerce_to_i32(activation)?;
if !activation.context.timers.remove(id) {
log::info!("clearInterval: Timer {} does not exist", id);
tracing::info!("clearInterval: Timer {} does not exist", id);
}
Ok(Value::Undefined)
@ -357,7 +357,7 @@ pub fn clear_timeout<'gc>(
.unwrap_or(&Value::Undefined)
.coerce_to_i32(activation)?;
if !activation.context.timers.remove(id) {
log::info!("clearTimeout: Timer {} does not exist", id);
tracing::info!("clearTimeout: Timer {} does not exist", id);
}
Ok(Value::Undefined)

View File

@ -17,7 +17,7 @@ pub fn is_active<'gc>(
_this: Object<'gc>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Accessibility.isActive: not yet implemented");
tracing::warn!("Accessibility.isActive: not yet implemented");
Ok(Value::Bool(false))
}
@ -26,7 +26,7 @@ pub fn send_event<'gc>(
_this: Object<'gc>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Accessibility.sendEvent: not yet implemented");
tracing::warn!("Accessibility.sendEvent: not yet implemented");
Ok(Value::Undefined)
}
@ -35,7 +35,7 @@ pub fn update_properties<'gc>(
_this: Object<'gc>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Accessibility.updateProperties: not yet implemented");
tracing::warn!("Accessibility.updateProperties: not yet implemented");
Ok(Value::Undefined)
}

View File

@ -72,7 +72,7 @@ pub fn constructor<'gc>(
.coerce_to_i32(activation)?;
if !is_size_valid(activation.swf_version(), width, height) {
log::warn!("Invalid BitmapData size: {}x{}", width, height);
tracing::warn!("Invalid BitmapData size: {}x{}", width, height);
return Ok(Value::Undefined);
}
@ -517,12 +517,12 @@ pub fn draw<'gc>(
{
blend_mode = mode;
} else {
log::error!("Unknown blend mode {:?}", mode);
tracing::error!("Unknown blend mode {:?}", mode);
}
}
if args.get(4).is_some() {
log::warn!("BitmapData.draw with clip rect - not implemented")
tracing::warn!("BitmapData.draw with clip rect - not implemented")
}
let smoothing = args
.get(5)
@ -571,7 +571,7 @@ pub fn apply_filter<'gc>(
_this: Object<'gc>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("BitmapData.applyFilter - not yet implemented");
tracing::warn!("BitmapData.applyFilter - not yet implemented");
Ok((-1).into())
}
@ -582,7 +582,7 @@ pub fn generate_filter_rect<'gc>(
) -> Result<Value<'gc>, Error<'gc>> {
if let Some(bitmap_data) = this.as_bitmap_data_object() {
if !bitmap_data.disposed() {
log::warn!("BitmapData.generateFilterRect - not yet implemented");
tracing::warn!("BitmapData.generateFilterRect - not yet implemented");
return Ok(Value::Undefined);
}
}
@ -746,7 +746,7 @@ pub fn hit_test<'gc>(
) -> Result<Value<'gc>, Error<'gc>> {
if let Some(bitmap_data) = this.as_bitmap_data_object() {
if !bitmap_data.disposed() {
log::warn!("BitmapData.hitTest - not yet implemented");
tracing::warn!("BitmapData.hitTest - not yet implemented");
return Ok(Value::Undefined);
}
}
@ -1079,7 +1079,7 @@ pub fn pixel_dissolve<'gc>(
) -> Result<Value<'gc>, Error<'gc>> {
if let Some(bitmap_data) = this.as_bitmap_data_object() {
if !bitmap_data.disposed() {
log::warn!("BitmapData.pixelDissolve - not yet implemented");
tracing::warn!("BitmapData.pixelDissolve - not yet implemented");
return Ok(Value::Undefined);
}
}
@ -1122,7 +1122,7 @@ pub fn threshold<'gc>(
) -> Result<Value<'gc>, Error<'gc>> {
if let Some(bitmap_data) = this.as_bitmap_data_object() {
if !bitmap_data.disposed() {
log::warn!("BitmapData.threshold - not yet implemented");
tracing::warn!("BitmapData.threshold - not yet implemented");
return Ok(Value::Undefined);
}
}

View File

@ -115,7 +115,7 @@ fn set_blend_mode<'gc>(
if let Ok(mode) = BlendMode::from_str(&mode.to_string()) {
this.set_blend_mode(activation.context.gc_context, mode);
} else {
log::error!("Unknown blend mode {}", mode);
tracing::error!("Unknown blend mode {}", mode);
};
}
Ok(())

View File

@ -30,7 +30,7 @@ pub fn domain<'gc>(
"localhost".into()
}
} else {
log::error!("LocalConnection::domain: Unable to parse movie URL");
tracing::error!("LocalConnection::domain: Unable to parse movie URL");
return Ok(Value::Null);
}
} else {

View File

@ -1480,7 +1480,7 @@ fn set_blend_mode<'gc>(
if let Ok(mode) = BlendMode::from_str(&mode.to_string()) {
this.set_blend_mode(activation.context.gc_context, mode);
} else {
log::error!("Unknown blend mode {}", mode);
tracing::error!("Unknown blend mode {}", mode);
};
}
Ok(())

View File

@ -228,7 +228,7 @@ pub fn get_local<'gc>(
const INVALID_CHARS: &str = "~%&\\;:\"',<>?# ";
if name.contains(|c| INVALID_CHARS.contains(c)) {
log::error!("SharedObject::get_local: Invalid character in name");
tracing::error!("SharedObject::get_local: Invalid character in name");
return Ok(Value::Null);
}
@ -238,7 +238,7 @@ pub fn get_local<'gc>(
if let Ok(url) = url::Url::parse(url) {
url
} else {
log::error!("SharedObject::get_local: Unable to parse movie URL");
tracing::error!("SharedObject::get_local: Unable to parse movie URL");
return Ok(Value::Null);
}
} else {
@ -255,7 +255,7 @@ pub fn get_local<'gc>(
// Secure parameter disallows using the shared object from non-HTTPS.
if secure && movie_url.scheme() != "https" {
log::warn!(
tracing::warn!(
"SharedObject.get_local: Tried to load a secure shared object from non-HTTPS origin"
);
return Ok(Value::Null);
@ -311,7 +311,7 @@ pub fn get_local<'gc>(
{
local_path
} else {
log::warn!("SharedObject.get_local: localPath parameter does not match SWF path");
tracing::warn!("SharedObject.get_local: localPath parameter does not match SWF path");
return Ok(Value::Null);
}
} else {
@ -327,7 +327,7 @@ pub fn get_local<'gc>(
// Flash will generally fail to save shared objects with a path component starting with `.`,
// so let's disallow them altogether.
if full_name.split('/').any(|s| s.starts_with('.')) {
log::error!("SharedObject.get_local: Invalid path with .. segments");
tracing::error!("SharedObject.get_local: Invalid path with .. segments");
return Ok(Value::Null);
}

View File

@ -49,7 +49,7 @@ pub fn constructor<'gc>(
if let Some(sound) = this.as_sound_object() {
sound.set_owner(activation.context.gc_context, owner);
} else {
log::error!("Tried to construct a Sound on a non-SoundObject");
tracing::error!("Tried to construct a Sound on a non-SoundObject");
}
Ok(this.into())

View File

@ -618,7 +618,7 @@ pub fn set_type<'gc>(
} else if value.eq_ignore_case(WStr::from_units(b"dynamic")) {
this.set_editable(false, &mut activation.context)
} else {
log::warn!("Invalid TextField.type: {}", value);
tracing::warn!("Invalid TextField.type: {}", value);
}
Ok(())

View File

@ -305,7 +305,7 @@ impl<'gc> Avm1<'gc> {
pub fn halt(&mut self) {
if !self.halted {
self.halted = true;
log::error!("No more actions will be executed in this movie.")
tracing::error!("No more actions will be executed in this movie.")
}
}
@ -321,7 +321,7 @@ impl<'gc> Avm1<'gc> {
#[allow(clippy::let_and_return)]
pub fn pop(&mut self) -> Value<'gc> {
let value = self.stack.pop().unwrap_or_else(|| {
log::warn!("Avm1::pop: Stack underflow");
tracing::warn!("Avm1::pop: Stack underflow");
Value::Undefined
});
@ -495,7 +495,7 @@ impl<'gc> Avm1<'gc> {
pub fn skip_actions(reader: &mut Reader<'_>, num_actions_to_skip: u8) {
for _ in 0..num_actions_to_skip {
if let Err(e) = reader.read_action() {
log::warn!("Couldn't skip action: {}", e);
tracing::warn!("Couldn't skip action: {}", e);
}
}
}
@ -511,10 +511,10 @@ pub fn root_error_handler<'gc>(activation: &mut Activation<'_, 'gc, '_>, error:
return;
}
Error::InvalidSwf(swf_error) => {
log::error!("{}: {}", error, swf_error);
tracing::error!("{}: {}", error, swf_error);
}
_ => {
log::error!("{}", error);
tracing::error!("{}", error);
}
}
activation.context.avm1.halt();

View File

@ -16,7 +16,7 @@ use swf::{DoAbc, DoAbcFlag};
macro_rules! avm_debug {
($avm: expr, $($arg:tt)*) => (
if $avm.show_debug_output() {
log::debug!($($arg)*)
tracing::debug!($($arg)*)
}
)
}
@ -348,7 +348,7 @@ impl<'gc> Avm2<'gc> {
/// Push a value onto the operand stack.
fn push(&mut self, value: impl Into<Value<'gc>>, depth: usize, max: usize) {
if self.stack.len() - depth > max {
log::warn!("Avm2::push: Stack overflow");
tracing::warn!("Avm2::push: Stack overflow");
return;
}
let mut value = value.into();
@ -366,7 +366,7 @@ impl<'gc> Avm2<'gc> {
#[allow(clippy::let_and_return)]
fn pop(&mut self, depth: usize) -> Value<'gc> {
let value = if self.stack.len() <= depth {
log::warn!("Avm2::pop: Stack underflow");
tracing::warn!("Avm2::pop: Stack underflow");
Value::Undefined
} else {
self.stack.pop().unwrap_or(Value::Undefined)
@ -385,7 +385,7 @@ impl<'gc> Avm2<'gc> {
.get(self.stack.len() - index - 1)
.copied()
.unwrap_or_else(|| {
log::warn!("Avm1::pop: Stack underflow");
tracing::warn!("Avm1::pop: Stack underflow");
Value::Undefined
});
@ -404,7 +404,7 @@ impl<'gc> Avm2<'gc> {
fn push_scope(&mut self, scope: Scope<'gc>, depth: usize, max: usize) {
if self.scope_stack.len() - depth > max {
log::warn!("Avm2::push_scope: Scope Stack overflow");
tracing::warn!("Avm2::push_scope: Scope Stack overflow");
return;
}
@ -413,7 +413,7 @@ impl<'gc> Avm2<'gc> {
fn pop_scope(&mut self, depth: usize) -> Option<Scope<'gc>> {
if self.scope_stack.len() <= depth {
log::warn!("Avm2::pop_scope: Scope Stack underflow");
tracing::warn!("Avm2::pop_scope: Scope Stack underflow");
None
} else {
self.scope_stack.pop()

View File

@ -931,9 +931,9 @@ impl<'a, 'gc, 'gc_context> Activation<'a, 'gc, 'gc_context> {
}
}
log::error!("AVM2 error: {:?}", error);
tracing::error!("AVM2 error: {:?}", error);
if let Some(err) = error.as_object().and_then(|obj| obj.as_error_object()) {
log::error!("{}", err.display_full(self)?);
tracing::error!("{}", err.display_full(self)?);
}
Err(Error::AvmError(error))
}
@ -1151,7 +1151,7 @@ impl<'a, 'gc, 'gc_context> Activation<'a, 'gc, 'gc_context> {
}
result
} else if let Err(e) = op {
log::error!("Parse error: {:?}", e);
tracing::error!("Parse error: {:?}", e);
Err(Error::RustError(Box::new(e)))
} else {
unreachable!();
@ -1159,7 +1159,7 @@ impl<'a, 'gc, 'gc_context> Activation<'a, 'gc, 'gc_context> {
}
fn unknown_op(&mut self, op: swf::avm2::types::Op) -> Result<FrameControl<'gc>, Error<'gc>> {
log::error!("Unknown AVM2 opcode: {:?}", op);
tracing::error!("Unknown AVM2 opcode: {:?}", op);
Err("Unknown op".into())
}

View File

@ -78,7 +78,7 @@ pub fn serialize_value<'gc>(
}),
))
} else {
log::warn!(
tracing::warn!(
"Serialization is not implemented for class other than Object: {:?}",
o
);
@ -161,7 +161,7 @@ pub fn deserialize_value<'gc>(
AmfValue::Object(elements, class) => {
if let Some(class) = class {
if !class.name.is_empty() && class.name != "Object" {
log::warn!("Deserializing class {:?} is not supported!", class);
tracing::warn!("Deserializing class {:?} is not supported!", class);
}
}
@ -207,7 +207,7 @@ pub fn deserialize_value<'gc>(
| AmfValue::VectorObject(..)
| AmfValue::Dictionary(..)
| AmfValue::Custom(..) => {
log::error!("Deserialization not yet implemented: {:?}", val);
tracing::error!("Deserialization not yet implemented: {:?}", val);
Value::Undefined
}
AmfValue::AMF3(val) => deserialize_value(activation, val)?,

View File

@ -205,7 +205,7 @@ impl ByteArrayStorage {
};
if let Some(error) = error {
// On error, just return an empty buffer.
log::warn!("ByteArray.compress: {}", error);
tracing::warn!("ByteArray.compress: {}", error);
buffer.clear();
}
buffer
@ -231,7 +231,7 @@ impl ByteArrayStorage {
CompressionAlgorithm::Lzma => Some("Ruffle was not compiled with LZMA support".into()),
};
if let Some(error) = error {
log::warn!("ByteArray.decompress: {}", error);
tracing::warn!("ByteArray.decompress: {}", error);
None
} else {
Some(buffer)

View File

@ -419,7 +419,7 @@ pub fn dispatch_event_to_target<'gc>(
let object = activation.global_scope();
if let Err(err) = handler.call(object, &[event.into()], activation) {
log::error!(
tracing::error!(
"Error dispatching event {:?} to handler {:?} : {:?}",
event,
handler,

View File

@ -82,7 +82,7 @@ pub fn instance_init<'gc>(
if character.is_some() {
//TODO: Determine if mismatched symbols will still work as a
//regular BitmapData subclass, or if this should throw
log::warn!(
tracing::warn!(
"BitmapData subclass {:?} is associated with a non-bitmap symbol",
name
);
@ -693,7 +693,7 @@ pub fn lock<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("BitmapData.lock - not yet implemented");
tracing::warn!("BitmapData.lock - not yet implemented");
Ok(Value::Undefined)
}
@ -730,13 +730,13 @@ pub fn draw<'gc>(
if let Ok(mode) = BlendMode::from_str(&mode.coerce_to_string(activation)?.to_string()) {
blend_mode = mode;
} else {
log::error!("Unknown blend mode {:?}", mode);
tracing::error!("Unknown blend mode {:?}", mode);
return Err("ArgumentError: Error #2008: Parameter blendMode must be one of the accepted values.".into());
}
}
if args.get(4).is_some() {
log::warn!("BitmapData.draw with clip rect - not implemented")
tracing::warn!("BitmapData.draw with clip rect - not implemented")
}
let mut bitmap_data = bitmap_data.write(activation.context.gc_context);
@ -849,7 +849,7 @@ pub fn apply_filter<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("BitmapData.applyFilter: Not yet implemented");
tracing::warn!("BitmapData.applyFilter: Not yet implemented");
Ok(Value::Undefined)
}

View File

@ -818,7 +818,7 @@ pub fn set_blend_mode<'gc>(
if let Ok(mode) = BlendMode::from_str(&mode.to_string()) {
dobj.set_blend_mode(activation.context.gc_context, mode);
} else {
log::error!("Unknown blend mode {}", mode);
tracing::error!("Unknown blend mode {}", mode);
return Err("ArgumentError: Error #2008: Parameter blendMode must be one of the accepted values.".into());
}
}

View File

@ -170,7 +170,7 @@ pub fn get_child_by_name<'gc>(
if let Some(child) = dobj.child_by_name(&name, false) {
return Ok(child.object2());
} else {
log::warn!("Display object container has no child with name {}", name);
tracing::warn!("Display object container has no child with name {}", name);
return Ok(Value::Null);
}
}
@ -581,7 +581,7 @@ pub fn mouse_children<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("DisplayObjectContainer.mouseChildren getter: not yet implemented");
tracing::warn!("DisplayObjectContainer.mouseChildren getter: not yet implemented");
Ok(Value::Undefined)
}
@ -590,7 +590,7 @@ pub fn set_mouse_children<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("DisplayObjectContainer.mouseChildren setter: not yet implemented");
tracing::warn!("DisplayObjectContainer.mouseChildren setter: not yet implemented");
Ok(Value::Undefined)
}
@ -600,7 +600,7 @@ pub fn tab_children<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("DisplayObjectContainer.tabChildren is a stub");
tracing::warn!("DisplayObjectContainer.tabChildren is a stub");
Ok(true.into())
}

View File

@ -86,7 +86,7 @@ fn begin_bitmap_fill<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Graphics.beginBitmapFill: not yet implemented");
tracing::warn!("Graphics.beginBitmapFill: not yet implemented");
Ok(Value::Undefined)
}
@ -96,7 +96,7 @@ fn begin_gradient_fill<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Graphics.beginGradientFill: not yet implemented");
tracing::warn!("Graphics.beginGradientFill: not yet implemented");
Ok(Value::Undefined)
}

View File

@ -162,7 +162,7 @@ pub fn tab_enabled<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("InteractiveObject.tabEnabled is a stub");
tracing::warn!("InteractiveObject.tabEnabled is a stub");
Ok(false.into())
}
@ -173,7 +173,7 @@ pub fn tab_index<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("InteractiveObject.tabIndex is a stub");
tracing::warn!("InteractiveObject.tabIndex is a stub");
Ok((-1).into())
}
@ -187,7 +187,7 @@ pub fn focus_rect<'gc>(
// let's only warn on true, as games sometimes just set focusRect to false for some reason.
if matches!(args.get(0), Some(Value::Bool(true))) {
log::warn!("InteractiveObject.focusRect is a stub");
tracing::warn!("InteractiveObject.focusRect is a stub");
}
Ok(Value::Null)

View File

@ -268,7 +268,7 @@ pub fn parent_allows_child<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("LoaderInfo.parentAllowsChild is a stub");
tracing::warn!("LoaderInfo.parentAllowsChild is a stub");
Ok(false.into())
}

View File

@ -53,7 +53,7 @@ pub fn add_frame_script<'gc>(
mc.register_frame_script(frame_id, callable, &mut activation.context);
}
} else {
log::error!("Attempted to add frame scripts to non-MovieClip this!");
tracing::error!("Attempted to add frame scripts to non-MovieClip this!");
}
Ok(Value::Undefined)

View File

@ -206,7 +206,7 @@ pub fn set_culling<'gc>(
} else if &*culling == b"front_and_back" {
Context3DTriangleFace::FrontAndBack
} else {
log::error!("Unknown culling {:?}", culling);
tracing::error!("Unknown culling {:?}", culling);
Context3DTriangleFace::None
};

View File

@ -15,7 +15,7 @@ pub fn upload_from_byte_array<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("IndexBuffer3D.uploadFromByteArray - not yet implemented");
tracing::warn!("IndexBuffer3D.uploadFromByteArray - not yet implemented");
Ok(Value::Undefined)
}

View File

@ -128,7 +128,7 @@ pub fn get_concatenated_color_transform<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Transform.concatenatedColorTransform: not yet implemented");
tracing::warn!("Transform.concatenatedColorTransform: not yet implemented");
Ok(Value::Undefined)
}

View File

@ -43,7 +43,7 @@ pub fn instance_init<'gc>(
{
this.set_sound(activation.context.gc_context, *sound);
} else {
log::warn!("Attempted to construct subclass of Sound, {}, which is associated with non-Sound character {}", class_object.inner_class_definition().read().name().local_name(), symbol);
tracing::warn!("Attempted to construct subclass of Sound, {}, which is associated with non-Sound character {}", class_object.inner_class_definition().read().name().local_name(), symbol);
}
}
}

View File

@ -8,7 +8,7 @@ pub fn get_dynamic_property_writer<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("ObjectEncoding.dynamicPropertyWriter: Not yet implemented");
tracing::warn!("ObjectEncoding.dynamicPropertyWriter: Not yet implemented");
Ok(Value::Undefined)
}
@ -17,6 +17,6 @@ pub fn set_dynamic_property_writer<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("ObjectEncoding.dynamicPropertyWriter: Not yet implemented");
tracing::warn!("ObjectEncoding.dynamicPropertyWriter: Not yet implemented");
Ok(Value::Undefined)
}

View File

@ -25,14 +25,14 @@ pub fn get_local<'gc>(
const INVALID_CHARS: &str = "~%&\\;:\"',<>?# ";
if name.contains(|c| INVALID_CHARS.contains(c)) {
log::error!("SharedObject::get_local: Invalid character in name");
tracing::error!("SharedObject::get_local: Invalid character in name");
return Ok(Value::Null);
}
let movie = if let DisplayObject::MovieClip(movie) = activation.context.stage.root_clip() {
movie
} else {
log::error!("SharedObject::get_local: Movie was None");
tracing::error!("SharedObject::get_local: Movie was None");
return Ok(Value::Null);
};
@ -40,7 +40,7 @@ pub fn get_local<'gc>(
if let Ok(url) = url::Url::parse(&url) {
url
} else {
log::error!("SharedObject::get_local: Unable to parse movie URL");
tracing::error!("SharedObject::get_local: Unable to parse movie URL");
return Ok(Value::Null);
}
} else {
@ -54,7 +54,7 @@ pub fn get_local<'gc>(
// Secure parameter disallows using the shared object from non-HTTPS.
if secure && movie_url.scheme() != "https" {
log::warn!(
tracing::warn!(
"SharedObject.get_local: Tried to load a secure shared object from non-HTTPS origin"
);
return Ok(Value::Null);
@ -110,7 +110,7 @@ pub fn get_local<'gc>(
{
local_path
} else {
log::warn!("SharedObject.get_local: localPath parameter does not match SWF path");
tracing::warn!("SharedObject.get_local: localPath parameter does not match SWF path");
return Ok(Value::Null);
}
} else {
@ -126,7 +126,7 @@ pub fn get_local<'gc>(
// Flash will generally fail to save shared objects with a path component starting with `.`,
// so let's disallow them altogether.
if full_name.split('/').any(|s| s.starts_with('.')) {
log::error!("SharedObject.get_local: Invalid path with .. segments");
tracing::error!("SharedObject.get_local: Invalid path with .. segments");
return Ok(Value::Null);
}
@ -215,7 +215,7 @@ pub fn close<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("SharedObject.close - not yet implemented");
tracing::warn!("SharedObject.close - not yet implemented");
Ok(Value::Undefined)
}
@ -224,6 +224,6 @@ pub fn clear<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("SharedObject.clear - not yet implemented");
tracing::warn!("SharedObject.clear - not yet implemented");
Ok(Value::Undefined)
}

View File

@ -55,7 +55,7 @@ fn spawn_fetch<'gc>(
.coerce_to_string(activation)?;
let method = NavigationMethod::from_method_str(&method_str).unwrap_or_else(|| {
log::error!("Unknown HTTP method type {:?}", method_str);
tracing::error!("Unknown HTTP method type {:?}", method_str);
NavigationMethod::Get
});

View File

@ -20,7 +20,7 @@ pub fn allow_domain<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Security.allowDomain not implemented");
tracing::warn!("Security.allowDomain not implemented");
Ok(Value::Undefined)
}
@ -29,7 +29,7 @@ pub fn allow_insecure_domain<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Security.allowInsecureDomain not implemented");
tracing::warn!("Security.allowInsecureDomain not implemented");
Ok(Value::Undefined)
}
@ -38,7 +38,7 @@ pub fn load_policy_file<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Security.loadPolicyFile not implemented");
tracing::warn!("Security.loadPolicyFile not implemented");
Ok(Value::Undefined)
}
@ -47,6 +47,6 @@ pub fn show_settings<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Security.showSettings not implemented");
tracing::warn!("Security.showSettings not implemented");
Ok(Value::Undefined)
}

View File

@ -10,7 +10,7 @@ pub fn get_caps_lock<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Keyboard.capsLock: not yet implemented");
tracing::warn!("Keyboard.capsLock: not yet implemented");
Ok(false.into())
}
@ -19,7 +19,7 @@ pub fn get_has_virtual_keyboard<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Keyboard.hasVirtualKeyboard: not yet implemented");
tracing::warn!("Keyboard.hasVirtualKeyboard: not yet implemented");
Ok(false.into())
}
@ -28,7 +28,7 @@ pub fn get_num_lock<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Keyboard.numLock: not yet implemented");
tracing::warn!("Keyboard.numLock: not yet implemented");
Ok(false.into())
}
@ -37,7 +37,7 @@ pub fn get_physical_keyboard_type<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Keyboard.physicalKeyboardType: not yet implemented");
tracing::warn!("Keyboard.physicalKeyboardType: not yet implemented");
Ok(AvmString::new_utf8(activation.context.gc_context, "alphanumeric").into())
}
@ -46,6 +46,6 @@ pub fn is_accessible<'gc>(
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
log::warn!("Keyboard.isAccessible: not yet implemented");
tracing::warn!("Keyboard.isAccessible: not yet implemented");
Ok(true.into())
}

View File

@ -36,10 +36,10 @@ pub fn log_warn<'gc>(
args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
match args {
[] => log::warn!("(__ruffle__.log_warn called with no arg)"),
[] => tracing::warn!("(__ruffle__.log_warn called with no arg)"),
[arg] => {
let msg = arg.coerce_to_string(activation)?;
log::warn!("{}", &msg.to_utf8_lossy());
tracing::warn!("{}", &msg.to_utf8_lossy());
}
args => {
let strings = args
@ -47,7 +47,7 @@ pub fn log_warn<'gc>(
.map(|a| a.coerce_to_string(activation))
.collect::<Result<Vec<_>, _>>()?;
let msg = crate::string::join(&strings, &WStr::from_units(b" "));
log::warn!("{}", &msg.to_utf8_lossy());
tracing::warn!("{}", &msg.to_utf8_lossy());
}
}

View File

@ -219,7 +219,7 @@ impl<'gc> LoaderInfoObject<'gc> {
let init_evt = EventObject::bare_default_event(context, "init");
if let Err(e) = Avm2::dispatch_event(context, init_evt, (*self).into()) {
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting `init` event: {}",
e
);
@ -242,7 +242,7 @@ impl<'gc> LoaderInfoObject<'gc> {
let complete_evt = EventObject::bare_default_event(context, "complete");
if let Err(e) = Avm2::dispatch_event(context, complete_evt, (*self).into()) {
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting `complete` event: {}",
e
);

View File

@ -50,7 +50,7 @@ pub fn make_decoder<R: 'static + Read + Send + Sync>(
let decoder: Box<dyn Decoder> = match format.compression {
AudioCompression::UncompressedUnknownEndian => {
// Cross fingers that it's little endian.
log::warn!("make_decoder: PCM sound is unknown endian; assuming little endian");
tracing::warn!("make_decoder: PCM sound is unknown endian; assuming little endian");
Box::new(PcmDecoder::new(
data,
format.is_stereo,

View File

@ -287,7 +287,7 @@ impl AudioMixer {
let decoder: Box<dyn SeekableDecoder> = match format.compression {
AudioCompression::UncompressedUnknownEndian => {
// Cross fingers that it's little endian.
log::warn!("make_decoder: PCM sound is unknown endian; assuming little endian");
tracing::warn!("make_decoder: PCM sound is unknown endian; assuming little endian");
Box::new(PcmDecoder::new(
data,
format.is_stereo,
@ -985,7 +985,7 @@ impl dasp::signal::Signal for EnvelopeSignal {
if self.prev_point.sample > self.next_point.sample {
self.next_point.sample = self.prev_point.sample;
log::error!("Invalid sound envelope; sample indices are out of order");
tracing::error!("Invalid sound envelope; sample indices are out of order");
}
}

View File

@ -13,7 +13,7 @@ impl NullLogBackend {
impl LogBackend for NullLogBackend {
fn avm_trace(&self, message: &str) {
log::info!(target: "avm_trace", "{}", message);
tracing::info!(target: "avm_trace", "{}", message);
}
}

View File

@ -193,7 +193,7 @@ impl NullSpawner {
use futures::task::LocalSpawnExt;
let _ = self.0.spawn_local(async move {
if let Err(e) = future.await {
log::error!("Asynchronous error occurred: {}", e);
tracing::error!("Asynchronous error occurred: {}", e);
}
});
}
@ -223,7 +223,7 @@ impl NullSpawner {
pub fn spawn_local(&self, future: OwnedFuture<(), Error>) {
wasm_bindgen_futures::spawn_local(async move {
if let Err(e) = future.await {
log::error!("Asynchronous error occurred: {}", e);
tracing::error!("Asynchronous error occurred: {}", e);
}
});
}

View File

@ -268,7 +268,7 @@ impl<'gc> BitmapData<'gc> {
);
let bitmap_handle = renderer.register_bitmap(bitmap);
if let Err(e) = &bitmap_handle {
log::warn!("Failed to register raw bitmap for BitmapData: {:?}", e);
tracing::warn!("Failed to register raw bitmap for BitmapData: {:?}", e);
}
self.bitmap_handle = bitmap_handle.ok();
}
@ -947,7 +947,7 @@ impl<'gc> BitmapData<'gc> {
self.height(),
self.pixels_rgba(),
) {
log::error!("Failed to update dirty bitmap {:?}: {:?}", handle, e);
tracing::error!("Failed to update dirty bitmap {:?}: {:?}", handle, e);
}
self.set_dirty(false);
}
@ -1087,7 +1087,7 @@ impl<'gc> BitmapData<'gc> {
match image {
Ok(image) => copy_pixels_to_bitmapdata(self, image.data()),
Err(ruffle_render::error::Error::Unimplemented) => {
log::warn!("BitmapData.draw: Not yet implemented")
tracing::warn!("BitmapData.draw: Not yet implemented")
}
Err(e) => panic!("BitmapData.draw failed: {e:?}"),
}

View File

@ -1316,7 +1316,7 @@ pub trait TDisplayObject<'gc>:
let name = Avm2Multiname::public(self.name());
let mut activation = Avm2Activation::from_nothing(context.reborrow());
if let Err(e) = p.init_property(&name, c.into(), &mut activation) {
log::error!(
tracing::error!(
"Got error when setting AVM2 child named \"{}\": {}",
&self.name(),
e
@ -1355,7 +1355,7 @@ pub trait TDisplayObject<'gc>:
let dobject_constr = context.avm2.classes().display_object;
if let Err(e) = Avm2::broadcast_event(context, frame_constructed_evt, dobject_constr) {
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting frameConstructed event: {}",
e
);
@ -1378,7 +1378,7 @@ pub trait TDisplayObject<'gc>:
let dobject_constr = context.avm2.classes().display_object;
if let Err(e) = Avm2::broadcast_event(context, exit_frame_evt, dobject_constr) {
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting exitFrame event: {}",
e
);

View File

@ -313,7 +313,7 @@ impl<'gc> TDisplayObject<'gc> for Avm1Button<'gc> {
new_children.push((child, record.depth.into()));
}
Err(error) => {
log::error!(
tracing::error!(
"Button ID {}: could not instantiate child ID {}: {}",
read.static_data.read().id,
record.id,

View File

@ -216,7 +216,7 @@ impl<'gc> Avm2Button<'gc> {
children.push((child, record.depth));
}
Err(error) => {
log::error!(
tracing::error!(
"Button ID {}: could not instantiate child ID {}: {}",
static_data.read().id,
record.id,
@ -483,7 +483,7 @@ impl<'gc> TDisplayObject<'gc> for Avm2Button<'gc> {
let mut activation = Avm2Activation::from_nothing(context.reborrow());
match Avm2StageObject::for_display_object(&mut activation, (*self).into(), class) {
Ok(object) => self.0.write(context.gc_context).object = Some(object.into()),
Err(e) => log::error!("Got {} when constructing AVM2 side of button", e),
Err(e) => tracing::error!("Got {} when constructing AVM2 side of button", e),
};
self.on_construction_complete(context);
@ -581,7 +581,7 @@ impl<'gc> TDisplayObject<'gc> for Avm2Button<'gc> {
let result: Result<(), Avm2Error> = constr_thing();
if let Err(e) = result {
log::error!("Got {} when constructing AVM2 side of button", e);
tracing::error!("Got {} when constructing AVM2 side of button", e);
}
}
}

View File

@ -202,7 +202,7 @@ impl<'gc> Bitmap<'gc> {
} else if class.has_class_in_chain(context.avm2.classes().bitmapdata) {
BitmapClass::BitmapData(class)
} else {
return log::error!("Associated class {:?} for symbol {} must extend flash.display.Bitmap or BitmapData, does neither", class.inner_class_definition().read().name(), self.id());
return tracing::error!("Associated class {:?} for symbol {} must extend flash.display.Bitmap or BitmapData, does neither", class.inner_class_definition().read().name(), self.id());
};
self.0.write(context.gc_context).avm2_bitmap_class = bitmap_class;
@ -268,7 +268,7 @@ impl<'gc> TDisplayObject<'gc> for Bitmap<'gc> {
Ok(object) => {
self.0.write(activation.context.gc_context).avm2_object = Some(object.into())
}
Err(e) => log::error!("Got error when creating AVM2 side of bitmap: {}", e),
Err(e) => tracing::error!("Got error when creating AVM2 side of bitmap: {}", e),
}
self.on_construction_complete(context);

View File

@ -27,7 +27,7 @@ pub fn dispatch_removed_from_stage_event<'gc>(
let removed_evt = Avm2EventObject::bare_default_event(context, "removedFromStage");
if let Err(e) = Avm2::dispatch_event(context, removed_evt, object) {
log::error!("Encountered AVM2 error when dispatching event: {}", e);
tracing::error!("Encountered AVM2 error when dispatching event: {}", e);
}
}
@ -48,7 +48,7 @@ pub fn dispatch_removed_event<'gc>(
let removed_evt = Avm2EventObject::bare_event(context, "removed", true, false);
if let Err(e) = Avm2::dispatch_event(context, removed_evt, object) {
log::error!("Encountered AVM2 error when dispatching event: {}", e);
tracing::error!("Encountered AVM2 error when dispatching event: {}", e);
}
if child.is_on_stage(context) {
@ -66,7 +66,7 @@ pub fn dispatch_added_to_stage_event_only<'gc>(
let added_evt = Avm2EventObject::bare_default_event(context, "addedToStage");
if let Err(e) = Avm2::dispatch_event(context, added_evt, object) {
log::error!("Encountered AVM2 error when dispatching event: {}", e);
tracing::error!("Encountered AVM2 error when dispatching event: {}", e);
}
}
}
@ -96,7 +96,7 @@ pub fn dispatch_added_event_only<'gc>(
let added_evt = Avm2EventObject::bare_event(context, "added", true, false);
if let Err(e) = Avm2::dispatch_event(context, added_evt, object) {
log::error!("Encountered AVM2 error when dispatching event: {}", e);
tracing::error!("Encountered AVM2 error when dispatching event: {}", e);
}
}
}

View File

@ -1318,7 +1318,7 @@ impl<'gc> EditText<'gc> {
// This makes it so that the TextField's handlers are called before other listeners'.
listeners.set_element(activation, 0, object.into()).unwrap();
} else {
log::warn!("_listeners should be empty");
tracing::warn!("_listeners should be empty");
}
}
}
@ -1384,7 +1384,7 @@ impl<'gc> EditText<'gc> {
let object: Avm2Object<'gc> = object.into();
self.0.write(activation.context.gc_context).object = Some(object.into())
}
Err(e) => log::error!(
Err(e) => tracing::error!(
"Got {} when constructing AVM2 side of dynamic text field",
e
),

View File

@ -155,7 +155,9 @@ impl<'gc> TDisplayObject<'gc> for Graphic<'gc> {
Ok(object) => {
self.0.write(activation.context.gc_context).avm2_object = Some(object.into())
}
Err(e) => log::error!("Got {} when constructing AVM2 side of display object", e),
Err(e) => {
tracing::error!("Got {} when constructing AVM2 side of display object", e)
}
}
self.on_construction_complete(context);
@ -172,7 +174,7 @@ impl<'gc> TDisplayObject<'gc> for Graphic<'gc> {
{
self.0.write(context.gc_context).static_data = new_graphic.0.read().static_data;
} else {
log::warn!("PlaceObject: expected Graphic at character ID {}", id);
tracing::warn!("PlaceObject: expected Graphic at character ID {}", id);
}
}

View File

@ -236,7 +236,7 @@ pub trait TInteractiveObject<'gc>:
);
if let Err(e) = Avm2::dispatch_event(&mut activation.context, avm2_event, target) {
log::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
tracing::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
}
ClipEventResult::Handled
@ -251,7 +251,7 @@ pub trait TInteractiveObject<'gc>:
);
if let Err(e) = Avm2::dispatch_event(&mut activation.context, avm2_event, target) {
log::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
tracing::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
}
ClipEventResult::Handled
@ -282,7 +282,7 @@ pub trait TInteractiveObject<'gc>:
if let Err(e) =
Avm2::dispatch_event(&mut activation.context, avm2_event, target)
{
log::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
tracing::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
}
self.raw_interactive_mut(context.gc_context).last_click = None;
@ -298,7 +298,7 @@ pub trait TInteractiveObject<'gc>:
if let Err(e) =
Avm2::dispatch_event(&mut activation.context, avm2_event, target)
{
log::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
tracing::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
}
self.raw_interactive_mut(context.gc_context).last_click = Some(this_click);
@ -316,7 +316,7 @@ pub trait TInteractiveObject<'gc>:
);
if let Err(e) = Avm2::dispatch_event(&mut activation.context, avm2_event, target) {
log::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
tracing::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
}
self.raw_interactive_mut(context.gc_context).last_click = None;
@ -333,7 +333,7 @@ pub trait TInteractiveObject<'gc>:
);
if let Err(e) = Avm2::dispatch_event(&mut activation.context, avm2_event, target) {
log::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
tracing::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
}
let lca = lowest_common_ancestor(
@ -355,7 +355,11 @@ pub trait TInteractiveObject<'gc>:
if let Err(e) =
Avm2::dispatch_event(&mut activation.context, avm2_event, avm2_target)
{
log::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
tracing::error!(
"Got error when dispatching {:?} to AVM2: {}",
event,
e
);
}
}
@ -386,7 +390,11 @@ pub trait TInteractiveObject<'gc>:
if let Err(e) =
Avm2::dispatch_event(&mut activation.context, avm2_event, avm2_target)
{
log::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
tracing::error!(
"Got error when dispatching {:?} to AVM2: {}",
event,
e
);
}
}
@ -402,7 +410,7 @@ pub trait TInteractiveObject<'gc>:
);
if let Err(e) = Avm2::dispatch_event(&mut activation.context, avm2_event, target) {
log::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
tracing::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
}
ClipEventResult::Handled
@ -417,7 +425,7 @@ pub trait TInteractiveObject<'gc>:
);
if let Err(e) = Avm2::dispatch_event(&mut activation.context, avm2_event, target) {
log::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
tracing::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
}
ClipEventResult::Handled
@ -432,7 +440,7 @@ pub trait TInteractiveObject<'gc>:
);
if let Err(e) = Avm2::dispatch_event(&mut activation.context, avm2_event, target) {
log::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
tracing::error!("Got error when dispatching {:?} to AVM2: {}", event, e);
}
ClipEventResult::Handled

View File

@ -90,7 +90,7 @@ impl<'gc> TDisplayObject<'gc> for MorphShape<'gc> {
{
self.0.write(context.gc_context).static_data = new_morph_shape.0.read().static_data;
} else {
log::warn!("PlaceObject: expected morph shape at character ID {}", id);
tracing::warn!("PlaceObject: expected morph shape at character ID {}", id);
}
}
@ -132,7 +132,7 @@ impl<'gc> TDisplayObject<'gc> for MorphShape<'gc> {
&local_matrix,
);
} else {
log::warn!("Missing ratio for morph shape");
tracing::warn!("Missing ratio for morph shape");
}
}
@ -434,7 +434,7 @@ fn lerp_fill(start: &swf::FillStyle, end: &swf::FillStyle, a: f32, b: f32) -> sw
// If you happened to make, say, a solid color-to-radial gradient tween in the IDE, this would get baked down into
// a radial-to-radial gradient on export.
_ => {
log::warn!(
tracing::warn!(
"Unexpected morph shape fill style combination: {:#?}, {:#?}",
start,
end

View File

@ -412,7 +412,7 @@ impl<'gc> MovieClip<'gc> {
}
}
Some(unk) => {
log::error!(
tracing::error!(
"Symbol {} changed to unexpected type {:?}",
cur_preload_symbol,
unk
@ -424,7 +424,7 @@ impl<'gc> MovieClip<'gc> {
.cur_preload_symbol = None;
}
None => {
log::error!(
tracing::error!(
"Symbol {} disappeared during preloading",
cur_preload_symbol
);
@ -671,7 +671,7 @@ impl<'gc> MovieClip<'gc> {
tag_len: usize,
) -> Result<(), Error> {
if context.is_action_script_3() {
log::warn!("DoInitAction tag in AVM2 movie");
tracing::warn!("DoInitAction tag in AVM2 movie");
return Ok(());
}
@ -703,7 +703,7 @@ impl<'gc> MovieClip<'gc> {
reader: &mut SwfStream<'_>,
) -> Result<(), Error> {
if !context.is_action_script_3() {
log::warn!("DoABC tag in AVM1 movie");
tracing::warn!("DoABC tag in AVM1 movie");
return Ok(());
}
@ -713,7 +713,7 @@ impl<'gc> MovieClip<'gc> {
let domain = context.library.library_for_movie_mut(movie).avm2_domain();
if let Err(e) = Avm2::do_abc(context, do_abc, domain) {
log::warn!("Error loading ABC file: {}", e);
tracing::warn!("Error loading ABC file: {}", e);
}
}
@ -791,7 +791,7 @@ impl<'gc> MovieClip<'gc> {
);
}
_ => {
log::warn!(
tracing::warn!(
"Symbol class {} cannot be assigned to invalid character id {}",
class_name,
id
@ -800,7 +800,7 @@ impl<'gc> MovieClip<'gc> {
}
}
}
Err(e) => log::warn!(
Err(e) => tracing::warn!(
"Got AVM2 error {} when attempting to assign symbol class {}",
e,
class_name
@ -1402,7 +1402,7 @@ impl<'gc> MovieClip<'gc> {
};
if let Err(e) = self.remove_object(context, &mut reader, version) {
log::error!("Error running queued tag: {:?}, got {}", tag.tag_type, e);
tracing::error!("Error running queued tag: {:?}, got {}", tag.tag_type, e);
}
}
@ -1502,7 +1502,7 @@ impl<'gc> MovieClip<'gc> {
Some(child)
}
Err(e) => {
log::error!(
tracing::error!(
"Unable to instantiate display node id {}, reason being: {}",
id,
e
@ -1583,7 +1583,7 @@ impl<'gc> MovieClip<'gc> {
is_implicit: bool,
) {
if cfg!(feature = "timeline_debug") {
log::debug!(
tracing::debug!(
"[{}]: {} from frame {} to frame {}",
self.name(),
if is_implicit { "looping" } else { "goto" },
@ -1787,7 +1787,7 @@ impl<'gc> MovieClip<'gc> {
}
}
_ => {
log::error!(
tracing::error!(
"Unexpected PlaceObject during goto: {:?}",
params.place_object
)
@ -2000,7 +2000,7 @@ impl<'gc> MovieClip<'gc> {
if let Ok(object) = result {
self.0.write(context.gc_context).object = Some(object.into());
} else if let Err(e) = result {
log::error!("Got {} when allocating AVM2 side of display object", e);
tracing::error!("Got {} when allocating AVM2 side of display object", e);
}
}
@ -2026,7 +2026,7 @@ impl<'gc> MovieClip<'gc> {
let result: Result<(), Avm2Error> = constr_thing();
if let Err(e) = result {
log::error!(
tracing::error!(
"Got {} when constructing AVM2 side of movie clip of type {}",
e,
class_object
@ -2264,7 +2264,7 @@ impl<'gc> TDisplayObject<'gc> for MovieClip<'gc> {
};
if let Err(e) = self.place_object(context, &mut reader, version) {
log::error!("Error running queued tag: {:?}, got {}", tag.tag_type, e);
tracing::error!("Error running queued tag: {:?}, got {}", tag.tag_type, e);
}
}
}
@ -2358,7 +2358,7 @@ impl<'gc> TDisplayObject<'gc> for MovieClip<'gc> {
&[],
context,
) {
log::error!(
tracing::error!(
"Error occured when running AVM2 frame script: {}",
e
);
@ -3044,13 +3044,13 @@ impl<'gc, 'a> MovieClipData<'gc> {
edit_text.set_render_settings(context.gc_context, settings.into());
}
Some(_) => {
log::warn!(
tracing::warn!(
"Tried to apply CSMTextSettings to non-text character ID {}",
settings.id
);
}
None => {
log::warn!(
tracing::warn!(
"Tried to apply CSMTextSettings to unregistered character ID {}",
settings.id
);
@ -3223,13 +3223,13 @@ impl<'gc, 'a> MovieClipData<'gc> {
button.set_colors(context.gc_context, &button_colors.color_transforms[..]);
}
Some(_) => {
log::warn!(
tracing::warn!(
"DefineButtonCxform: Tried to apply on non-button ID {}",
button_colors.id
);
}
None => {
log::warn!(
tracing::warn!(
"DefineButtonCxform: Character ID {} doesn't exist",
button_colors.id
);
@ -3254,13 +3254,13 @@ impl<'gc, 'a> MovieClipData<'gc> {
button.set_sounds(context.gc_context, button_sounds);
}
Some(_) => {
log::warn!(
tracing::warn!(
"DefineButtonSound: Tried to apply on non-button ID {}",
button_sounds.id
);
}
None => {
log::warn!(
tracing::warn!(
"DefineButtonSound: Character ID {} doesn't exist",
button_sounds.id
);
@ -3375,7 +3375,7 @@ impl<'gc, 'a> MovieClipData<'gc> {
_context: &mut UpdateContext<'_, 'gc, '_>,
_reader: &mut SwfStream<'a>,
) -> Result<(), Error> {
log::warn!("DefineFont4 tag (TLF text) is not implemented");
tracing::warn!("DefineFont4 tag (TLF text) is not implemented");
Ok(())
}
@ -3392,7 +3392,7 @@ impl<'gc, 'a> MovieClipData<'gc> {
.library_for_movie_mut(self.movie())
.register_character(sound.id, Character::Sound(handle));
} else {
log::error!(
tracing::error!(
"MovieClip::define_sound: Unable to register sound ID {}",
sound.id
);
@ -3557,7 +3557,7 @@ impl<'gc, 'a> MovieClipData<'gc> {
{
v.insert(cur_frame);
} else {
log::warn!("Movie clip {}: Duplicated frame label", self.id());
tracing::warn!("Movie clip {}: Duplicated frame label", self.id());
}
Ok(())
}
@ -3624,7 +3624,7 @@ impl<'gc, 'a> MovieClip<'gc> {
tag_len: usize,
) -> Result<(), Error> {
if context.is_action_script_3() {
log::warn!("DoAction tag in AVM2 movie");
tracing::warn!("DoAction tag in AVM2 movie");
return Ok(());
}

View File

@ -618,7 +618,7 @@ impl<'gc> Stage<'gc> {
} else if let Avm2Value::Object(stage) = self.object2() {
let resized_event = Avm2EventObject::bare_default_event(context, "resize");
if let Err(e) = crate::avm2::Avm2::dispatch_event(context, resized_event, stage) {
log::error!("Encountered AVM2 error when dispatching event: {}", e);
tracing::error!("Encountered AVM2 error when dispatching event: {}", e);
}
}
}
@ -650,7 +650,7 @@ impl<'gc> Stage<'gc> {
.unwrap(); // we don't expect to break here
if let Err(e) = crate::avm2::Avm2::dispatch_event(context, full_screen_event, stage) {
log::error!("Encountered AVM2 error when dispatching event: {}", e);
tracing::error!("Encountered AVM2 error when dispatching event: {}", e);
}
}
}
@ -711,7 +711,7 @@ impl<'gc> TDisplayObject<'gc> for Stage<'gc> {
write.avm2_object = avm2_stage.into();
write.stage3ds = vec![stage3d];
}
Err(e) => log::error!("Unable to construct AVM2 Stage: {}", e),
Err(e) => tracing::error!("Unable to construct AVM2 Stage: {}", e),
}
}
@ -766,7 +766,7 @@ impl<'gc> TDisplayObject<'gc> for Stage<'gc> {
let dobject_constr = context.avm2.classes().display_object;
if let Err(e) = Avm2::broadcast_event(context, enter_frame_evt, dobject_constr) {
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting enterFrame event: {}",
e
);

View File

@ -103,7 +103,7 @@ impl<'gc> TDisplayObject<'gc> for Text<'gc> {
{
self.0.write(context.gc_context).static_data = new_text.0.read().static_data;
} else {
log::warn!("PlaceObject: expected text at character ID {}", id);
tracing::warn!("PlaceObject: expected text at character ID {}", id);
}
}
@ -254,7 +254,7 @@ impl<'gc> TDisplayObject<'gc> for Text<'gc> {
Ok(object) => {
self.0.write(activation.context.gc_context).avm2_object = Some(object.into())
}
Err(e) => log::error!("Got error when creating AVM2 side of Text: {}", e),
Err(e) => tracing::error!("Got error when creating AVM2 side of Text: {}", e),
}
self.on_construction_complete(context);

View File

@ -152,7 +152,7 @@ impl<'gc> Video<'gc> {
let subslice = SwfSlice::from(movie.clone()).to_unbounded_subslice(tag.data);
if frames.contains_key(&tag.frame_num.into()) {
log::warn!("Duplicate frame {}", tag.frame_num);
tracing::warn!("Duplicate frame {}", tag.frame_num);
}
frames.insert(tag.frame_num.into(), (subslice.start, subslice.end));
@ -245,7 +245,7 @@ impl<'gc> Video<'gc> {
let stream = if let VideoStream::Instantiated(stream) = &read.stream {
stream
} else {
log::error!("Attempted to seek uninstantiated video stream.");
tracing::error!("Attempted to seek uninstantiated video stream.");
return;
};
@ -281,7 +281,7 @@ impl<'gc> Video<'gc> {
Ok(bitmap) => {
self.0.write(context.gc_context).decoded_frame = Some((frame_id, bitmap));
}
Err(e) => log::error!("Got error when seeking to video frame {}: {}", frame_id, e),
Err(e) => tracing::error!("Got error when seeking to video frame {}: {}", frame_id, e),
}
}
}
@ -335,7 +335,7 @@ impl<'gc> TDisplayObject<'gc> for Video<'gc> {
streamdef.deblocking,
);
if stream.is_err() {
log::error!(
tracing::error!(
"Got error when post-instantiating video: {}",
stream.unwrap_err()
);
@ -361,7 +361,7 @@ impl<'gc> TDisplayObject<'gc> for Video<'gc> {
}
Ok(_) => {}
Err(e) => {
log::error!("Got error when pre-loading video frame: {}", e);
tracing::error!("Got error when pre-loading video frame: {}", e);
}
}
}
@ -373,7 +373,7 @@ impl<'gc> TDisplayObject<'gc> for Video<'gc> {
let starting_seek = if let VideoStream::Uninstantiated(seek_to) = write.stream {
seek_to
} else {
log::warn!("Reinstantiating already-instantiated video stream!");
tracing::warn!("Reinstantiating already-instantiated video stream!");
0
};
@ -413,7 +413,7 @@ impl<'gc> TDisplayObject<'gc> for Video<'gc> {
let object: Avm2Object<'gc> = object.into();
self.0.write(context.gc_context).object = Some(object.into())
}
Err(e) => log::error!("Got {} when constructing AVM2 side of video player", e),
Err(e) => tracing::error!("Got {} when constructing AVM2 side of video player", e),
}
self.on_construction_complete(context);
@ -480,7 +480,7 @@ impl<'gc> TDisplayObject<'gc> for Video<'gc> {
.commands
.render_bitmap(&bitmap.handle, &transform, smoothing);
} else {
log::warn!("Video has no decoded frame to render.");
tracing::warn!("Video has no decoded frame to render.");
}
context.transform_stack.pop();

View File

@ -204,7 +204,7 @@ impl Value {
.collect();
Value::List(values)
} else {
log::warn!("from_avm2 needs to be implemented for Avm2Value::Object");
tracing::warn!("from_avm2 needs to be implemented for Avm2Value::Object");
Value::Null
}
}
@ -220,7 +220,7 @@ impl Value {
Avm2Value::String(AvmString::new_utf8(activation.context.gc_context, value))
}
Value::Object(_values) => {
log::warn!("into_avm2 needs to be implemented for Value::Object");
tracing::warn!("into_avm2 needs to be implemented for Value::Object");
Avm2Value::Undefined
}
Value::List(values) => {

View File

@ -42,7 +42,7 @@ impl<'gc> FocusTracker<'gc> {
new.on_focus_changed(context.gc_context, true);
}
log::info!("Focus is now on {:?}", focused_element);
tracing::info!("Focus is now on {:?}", focused_element);
let level0 = context.stage.root_clip();
Avm1::notify_system_listeners(

View File

@ -618,7 +618,7 @@ impl FormatSpans {
let attributes = match attributes {
Ok(attributes) => attributes,
Err(e) => {
log::warn!("Error while parsing HTML: {}", e);
tracing::warn!("Error while parsing HTML: {}", e);
return Default::default();
}
};
@ -799,7 +799,7 @@ impl FormatSpans {
}
Ok(Event::Eof) => break,
Err(e) => {
log::warn!("Error while parsing HTML: {}", e);
tracing::warn!("Error while parsing HTML: {}", e);
break;
}
_ => {}

View File

@ -126,7 +126,7 @@ impl<'gc> MovieLibrary<'gc> {
self.characters.insert(id, character);
} else {
log::error!("Character ID collision: Tried to register ID {} twice", id);
tracing::error!("Character ID collision: Tried to register ID {} twice", id);
}
}
@ -142,7 +142,7 @@ impl<'gc> MovieLibrary<'gc> {
.insert(export_name, character.clone(), false);
Some(character)
} else {
log::warn!(
tracing::warn!(
"Can't register export {}: Character ID {} doesn't exist",
export_name,
id,
@ -173,7 +173,7 @@ impl<'gc> MovieLibrary<'gc> {
if let Some(character) = self.characters.get(&id) {
self.instantiate_display_object(character, gc_context)
} else {
log::error!("Tried to instantiate non-registered character ID {}", id);
tracing::error!("Tried to instantiate non-registered character ID {}", id);
Err("Character id doesn't exist")
}
}
@ -188,7 +188,7 @@ impl<'gc> MovieLibrary<'gc> {
if let Some(character) = self.export_characters.get(export_name, false) {
self.instantiate_display_object(character, gc_context)
} else {
log::error!(
tracing::error!(
"Tried to instantiate non-registered character {}",
export_name
);
@ -290,7 +290,7 @@ impl<'gc> MovieLibrary<'gc> {
if self.jpeg_tables.is_some() {
// SWF spec says there should only be one JPEGTables tag.
// TODO: What is the behavior when there are multiples?
log::warn!("SWF contains multiple JPEGTables tags");
tracing::warn!("SWF contains multiple JPEGTables tags");
return;
}
// Some SWFs have a JPEGTables tag with 0 length; ignore these.

View File

@ -439,7 +439,7 @@ impl<'gc> LoadManager<'gc> {
if matches!(status, Some(LoaderStatus::Parsing)) {
match Loader::preload_tick(handle, context, limit) {
Ok(f) => did_finish = did_finish && f,
Err(e) => log::error!("Error encountered while preloading movie: {}", e),
Err(e) => tracing::error!("Error encountered while preloading movie: {}", e),
}
}
}
@ -602,7 +602,7 @@ impl<'gc> Loader<'gc> {
if target_clip.as_movie_clip().is_none() {
// Non-movie-clip loads should not be handled in preload_tick
log::error!("Cannot preload non-movie-clip loader");
tracing::error!("Cannot preload non-movie-clip loader");
return Ok(false);
}
@ -783,7 +783,7 @@ impl<'gc> Loader<'gc> {
)?;
}
Err(e) => {
log::error!("Error during movie loading: {:?}", e);
tracing::error!("Error during movie loading: {:?}", e);
player.lock().unwrap().update(|uc| -> Result<(), Error> {
Loader::movie_loader_error(handle, uc)
})?;
@ -1046,7 +1046,7 @@ impl<'gc> Loader<'gc> {
&body,
)),
DataFormat::Variables => {
log::warn!(
tracing::warn!(
"Support for URLLoaderDataFormat.VARIABLES not yet implemented"
);
Avm2Value::Undefined
@ -1075,7 +1075,7 @@ impl<'gc> Loader<'gc> {
if let Err(e) =
Avm2::dispatch_event(&mut activation.context, open_evt, target)
{
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting `open` event: {}",
e
);
@ -1089,7 +1089,7 @@ impl<'gc> Loader<'gc> {
);
if let Err(e) = Avm2::dispatch_event(uc, complete_evt, target) {
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting `complete` event: {}",
e
);
@ -1118,7 +1118,7 @@ impl<'gc> Loader<'gc> {
.map_err(|e| Error::Avm2Error(e.to_string()))?;
if let Err(e) = Avm2::dispatch_event(uc, io_error_evt, target) {
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting `ioError` event: {}",
e
);
@ -1235,7 +1235,7 @@ impl<'gc> Loader<'gc> {
if let Err(e) =
Avm2::dispatch_event(&mut activation.context, open_evt, sound_object)
{
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting `open` event: {}",
e
);
@ -1246,7 +1246,7 @@ impl<'gc> Loader<'gc> {
"complete",
);
if let Err(e) = Avm2::dispatch_event(uc, complete_evt, sound_object) {
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting `complete` event: {}",
e
);
@ -1270,7 +1270,7 @@ impl<'gc> Loader<'gc> {
.map_err(|e| Error::Avm2Error(e.to_string()))?;
if let Err(e) = Avm2::dispatch_event(uc, io_error_evt, sound_object) {
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting `ioError` event: {}",
e
);
@ -1316,7 +1316,7 @@ impl<'gc> Loader<'gc> {
let open_evt = Avm2EventObject::bare_default_event(&mut activation.context, "open");
if let Err(e) = Avm2::dispatch_event(uc, open_evt, loader_info) {
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting `open` event: {}",
e
);
@ -1527,7 +1527,7 @@ impl<'gc> Loader<'gc> {
.map_err(|e| Error::Avm2Error(e.to_string()))?;
if let Err(e) = Avm2::dispatch_event(uc, progress_evt, loader_info) {
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting `progress` event: {}",
e
);
@ -1640,7 +1640,7 @@ impl<'gc> Loader<'gc> {
.map_err(|e| Error::Avm2Error(e.to_string()))?;
if let Err(e) = Avm2::dispatch_event(uc, io_error_evt, loader_info) {
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting `ioError` event: {}",
e
);

View File

@ -42,7 +42,6 @@ use crate::timer::Timers;
use crate::vminterface::Instantiator;
use gc_arena::{make_arena, ArenaParameters, Collect, GcCell};
use instant::Instant;
use log::info;
use rand::{rngs::SmallRng, SeedableRng};
use ruffle_render::backend::{null::NullRenderer, RenderBackend, ViewportDimensions};
use ruffle_render::commands::CommandList;
@ -55,6 +54,7 @@ use std::rc::{Rc, Weak as RcWeak};
use std::str::FromStr;
use std::sync::{Arc, Mutex, Weak};
use std::time::Duration;
use tracing::info;
/// The newest known Flash Player version, serves as a default to
/// `player_version`.
@ -585,7 +585,7 @@ impl Player {
crate::avm1::make_context_menu_state(menu_object, &mut activation)
} else if let Avm2Value::Object(_obj) = root_dobj.object2() {
// TODO: send "menuSelect" event
log::warn!("AVM2 Context menu callbacks are not implemented");
tracing::warn!("AVM2 Context menu callbacks are not implemented");
let mut activation = Avm2Activation::from_nothing(context.reborrow());
@ -858,7 +858,7 @@ impl Player {
&mut activation,
);
}
log::info!("Variable dump:\n{}", dumper.output());
tracing::info!("Variable dump:\n{}", dumper.output());
});
}
PlayerEvent::KeyDown {
@ -869,13 +869,15 @@ impl Player {
{
self.mutate_with_update_context(|context| {
if context.avm1.show_debug_output() {
log::info!(
tracing::info!(
"AVM Debugging turned off! Press CTRL+ALT+D to turn on again."
);
context.avm1.set_show_debug_output(false);
context.avm2.set_show_debug_output(false);
} else {
log::info!("AVM Debugging turned on! Press CTRL+ALT+D to turn off.");
tracing::info!(
"AVM Debugging turned on! Press CTRL+ALT+D to turn off."
);
context.avm1.set_show_debug_output(true);
context.avm2.set_show_debug_output(true);
}
@ -997,7 +999,7 @@ impl Player {
if let Err(e) =
Avm2::dispatch_event(&mut activation.context, keyboard_event, target)
{
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting `{}` event: {}",
event_name,
e
@ -1405,7 +1407,7 @@ impl Player {
);
match progress_evt {
Err(e) => log::error!(
Err(e) => tracing::error!(
"Encountered AVM2 error when broadcasting `progress` event: {}",
e
),
@ -1413,7 +1415,7 @@ impl Player {
if let Err(e) =
Avm2::dispatch_event(context, progress_evt, loader_info)
{
log::error!(
tracing::error!(
"Encountered AVM2 error when broadcasting `progress` event: {}",
e
);
@ -1646,14 +1648,14 @@ impl Player {
if let Err(e) =
Avm2::run_stack_frame_for_callable(callable, reciever, &args[..], context)
{
log::error!("Unhandled AVM2 exception in event handler: {}", e);
tracing::error!("Unhandled AVM2 exception in event handler: {}", e);
}
}
ActionType::Event2 { event_type, target } => {
let event = Avm2EventObject::bare_default_event(context, event_type);
if let Err(e) = Avm2::dispatch_event(context, event, target) {
log::error!("Unhandled AVM2 exception in event handler: {}", e);
tracing::error!("Unhandled AVM2 exception in event handler: {}", e);
}
}
}
@ -1815,7 +1817,7 @@ impl Player {
Activation::from_stub(context.reborrow(), ActivationIdentifier::root("[Flush]"));
for so in avm1_activation.context.avm1_shared_objects.clone().values() {
if let Err(e) = crate::avm1::flush(&mut avm1_activation, *so, &[]) {
log::error!("Error flushing AVM1 shared object `{:?}`: {:?}", so, e);
tracing::error!("Error flushing AVM1 shared object `{:?}`: {:?}", so, e);
}
}
@ -1827,7 +1829,7 @@ impl Player {
Some(*so),
&[],
) {
log::error!("Error flushing AVM2 shared object `{:?}`: {:?}", so, e);
tracing::error!("Error flushing AVM2 shared object `{:?}`: {:?}", so, e);
}
}
});

View File

@ -2,12 +2,12 @@ pub use crate::avm2::Value as Avm2Value;
pub use crate::display_object::{
DisplayObject, DisplayObjectContainer, HitTestOptions, TDisplayObject, TDisplayObjectContainer,
};
pub use log::{error, info, trace, warn};
pub use ruffle_render::bounding_box::BoundingBox;
pub use ruffle_render::color_transform::ColorTransform;
pub use ruffle_render::matrix::Matrix;
pub use std::ops::{Bound, RangeBounds};
pub use swf::{CharacterId, Color, Twips};
pub use tracing::{error, info, trace, warn};
/// A depth for a Flash display object in AVM1.
/// This is different than defined in `swf`; during execution, clips

View File

@ -385,7 +385,7 @@ where
loop {
let (tag_code, tag_len) = reader.read_tag_code_and_length()?;
if tag_len > reader.get_ref().len() {
log::error!("Unexpected EOF when reading tag");
tracing::error!("Unexpected EOF when reading tag");
*reader.get_mut() = &reader.get_ref()[reader.get_ref().len()..];
return Ok(false);
}
@ -398,7 +398,7 @@ where
match result {
Err(e) => {
log::error!("Error running definition tag: {:?}, got {}", tag, e)
tracing::error!("Error running definition tag: {:?}, got {}", tag, e)
}
Ok(ControlFlow::Exit) => {
*reader.get_mut() = end_slice;
@ -407,7 +407,7 @@ where
Ok(ControlFlow::Continue) => {}
}
} else {
log::warn!("Unknown tag code: {:?}", tag_code);
tracing::warn!("Unknown tag code: {:?}", tag_code);
}
*reader.get_mut() = end_slice;

View File

@ -92,7 +92,7 @@ impl<'gc> Timers<'gc> {
);
if let Err(e) = result {
log::error!("Unhandled AVM1 error in timer callback: {}", e);
tracing::error!("Unhandled AVM1 error in timer callback: {}", e);
}
false
@ -110,7 +110,7 @@ impl<'gc> Timers<'gc> {
);
if let Err(e) = result {
log::error!("Unhandled AVM1 error in timer callback: {}", e);
tracing::error!("Unhandled AVM1 error in timer callback: {}", e);
}
false
@ -121,7 +121,7 @@ impl<'gc> Timers<'gc> {
match closure.call(None, &params, &mut avm2_activation) {
Ok(v) => v.coerce_to_boolean(),
Err(e) => {
log::error!("Unhandled AVM2 error in timer callback: {}", e);
tracing::error!("Unhandled AVM2 error in timer callback: {}", e);
false
}
}