Hi NWM! 
Thanks again for your patches, you keep sending them, we keep forgetting them.. 
lol, I hope this one will get into SVN. maybe a 
little modified.
At least, you seem to be getting the hang of Tcl, wasn't it easy? :) 
About the fast loading, here's what I think :
Currently, we have this schema :
file1.tcl :
proc ... { }
proc ... {}
proc ... {}
if { initialize_amsn == 1 } { ... } 

file2.tcl :
namespace {} 
proc ... {}
proc ... {}
if { initialize_amsn == 1 } { ... }

etc..

what would be nice to have is :

file1.tcl :
proc .. {}
proc ... {}

file2.tcl
namespace {}
proc ... {}
proc ... {}

bootstrap.tcl :
proc init_amsn {} {
# here goes all the code that was in initialize_amsn...
}


this way :
1 - no more 'source' order being important
2 - all the initialization will be done in one place AFTER all the files were 
source, so after ALL procs are already made 
available
3 - easier to rearrange stuff since procs are all loaded
4 - less error-prone.

So, if that could be done, it would be great, and a lot easier for you to make 
your patch work correctly!

p.s.: You know the amsn team is hiring, no ? ;)

KKRT


On Wed, Dec 06, 2006 at 03:54:18PM +0100, NoWhereMan wrote:
> hi all,
> 
> I've had a look at the code and tried to rearrange some of the
> commands to make amsn *feel* quicker at the startup.
> 
> Unfortunately all the dependencies in reload_files are needed, because
> of how the code in gui.tcl is; there were just two that could be
> loaded later, but it was too little. What I've done is change the
> command order in "amsn" and gui.tcl (proc cmsn_draw_main).
> 
> As a side effect if you set aMSN to start in tray it will flash opened
> until the bootstrap has finished, so you may not want to apply this
> patch anyway, if this is a problem.
> 
> A new proc have been added, cmsn_draw_loading, which is more or less a
> copy&paste of cmsn_draw_signin; a new key in language files, "loading"
> is now expected to exist. This will be shown under the signin image
> (you can change this, of course...)
> 
> Finally also the "amsn" script itself have been a little rearranged,
> and it prints some "loading" info to the console (just a few, doing
> this...done; doing that...done) you can remove that if you find it
> annoying.
> 
> cmsn_draw_offline is now called explictly from "amsn" once that other
> "loading/boot" actions have finished (beside the ones of
> cmsn_draw_main ;))
> 
> 
> Of course the bootstrap process IS NOT faster (it's probably a bit
> slower, because of the loading animation) but it should *feel* a
> little faster, because the window now appears as soon as it's
> possible.
> 
> time from first instruction to window shown
> ~3.262.543
> 
> using the patch:
> ~2.818.730
> 
> of course, not so much... btw it would depend on the processor, etc...
> 
> hope this helps
> 
> bye!

