[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[253] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2012-10-29 17:15:55
|
Revision: 253 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=253&view=rev Author: nickols_k Date: 2012-10-29 17:15:43 +0000 (Mon, 29 Oct 2012) Log Message: ----------- add mp_malloc statistics Modified Paths: -------------- mplayerxp/mplayer.c mplayerxp/osdep/mp_malloc.c mplayerxp/osdep/mplib.h Modified: mplayerxp/mplayer.c =================================================================== --- mplayerxp/mplayer.c 2012-10-29 16:03:18 UTC (rev 252) +++ mplayerxp/mplayer.c 2012-10-29 17:15:43 UTC (rev 253) @@ -575,9 +575,14 @@ void uninit_player(unsigned int mask){ priv_t*priv=mp_data->priv; - stream_t* stream=priv->demuxer->stream; - sh_audio_t* sh_audio=priv->demuxer->audio->sh; - sh_video_t* sh_video=priv->demuxer->video->sh; + stream_t* stream=NULL; + sh_audio_t* sh_audio=NULL; + sh_video_t* sh_video=NULL; + if(priv->demuxer) { + stream=priv->demuxer->stream; + sh_audio=priv->demuxer->audio->sh; + sh_video=priv->demuxer->video->sh; + } fflush(stdout); fflush(stderr); mask=priv->inited_flags&mask; @@ -2378,13 +2383,13 @@ mp_register_options(mp_data->mconfig); parse_cfgfiles(mp_data->mconfig); - if(m_config_parse_command_line(mp_data->mconfig, argc, argv, envp) < 0) exit(1); // error parsing cmdline + if(m_config_parse_command_line(mp_data->mconfig, argc, argv, envp) < 0) + exit_player("Error parse command line"); // error parsing cmdline if(!mp_conf.xp) { MSG_ERR("Error: detected option: -core.xp=0\n" "Note! Single-thread mode is not longer supported by MPlayerXP\n"); - mpxp_uninit_structs(); - return 0; + exit_player(MSGTR_Exit_quit); } xp_num_cpu=get_number_cpu(); @@ -2393,11 +2398,11 @@ #endif if(!sws_init()) { MSG_ERR("MPlayerXP requires working copy of libswscaler\n"); - mpxp_uninit_structs(); - return 0; + exit_player(MSGTR_Exit_quit); } if(mp_conf.shuffle_playback) priv->playtree->flags|=PLAY_TREE_RND; else priv->playtree->flags&=~PLAY_TREE_RND; + priv->playtree = play_tree_cleanup(priv->playtree); if(priv->playtree) { playtree_iter = play_tree_iter_new(priv->playtree,mp_data->mconfig); @@ -2416,8 +2421,7 @@ if(!filename){ show_help(); - mpxp_uninit_structs(); - return 0; + exit_player(MSGTR_Exit_quit); } // Many users forget to include command line in bugreports... Modified: mplayerxp/osdep/mp_malloc.c =================================================================== --- mplayerxp/osdep/mp_malloc.c 2012-10-29 16:03:18 UTC (rev 252) +++ mplayerxp/osdep/mp_malloc.c 2012-10-29 17:15:43 UTC (rev 253) @@ -115,9 +115,13 @@ typedef struct priv_s { unsigned rnd_limit; unsigned every_nth_call; + // statistics unsigned long long int total_calls; - // statistics unsigned long long int num_allocs; + // local statistics + int enable_stat; + unsigned long long int stat_total_calls; + unsigned long long int stat_num_allocs; }priv_t; static priv_t* priv; @@ -132,7 +136,7 @@ void mp_uninit_malloc(int verbose) { if(priv->num_allocs && verbose) - MSG_WARN("Warning: from %lli total calls of alloc() were not freed %lli buffers\n",priv->total_calls,priv->num_allocs); + MSG_WARN("Warning! From %lli total calls of alloc() were not freed %lli buffers\n",priv->total_calls,priv->num_allocs); free(priv); priv=NULL; } @@ -141,12 +145,19 @@ { any_t* rb,*rnd_buff=NULL; if(!priv) mp_init_malloc(1000,10); - if(priv->total_calls%priv->every_nth_call==0) - rnd_buff=malloc(rand()%priv->rnd_limit); + if(priv->every_nth_call && priv->rnd_limit) { + if(priv->total_calls%priv->every_nth_call==0) { + rnd_buff=malloc(rand()%priv->rnd_limit); + } + } rb = malloc(__size); if(rnd_buff) free(rnd_buff); priv->total_calls++; priv->num_allocs++; + if(priv->enable_stat) { + priv->stat_total_calls++; + priv->stat_num_allocs++; + } return rb; } @@ -164,6 +175,7 @@ { if(!priv) mp_init_malloc(1000,10); priv->num_allocs++; + if(priv->enable_stat) priv->stat_num_allocs++; return memalign(boundary,__size); } @@ -172,11 +184,31 @@ if(!priv) mp_init_malloc(1000,10); free(__ptr); priv->num_allocs--; + if(priv->enable_stat) priv->stat_num_allocs--; } + char * mp_strdup(const char *src) { - char *rs; - unsigned len=strlen(src); - rs=mp_malloc(len+1); - strcpy(rs,src); + char *rs=NULL; + if(src) { + unsigned len=strlen(src); + rs=mp_malloc(len+1); + strcpy(rs,src); + } return rs; } + +void __FASTCALL__ mp_open_malloc_stat(void) { + if(!priv) mp_init_malloc(1000,10); + priv->enable_stat=1; + priv->stat_total_calls=priv->stat_num_allocs=0ULL; +} + +unsigned long long __FASTCALL__ mp_close_malloc_stat(int verbose) { + if(!priv) mp_init_malloc(1000,10); + priv->enable_stat=0; + if(verbose) + MSG_INFO("mp_malloc stat: from %lli total calls of alloc() were not freed %lli buffers\n" + ,priv->stat_total_calls + ,priv->stat_num_allocs); + return priv->stat_num_allocs; +} Modified: mplayerxp/osdep/mplib.h =================================================================== --- mplayerxp/osdep/mplib.h 2012-10-29 16:03:18 UTC (rev 252) +++ mplayerxp/osdep/mplib.h 2012-10-29 17:15:43 UTC (rev 253) @@ -38,6 +38,9 @@ extern void __FASTCALL__ mp_init_malloc(unsigned rnd_limit,unsigned every_nth_call); extern void __FASTCALL__ mp_uninit_malloc(int verbose); +extern void __FASTCALL__ mp_open_malloc_stat(void); +extern unsigned long long __FASTCALL__ mp_close_malloc_stat(int verbose); + extern any_t* __FASTCALL__ mp_malloc(size_t __size); extern any_t* __FASTCALL__ mp_mallocz(size_t __size); extern any_t* __FASTCALL__ mp_realloc(any_t*__ptr, size_t __size); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |