[vlc-commits] macosx: don't use NSNotifcations to feed debug messages to the interface

Felix Paul Kühne git at videolan.org
Sat Jul 23 15:30:43 CEST 2011


vlc | branch: master | Felix Paul Kühne <fkuehne at videolan.org> | Sat Jul 23 15:30:38 2011 +0200| [af7491b0e06c7c4cabb2854170e9cbbd97decc72] | committer: Felix Paul Kühne

macosx: don't use NSNotifcations to feed debug messages to the interface

that's hilariously slow and CPU intensive

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=af7491b0e06c7c4cabb2854170e9cbbd97decc72
---

 modules/gui/macosx/intf.h |    2 ++
 modules/gui/macosx/intf.m |   44 ++++++++++++++++----------------------------
 2 files changed, 18 insertions(+), 28 deletions(-)

diff --git a/modules/gui/macosx/intf.h b/modules/gui/macosx/intf.h
index a64637d..57a4edc 100644
--- a/modules/gui/macosx/intf.h
+++ b/modules/gui/macosx/intf.h
@@ -205,6 +205,8 @@ struct intf_sys_t
 - (IBAction)saveDebugLog:(id)sender;
 - (IBAction)showMessagesPanel:(id)sender;
 
+- (void)processReceivedlibvlcMessage:(const msg_item_t *)item;
+
 - (IBAction)togglePlaylist:(id)sender;
 - (void)updateTogglePlaylistState;
 
diff --git a/modules/gui/macosx/intf.m b/modules/gui/macosx/intf.m
index 81b028b..765d36c 100644
--- a/modules/gui/macosx/intf.m
+++ b/modules/gui/macosx/intf.m
@@ -112,6 +112,7 @@ static int WindowControl( vout_window_t *, int i_query, va_list );
 
 int WindowOpen( vout_window_t *p_wnd, const vout_window_cfg_t *cfg )
 {
+    NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
     intf_thread_t *p_intf = VLCIntf;
     if (!p_intf) {
         msg_Err( p_wnd, "Mac OS X interface not found" );
@@ -127,6 +128,7 @@ int WindowOpen( vout_window_t *p_wnd, const vout_window_cfg_t *cfg )
 
     if ( !p_wnd->handle.nsobject ) {
         msg_Err( p_wnd, "got no video view from the interface" );
+        [o_pool release];
         return VLC_EGENERIC;
     }
 
@@ -134,6 +136,7 @@ int WindowOpen( vout_window_t *p_wnd, const vout_window_cfg_t *cfg )
     [[VLCMainWindow sharedInstance] togglePlaylist:nil];
     p_wnd->control = WindowControl;
     p_wnd->sys = (vout_window_sys_t *)VLCIntf;
+    [o_pool release];
     return VLC_SUCCESS;
 }
 
@@ -153,9 +156,11 @@ static int WindowControl( vout_window_t *p_wnd, int i_query, va_list args )
 
 void WindowClose( vout_window_t *p_wnd )
 {
+    NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
     [[VLCMainWindow sharedInstance] setVideoplayEnabled:NO];
     NSLog( @"Window Close" );
     // tell the interface to get rid of the video, TODO
+    [o_pool release];
 }
 
 /*****************************************************************************
@@ -197,27 +202,20 @@ static void Run( intf_thread_t *p_intf )
 /*****************************************************************************
  * MsgCallback: Callback triggered by the core once a new debug message is
  * ready to be displayed. We store everything in a NSArray in our Cocoa part
- * of this file, so we are forwarding everything through notifications.
+ * of this file.
  *****************************************************************************/
 static void MsgCallback( msg_cb_data_t *data, const msg_item_t *item )
 {
     int canc = vlc_savecancel();
-    NSAutoreleasePool * o_pool = [[NSAutoreleasePool alloc] init];
 
     /* this may happen from time to time, let's bail out as info would be useless anyway */
     if( !item->psz_module || !item->psz_msg )
         return;
 
-    NSDictionary *o_dict = [NSDictionary dictionaryWithObjectsAndKeys:
-                                [NSString stringWithUTF8String: item->psz_module], @"Module",
-                                [NSString stringWithUTF8String: item->psz_msg], @"Message",
-                                [NSNumber numberWithInt: item->i_type], @"Type", nil];
-
-    [[NSNotificationCenter defaultCenter] postNotificationName: @"VLCCoreMessageReceived"
-                                                        object: nil
-                                                      userInfo: o_dict];
-
+    NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
+    [[VLCMain sharedInstance] processReceivedlibvlcMessage: item];
     [o_pool release];
+
     vlc_restorecancel( canc );
 }
 
@@ -1706,7 +1704,7 @@ end:
     }
 }
 
-- (void)libvlcMessageReceived: (NSNotification *)o_notification
+- (void)processReceivedlibvlcMessage:(const msg_item_t *)item
 {
     NSColor *o_white = [NSColor whiteColor];
     NSColor *o_red = [NSColor redColor];
@@ -1714,14 +1712,12 @@ end:
     NSColor *o_gray = [NSColor grayColor];
 
     NSColor * pp_color[4] = { o_white, o_red, o_yellow, o_gray };
-    static const char * ppsz_type[4] = { ": ", " error: ",
-    " warning: ", " debug: " };
+    static const char * ppsz_type[4] = { ": ", " error: ", " warning: ", " debug: " };
 
-    NSString *o_msg;
     NSDictionary *o_attr;
     NSAttributedString *o_msg_color;
 
-    int i_type = [[[o_notification userInfo] objectForKey: @"Type"] intValue];
+    int i_type = item->i_type;
 
     [o_msg_lock lock];
 
@@ -1731,20 +1727,12 @@ end:
         [o_msg_arr removeObjectAtIndex: 1];
     }
 
-    o_attr = [NSDictionary dictionaryWithObject: o_gray
-                                         forKey: NSForegroundColorAttributeName];
-    o_msg = [NSString stringWithFormat: @"%@%s",
-             [[o_notification userInfo] objectForKey: @"Module"],
-             ppsz_type[i_type]];
-    o_msg_color = [[NSAttributedString alloc]
-                   initWithString: o_msg attributes: o_attr];
+    o_attr = [NSDictionary dictionaryWithObject: o_gray forKey: NSForegroundColorAttributeName];
+    o_msg_color = [[NSAttributedString alloc] initWithString: [NSString stringWithFormat: @"%s%s", item->psz_module, ppsz_type[i_type]] attributes: o_attr];
     [o_msg_arr addObject: [o_msg_color autorelease]];
 
-    o_attr = [NSDictionary dictionaryWithObject: pp_color[i_type]
-                                         forKey: NSForegroundColorAttributeName];
-    o_msg = [[[o_notification userInfo] objectForKey: @"Message"] stringByAppendingString: @"\n"];
-    o_msg_color = [[NSAttributedString alloc]
-                   initWithString: o_msg attributes: o_attr];
+    o_attr = [NSDictionary dictionaryWithObject: pp_color[i_type] forKey: NSForegroundColorAttributeName];
+    o_msg_color = [[NSAttributedString alloc] initWithString: [NSString stringWithFormat: @"%s\n", item->psz_msg] attributes: o_attr];
     [o_msg_arr addObject: [o_msg_color autorelease]];
 
     b_msg_arr_changed = YES;



More information about the vlc-commits mailing list