Bug 1436058 - Update for log 0.4 bump in WR PR 2385. r?jrmuizel draft
authorKartikaya Gupta <kgupta@mozilla.com>
Mon, 12 Feb 2018 11:32:50 -0500
changeset 753902 9790131af6798bf61b373102514a19c5256aaf70
parent 753901 111a4e0ad8d56fb5ec4b688972f6d8a1730f86ab
child 753903 78336e265760bae888c9fa807d4a5fa0cf370bf2
push id98716
push userkgupta@mozilla.com
push dateMon, 12 Feb 2018 16:43:47 +0000
reviewersjrmuizel
bugs1436058
milestone60.0a1
Bug 1436058 - Update for log 0.4 bump in WR PR 2385. r?jrmuizel MozReview-Commit-ID: Cxkecg2cTDW
gfx/webrender_bindings/WebRenderAPI.cpp
gfx/webrender_bindings/src/bindings.rs
gfx/webrender_bindings/webrender_ffi_generated.h
--- a/gfx/webrender_bindings/WebRenderAPI.cpp
+++ b/gfx/webrender_bindings/WebRenderAPI.cpp
@@ -236,17 +236,17 @@ TransactionBuilder::UpdateScrollPosition
 }
 
 
 /*static*/ void
 WebRenderAPI::InitExternalLogHandler()
 {
   // Redirect the webrender's log to gecko's log system.
   // The current log level is "error".
-  mozilla::wr::wr_init_external_log_handler(wr::LogLevelFilter::Error);
+  mozilla::wr::wr_init_external_log_handler(wr::WrLogLevelFilter::Error);
 }
 
 /*static*/ void
 WebRenderAPI::ShutdownExternalLogHandler()
 {
   mozilla::wr::wr_shutdown_external_log_handler();
 }
 