> Index: amsn
> ===================================================================
> --- amsn      (revisione 7572)
> +++ amsn      (copia locale)
> @@ -96,6 +96,7 @@
>  ### From here we need amsncore, so load it.
>  ############################################################
>  
> +
>  source amsncore.tcl
>  
>  
> @@ -166,6 +167,7 @@
>       }
>  }
>  
> +puts "initial setup done"
>  
>  proc reload_files { } {
>      uplevel \#0 {
> @@ -200,7 +202,7 @@
>       source groups.tcl       ;# Handle buddy groups
>  
>       if { [OnDarwin] } {
> -             source [file join utils macosx applescript ae.tcl];#AppleEvent 
> support
> +             #16source [file join utils macosx applescript 
> ae.tcl];#AppleEvent support
>       }
>       
>       source alarm.tcl        ;# Alarms code (Burger)
> @@ -224,29 +226,13 @@
>       }
>  }
>  
> +puts "loading source files..."
>  reload_files
> +puts "DONE"
>  
> +
>  set initialize_amsn 0
> -#///////////////////////////////////////////////////////////////////////
>  
> -if { [catch {package require tls}] } {
> -    # Either tls is not installed, or $auto_path does not point to it.
> -    # Should now never happen; the check for the presence of tls is made
> -    # before this point.
> -#    status_log "Could not find the package tls on this system.\n"
> -    set tlsinstalled 0
> -} else {
> -    set tlsinstalled 1
> -}
> -
> -#create_dir $HOME
> -set log_dir "[file join ${HOME} logs]"
> -set webcam_dir "[file join ${HOME} webcam]"
> -create_dir $log_dir
> -create_dir $webcam_dir
> -
> -NS create ns -stat d -server [split [::config::getKey start_ns_server] ":"]
> -
>  set family [lindex [::config::getGlobalKey basefont] 0]
>  set size [lindex [::config::getGlobalKey basefont] 1]
>  
> @@ -258,20 +244,48 @@
>       set allfonts([string tolower $font]) $font
>  }
>  
> +
> +
> +set ::auto_encoding [encoding system]
> +
> +if { [::config::getKey encoding] != "auto" } {
> +  set_encoding [::config::getKey encoding]
> +}
> +
> +
> +puts "drawing main window..."
> +cmsn_draw_main
> +puts "done."
> +
> +
>  # Bye bye hidden files in file dialogs (works fine with Mac even without 
> this).
>  if {[OnLinux]} {
>       catch { tk_getOpenFile -w00t } ;# start file dialog with unknown option
>       set ::tk::dialog::file::showHiddenVar 0
>  }
>  
> -set ::auto_encoding [encoding system]
>  
> -if { [::config::getKey encoding] != "auto" } {
> -  set_encoding [::config::getKey encoding]
> +#///////////////////////////////////////////////////////////////////////
> +
> +if { [catch {package require tls}] } {
> +    # Either tls is not installed, or $auto_path does not point to it.
> +    # Should now never happen; the check for the presence of tls is made
> +    # before this point.
> +#    status_log "Could not find the package tls on this system.\n"
> +    set tlsinstalled 0
> +} else {
> +    set tlsinstalled 1
>  }
>  
> -cmsn_draw_main
> +#create_dir $HOME
> +set log_dir "[file join ${HOME} logs]"
> +set webcam_dir "[file join ${HOME} webcam]"
> +create_dir $log_dir
> +create_dir $webcam_dir
>  
> +NS create ns -stat d -server [split [::config::getKey start_ns_server] ":"]
> +
> +
>  bind all <KeyPress> "set idletime 0"
>  
>  idleCheck
> @@ -292,6 +306,8 @@
>     }
>  }
>  
> +# CONFIGURATION DONE. LET THE USER CONNECT
> +cmsn_draw_offline
>  update idletasks
>  
>  init_dock
> Index: gui.tcl
> ===================================================================
> --- gui.tcl   (revisione 7572)
> +++ gui.tcl   (copia locale)
> @@ -3400,8 +3400,6 @@
>  proc cmsn_draw_main {} {
>       global pgBuddy pgBuddyTop pgNews argv0 argv
>  
> -     create_states_menu .my_menu
> -     create_other_menus .user_menu .menu_invite
>       create_main_menu .main_menu
>  
>       wm title . "[trans title] - [trans offline]"
> @@ -3425,7 +3423,61 @@
>       frame .main.f -class Amsn -relief flat -background white -borderwidth 0
>       pack .main -fill both -expand true
>       pack .main.f -expand true -fill both -padx [::skin::getKey 
> buddylistpad] -pady [::skin::getKey buddylistpad] -side top
> +     
>  
> +     #Set the position on the screen and the size for the contact list, from 
> config
> +     #Check if the geometry is available :
> +     set geometry [::config::getKey wingeometry]
> +     set width 0
> +     set height 0
> +     set x 0
> +     set y 0
> +     set modified 0
> +     regexp {=?(\d+)x(\d+)[+\-](-?\d+)[+\-](-?\d+)} $geometry -> width 
> height x y
> +     if {[expr {$width + $x}] > [winfo screenwidth .]} {
> +             set modified 1
> +             if { [OnMac] } {
> +                     set x 200
> +             } else {
> +                     set x 0
> +             }
> +     }
> +     if {[expr {$width}] > [winfo screenwidth .]} {
> +             set modified 1
> +             set width 275
> +     }
> +     if {[expr {$height + $y}] > [winfo screenheight .]} {
> +             set modified 1
> +             if { [OnMac] } {
> +                     set y 200
> +             } else {
> +                     set y 0
> +             }
> +     } 
> +     if {[expr {$height}] > [winfo screenheight .]} {
> +             set modified 1
> +             set height 400
> +     }       
> +     if {$modified == 1} {
> +             set geometry ${width}x${height}-${x}+${y}
> +             ::config::setKey wingeometry $geometry
> +     }
> +     catch {wm geometry . $geometry}
> +     
> +     #To avoid the bug of window behind the menu bar on Mac OS X
> +     #The menubar's height is 22.
> +     if { [OnMac] && [winfo y .] < 22 } {
> +             moveinscreen . 30
> +     }
> +     
> +     #allow for display updates so window size is correct
> +     update idletasks
> +     #Draw main window contents
> +     cmsn_draw_status
> +     
> +     wm state . normal
> +     update
> +
>       if {[::config::getKey withnotebook]} {
>               # Create the Notebook and initialize the page paths. These
>               # page paths must be used for adding new widgets to the
> @@ -3464,6 +3516,13 @@
>  
>       $pgBuddy setwidget $pgBuddy.text
>  
> +
> +     # This is actually a little more than a cmsn_draw_signin copy&paste
> +     # Btw works well enough... it is displayed for a little while...
> +     cmsn_draw_loading
> +     update
> +
> +
>       # Initialize the event history
>       frame .main.eventmenu
>       combobox::combobox .main.eventmenu.list -editable false 
> -highlightthickness 0 -width 22 -bg #FFFFFF -font splainf -exportselection 
> false
> @@ -3472,6 +3531,7 @@
>       label .main.banner -bd 0 -relief flat -background [::skin::getKey 
> bannerbg]
>       pack .main.banner -side bottom -fill x
>       resetBanner
> +     
>  
>       #delete F10 binding that crashes amsn
>       bind all <F10> ""
> @@ -3536,9 +3596,12 @@
>       }
>  
>       #Draw main window contents
> -     cmsn_draw_status
> -     cmsn_draw_offline
> +     #cmsn_draw_status
>  
> +     create_states_menu .my_menu
> +     create_other_menus .user_menu .menu_invite
> +
> +
>       if { [OnWin] } {
>               catch {wm iconbitmap . [::skin::GetSkinFile winicons msn.ico]}
>               catch {wm iconbitmap . -default [::skin::GetSkinFile winicons 
> msn.ico]}
> @@ -3547,58 +3610,11 @@
>               catch {wm iconmask . @[::skin::GetSkinFile pixmaps 
> amsnmask.xbm]}
>       }
>  
> -     update
> -     
> -     #Set the position on the screen and the size for the contact list, from 
> config
> -     #Check if the geometry is available :
> -     set geometry [::config::getKey wingeometry]
> -     set width 0
> -     set height 0
> -     set x 0
> -     set y 0
> -     set modified 0
> -     regexp {=?(\d+)x(\d+)[+\-](-?\d+)[+\-](-?\d+)} $geometry -> width 
> height x y
> -     if {[expr {$width + $x}] > [winfo screenwidth .]} {
> -             set modified 1
> -             if { [OnMac] } {
> -                     set x 200
> -             } else {
> -                     set x 0
> -             }
> -     }
> -     if {[expr {$width}] > [winfo screenwidth .]} {
> -             set modified 1
> -             set width 275
> -     }
> -     if {[expr {$height + $y}] > [winfo screenheight .]} {
> -             set modified 1
> -             if { [OnMac] } {
> -                     set y 200
> -             } else {
> -                     set y 0
> -             }
> -     } 
> -     if {[expr {$height}] > [winfo screenheight .]} {
> -             set modified 1
> -             set height 400
> -     }       
> -     if {$modified == 1} {
> -             set geometry ${width}x${height}-${x}+${y}
> -             ::config::setKey wingeometry $geometry
> -     }
> -     catch {wm geometry . $geometry}
> -     
> -     #To avoid the bug of window behind the menu bar on Mac OS X
> -     #The menubar's height is 22.
> -     if { [OnMac] && [winfo y .] < 22 } {
> -             moveinscreen . 30
> -     }
> -     
> -     #allow for display updates so window size is correct
> -     update idletasks
> -     
> +     #update
> +     #cmsn_draw_offline
> +
>       #Unhide main window now that it has finished being created
> -     wm state . normal
> +     #wm state . normal
>  }
>  #///////////////////////////////////////////////////////////////////////
>  
> @@ -4116,7 +4132,6 @@
>  #///////////////////////////////////////////////////////////////////////
>  
>  
> -
>  #///////////////////////////////////////////////////////////////////////
>  proc cmsn_draw_offline {} {
>       bind . <Configure> ""
> @@ -4270,9 +4285,43 @@
>  }
>  #///////////////////////////////////////////////////////////////////////
>  
> +########################################################################
> +proc cmsn_draw_loading {} {
> +     bind . <Configure> ""
>  
> +     global pgBuddy pgBuddyTop eventdisconnected
>  
> +     set eventdisconnected 1
> +
> +     wm title . "[trans title] - [::config::getKey login]"
> +
> +
> +     pack forget $pgBuddyTop
> +     $pgBuddy.text configure -state normal -font splainf
> +
> +     $pgBuddy.text delete 0.0 end
> +     $pgBuddy.text tag conf loading -fore #000000 \
> +             -font sboldf -justify center
> +     #$pgBuddy.text insert end "\n\n\n\n\n\n\n"
> +     $pgBuddy.text insert end "\n\n\n\n\n"
> +
> +     catch {
> +             $pgBuddy.text insert end " " loading
> +             $pgBuddy.text image create end -image [::skin::loadPixmap 
> loganim]
> +             $pgBuddy.text insert end " " loading
> +
> +     }
> +
> +     $pgBuddy.text insert end "\n\n"
> +     $pgBuddy.text insert end "[trans loading]..." loading
> +     $pgBuddy.text configure -state disabled
> +
> +}
>  #///////////////////////////////////////////////////////////////////////
> +
> +
> +
> +#///////////////////////////////////////////////////////////////////////
>  proc cmsn_draw_signin {} {
>       bind . <Configure> ""
>  

> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys - and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> Amsn-devel mailing list
> Amsn-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amsn-devel


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Amsn-devel mailing list
Amsn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amsn-devel

Reply via email to