14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * srec_stats.c * 34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Copyright 2007, 2008 Nuance Communciations, Inc. * 54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the 'License'); * 74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * you may not use this file except in compliance with the License. * 84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * You may obtain a copy of the License at * 104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 * 114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software * 134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * distributed under the License is distributed on an 'AS IS' BASIS, * 144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * See the License for the specific language governing permissions and * 164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * limitations under the License. * 174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/ 194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include"srec_stats.h" 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "passert.h" 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "portable.h" 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_STATS_ACTIVE 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef struct 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_fsmarc_tokens; 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_fsmnode_tokens; 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_word_tokens; 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_altword_tokens, num_altword_token_batches; 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_astar_active_parps; 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_astar_complete_parps; 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_astar_parps_in_use; 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_fsmarc_token_reprunes; 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_fsmnode_token_reprunes; 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_word_token_reprunes; 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_altword_token_reprunes; 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_bad_backtraces; 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_forced_updates; 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsrec_stats; 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsrec_stats my_srec_stats; 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_IN_SAMPLE(MaX,SamPle) \ 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if((MaX)<(SamPle)) MaX = (SamPle); 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid srec_stats_clear() 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project memset(&my_srec_stats, 0, sizeof(my_srec_stats)); 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid srec_stats_show() 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage( 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project L("SREC STATS: FWD tokens s %d f %d w %d aw %d // ASTAR parps a %d c %d t %d // REPRUNES s %d f %d w %d aw %d bbt %d fcu %d\n"), 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_fsmarc_tokens, 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_fsmnode_tokens, 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_word_tokens, 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_altword_tokens, 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_astar_active_parps, 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_astar_complete_parps, 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_astar_parps_in_use, 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_fsmarc_token_reprunes, 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_fsmnode_token_reprunes, 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_word_token_reprunes, 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_altword_token_reprunes, 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_bad_backtraces, 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_forced_updates 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ); 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid srec_stats_update(srec* rec, char* msg) 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int i; 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project asr_int16_t num; 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fsmnode_token* ftoken; 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fsmarc_token* stoken; 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project word_token* wtoken; 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project altword_token* awtoken; 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project asr_int16_t numb; 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project stokenID st_index; 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ftokenID ft_index; 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project wtokenID wt_index; 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (msg) PLogMessage ( msg ); 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* state tokens */ 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project st_index = rec->active_fsmarc_tokens; 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (num = 0; st_index != MAXstokenID; st_index = stoken->next_token_index) 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project stoken = &rec->fsmarc_token_array[st_index]; 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project num++; 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (msg) PLogMessage ( " stokens %d", num ); 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project MAX_IN_SAMPLE(my_srec_stats.num_fsmarc_tokens, num); 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* fsmnode tokens */ 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ft_index = rec->active_fsmnode_tokens; 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (num = 0 ; ft_index != MAXftokenID; ft_index = ftoken->next_token_index) 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ftoken = &rec->fsmnode_token_array[ft_index]; 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project num++; 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (msg) PLogMessage ( " ftokens %d", num ); 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project MAX_IN_SAMPLE(my_srec_stats.num_fsmnode_tokens, num); 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* word tokens */ 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0, num = 0; i < rec->current_search_frame; i++) 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project wt_index = rec->word_lattice->words_for_frame[i]; 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (; wt_index != MAXwtokenID; wt_index = wtoken->next_token_index) 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project wtoken = &rec->word_token_array[wt_index]; 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project num++; 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (msg) PLogMessage ( " wtokens %d", num ); 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project MAX_IN_SAMPLE(my_srec_stats.num_word_tokens, num); 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* altword tokens */ 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (num = 0, awtoken = rec->altword_token_freelist; awtoken; awtoken = awtoken->next_token) 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project num++; 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project num = rec->altword_token_array_size - num; 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (numb = 0, i = 0; i < rec->altword_token_array_size; i++) 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rec->altword_token_array[i].next_token == AWTNULL) 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project numb++; 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project numb--; /* foreach tail, there is a head, remove the freelist head pointer */ 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (msg) PLogMessage ( " awtokens %d/%d", num, numb ); 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project MAX_IN_SAMPLE(my_srec_stats.num_altword_tokens, num); 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project MAX_IN_SAMPLE(my_srec_stats.num_altword_token_batches, numb); 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (msg) PLogMessage ( "\n" ); 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid srec_stats_update_astar(AstarStack* stack) 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_parps_in_use; 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project partial_path *parp; 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* active parps are the leaves of the tree, still being extended */ 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project MAX_IN_SAMPLE(my_srec_stats.num_astar_active_parps, 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project stack->num_active_paths); 1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* complete parps are the leaves, for completed paths */ 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project MAX_IN_SAMPLE(my_srec_stats.num_astar_complete_parps, 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project stack->num_complete_paths); 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project num_parps_in_use = stack->partial_path_array_size; 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (parp = stack->free_parp_list; parp; parp = parp->next) 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project num_parps_in_use--; 1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project MAX_IN_SAMPLE(my_srec_stats.num_astar_parps_in_use, num_parps_in_use); 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid srec_stats_inc_stoken_reprunes(int n) 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_fsmarc_token_reprunes += n; 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid srec_stats_inc_ftoken_reprunes(int n) 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_fsmnode_token_reprunes += n; 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid srec_stats_inc_wtoken_reprunes(int n) 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_word_token_reprunes += n; 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid srec_stats_inc_awtoken_reprunes(int n) 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_altword_token_reprunes += n; 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid srec_stats_inc_bad_backtraces() 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_bad_backtraces++; 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid srec_stats_inc_forced_updates() 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project my_srec_stats.num_forced_updates++; 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 186