--- a/gfx/webrender_bindings/src/bindings.rs
+++ b/gfx/webrender_bindings/src/bindings.rs
@@ -13,17 +13,17 @@ use webrender::{ExternalImage, ExternalI
 use webrender::DebugFlags;
 use webrender::{ApiRecordingReceiver, BinaryRecorder};
 use webrender::{ProgramCache, UploadMethod, VertexUsageHint};
 use thread_profiler::register_thread_with_profiler;
 use moz2d_renderer::Moz2dImageRenderer;
 use app_units::Au;
 use rayon;
 use euclid::SideOffsets2D;
-use log::{set_logger, shutdown_logger, LogLevelFilter, Log, LogLevel, LogMetadata, LogRecord};
+use log;
 
 #[cfg(target_os = "windows")]
 use dwrote::{FontDescriptor, FontWeight, FontStretch, FontStyle};
 
 #[cfg(target_os = "macos")]
 use core_foundation::string::CFString;
 #[cfg(target_os = "macos")]
 use core_graphics::font::CGFont;
@@ -71,17 +71,17 @@ type WrPipelineId = PipelineId;
 type WrImageKey = ImageKey;
 /// cbindgen:field-names=[mNamespace, mHandle]
 pub type WrFontKey = FontKey;
 /// cbindgen:field-names=[mNamespace, mHandle]
 type WrFontInstanceKey = FontInstanceKey;
 /// cbindgen:field-names=[mNamespace, mHandle]
 type WrYuvColorSpace = YuvColorSpace;
 /// cbindgen:field-names=[mNamespace, mHandle]
-type WrLogLevelFilter = LogLevelFilter;
+type WrLogLevelFilter = log::LevelFilter;
 
 fn make_slice<'a, T>(ptr: *const T, len: usize) -> &'a [T] {
     if ptr.is_null() {
         &[]
     } else {
         unsafe { slice::from_raw_parts(ptr, len) }
     }
 }
@@ -2156,60 +2156,62 @@ extern "C" {
 type ExternalMessageHandler = unsafe extern "C" fn(msg: *const c_char);
 
 struct WrExternalLogHandler {
     error_msg: ExternalMessageHandler,
     warn_msg: ExternalMessageHandler,
     info_msg: ExternalMessageHandler,
     debug_msg: ExternalMessageHandler,
     trace_msg: ExternalMessageHandler,
-    log_level: LogLevel,
+    log_level: log::Level,
 }
 
 impl WrExternalLogHandler {
-    fn new(log_level: LogLevel) -> WrExternalLogHandler {
+    fn new(log_level: log::Level) -> WrExternalLogHandler {
         WrExternalLogHandler {
             error_msg: gfx_critical_note,
             warn_msg: gfx_critical_note,
             info_msg: gecko_printf_stderr_output,
             debug_msg: gecko_printf_stderr_output,
             trace_msg: gecko_printf_stderr_output,
             log_level: log_level,
         }
     }
 }
 
-impl Log for WrExternalLogHandler {
-    fn enabled(&self, metadata : &LogMetadata) -> bool {
+impl log::Log for WrExternalLogHandler {
+    fn enabled(&self, metadata : &log::Metadata) -> bool {
         metadata.level() <= self.log_level
     }
 
-    fn log(&self, record: &LogRecord) {
+    fn log(&self, record: &log::Record) {
         if self.enabled(record.metadata()) {
             // For file path and line, please check the record.location().
             let msg = CString::new(format!("WR: {}",
                                            record.args())).unwrap();
             unsafe {
                 match record.level() {
-                    LogLevel::Error => (self.error_msg)(msg.as_ptr()),
-                    LogLevel::Warn => (self.warn_msg)(msg.as_ptr()),
-                    LogLevel::Info => (self.info_msg)(msg.as_ptr()),
-                    LogLevel::Debug => (self.debug_msg)(msg.as_ptr()),
-                    LogLevel::Trace => (self.trace_msg)(msg.as_ptr()),
+                    log::Level::Error => (self.error_msg)(msg.as_ptr()),
+                    log::Level::Warn => (self.warn_msg)(msg.as_ptr()),
+                    log::Level::Info => (self.info_msg)(msg.as_ptr()),
+                    log::Level::Debug => (self.debug_msg)(msg.as_ptr()),
+                    log::Level::Trace => (self.trace_msg)(msg.as_ptr()),
                 }
             }
         }
     }
+
+    fn flush(&self) {
+    }
 }
 
 #[no_mangle]
 pub extern "C" fn wr_init_external_log_handler(log_filter: WrLogLevelFilter) {
-    let _ = set_logger(|max_log_level| {
-        max_log_level.set(log_filter);
-        Box::new(WrExternalLogHandler::new(log_filter.to_log_level()
-                                                     .unwrap_or(LogLevel::Error)))
-    });
+    log::set_max_level(log_filter);
+    let logger = Box::new(WrExternalLogHandler::new(log_filter
+                                                    .to_level()
+                                                    .unwrap_or(log::Level::Error)));
+    let _ = log::set_logger(unsafe { &*Box::into_raw(logger) });
 }
 
 #[no_mangle]
 pub extern "C" fn wr_shutdown_external_log_handler() {
-    let _ = shutdown_logger();
 }
--- a/gfx/webrender_bindings/webrender_ffi_generated.h
+++ b/gfx/webrender_bindings/webrender_ffi_generated.h
@@ -96,57 +96,57 @@ enum class ImageFormat : uint32_t {
 enum class ImageRendering : uint32_t {
   Auto = 0,
   CrispEdges = 1,
   Pixelated = 2,
 
   Sentinel /* this must be last for serialization purposes. */
 };
 
+// An enum representing the available verbosity level filters of the logger.
+//
+// A `LevelFilter` may be compared directly to a [`Level`]. Use this type
+// to get and set the maximum log level with [`max_level()`] and [`set_max_level`].
+//
+// [`Level`]: enum.Level.html
+// [`max_level()`]: fn.max_level.html
+// [`set_max_level`]: fn.set_max_level.html
+enum class LevelFilter : uintptr_t {
+  // A level lower than all log levels.
+  Off = 0,
+  // Corresponds to the `Error` log level.
+  Error = 1,
+  // Corresponds to the `Warn` log level.
+  Warn = 2,
+  // Corresponds to the `Info` log level.
+  Info = 3,
+  // Corresponds to the `Debug` log level.
+  Debug = 4,
+  // Corresponds to the `Trace` log level.
+  Trace = 5,
+
+  Sentinel /* this must be last for serialization purposes. */
+};
+
 enum class LineOrientation : uint8_t {
   Vertical = 0,
   Horizontal = 1,
 
   Sentinel /* this must be last for serialization purposes. */
 };
 
 enum class LineStyle : uint8_t {
   Solid = 0,
   Dotted = 1,
   Dashed = 2,
   Wavy = 3,
 
   Sentinel /* this must be last for serialization purposes. */
 };
 
-// An enum representing the available verbosity level filters of the logging
-// framework.
-//
-// A `LogLevelFilter` may be compared directly to a [`LogLevel`](enum.LogLevel.html).
-// Use this type to [`get()`](struct.MaxLogLevelFilter.html#method.get) and
-// [`set()`](struct.MaxLogLevelFilter.html#method.set) the
-// [`MaxLogLevelFilter`](struct.MaxLogLevelFilter.html), or to match with the getter
-// [`max_log_level()`](fn.max_log_level.html).
-enum class LogLevelFilter : uintptr_t {
-  // A level lower than all log levels.
-  Off = 0,
-  // Corresponds to the `Error` log level.
-  Error = 1,
-  // Corresponds to the `Warn` log level.
-  Warn = 2,
-  // Corresponds to the `Info` log level.
-  Info = 3,
-  // Corresponds to the `Debug` log level.
-  Debug = 4,
-  // Corresponds to the `Trace` log level.
-  Trace = 5,
-
-  Sentinel /* this must be last for serialization purposes. */
-};
-
 enum class MixBlendMode : uint32_t {
   Normal = 0,
   Multiply = 1,
   Screen = 2,
   Overlay = 3,
   Darken = 4,
   Lighten = 5,
   ColorDodge = 6,
@@ -716,17 +716,17 @@ struct GlyphOptions {
   bool operator==(const GlyphOptions& aOther) const {
     return render_mode == aOther.render_mode &&
            flags == aOther.flags;
   }
 };
 
 using WrYuvColorSpace = YuvColorSpace;
 
-using WrLogLevelFilter = LogLevelFilter;
+using WrLogLevelFilter = LevelFilter;
 
 struct ByteSlice {
   const uint8_t *buffer;
   size_t len;
 
   bool operator==(const ByteSlice& aOther) const {
     return buffer == aOther.buffer &&
            len == aOther.len;