So I opted for gprof and bellow are the results. They are from 3 hours-long game (AI only) on Crater map (red player was eliminated by blue one). You can look at it, what is interested for me is that DefaultAI (line 43) - the main AI function - takes only 6.3 % of total CPU if gprof is correct.
If somebody want raw data (txt file) let me know. I believe that proportion of functions changes with size of map. ==================== Call graph () ==================== [see second column - % time] index_%_time____self__children____called_____name [1]_____99.4____0.00_1696.26_________________main_[1] [2]_____99.4____0.01_1696.18_______1_________WLApplication::run()_[2] [3]_____99.0____0.03_1689.50______10_________UI::Panel::run()_[3] [4]_____89.4____0.00_1525.92_______1_________WLApplication::mainmenu()_[4] [5]_____71.7___14.77_1208.34__123188+10361143_<cycle_3_as_a_whole>_[5] [6]_____69.6____0.00_1187.91_______1_________WLApplication::mainmenu_multiplayer()_[6] [7]_____53.6____0.02__914.58___61226_________GameRendererSDL::draw()_<cycle_3>_[7] [8]_____53.6____2.27__912.31___61226_________GameRendererSDL::draw_terrain()_[8] [9]_____52.5____0.64__894.67_63185232________GameRendererSDL::draw_field()_[9] [10]____52.3____1.87__891.10_63185232________void_draw_field_int<unsigned_int>()_[10] [11]____39.9____0.00__680.96_______1_________NetHost::run()_[11] [12]____31.2___16.13__515.46_126370464_______void_render_triangle<unsigned_int>()_[12] [13]____30.2__407.08__107.54_126370464_______void_render_edge_lists<unsigned_int>()_[13] [14]____29.3__114.19__385.34_271118424_______std::unique_ptr<Widelands::Field_[],_std::default_delete<Widelands::Field_[]>_ [15]____27.3____0.04__465.86___61569+2233150_UI::Panel::do_think()_[15] [16]____27.2____0.03__463.78___61226_________Interactive_Base::think()_[16] [17]____27.2____0.05__463.44___61226_________Widelands::Game::think()_[17] [18]____22.6__101.56__283.78_271118424_______ZSt3getILj0EJPN9Widelands5FieldESt14default_deleteIA_S1_EEENSt11__add_c_refIN [19]____20.8____0.68__353.99___61226_________Widelands::Cmd_Queue::run_queue()_[19] [20]____19.9____0.25__339.93_5582271_________Widelands::Cmd_Act::execute()_[20] [21]____19.9____4.48__334.90_17335297+131869067_<cycle_8_as_a_whole>_[21] [22]____19.8____0.00__338.65_______1_________Fullscreen_Menu_LaunchMPG::Fullscreen_Menu_LaunchMPG()_[22] [23]____19.8____0.00__337.97_______1_________Fullscreen_Menu_LaunchMPG::change_map_or_save()_[23] [24]____19.7____0.20__336.18_4731494_________Widelands::Bob::act()_[24] [25]____19.7____0.49__335.58_4618069_________Widelands::Bob::do_act()_[25] [26]____19.6__334.54____0.00_896797820_______SDLSurface::get_pixels()_const_[26] [27]____19.3____4.02__325.94__638674_________void_Widelands::Map::find_reachable<Widelands::FindImmovablesCallback>()_<cycle_ [28]____16.6__103.91__179.87_271118424_______std::__add_c_ref<Widelands::Field*>::type_std::__get_helper<0u,_Widelands::Fie [29]____15.2____2.26__256.88_564713957_______Widelands::Map::get_neighbour()_const_[29] [30]____12.4___13.32__198.39___61226_________GameRenderer::draw_objects()_<cycle_3>_[30] [31]____12.0____0.54__203.58__213382_________Widelands::Map::findpath()_[31] [32]____11.1____0.03__189.65__197613_________Widelands::Bob::start_task_movepath()__[32] [33]____10.5__101.56___78.31_271118424_______ZNSt11_Tuple_implILj0EJPN9Widelands5FieldESt14default_deleteIA_S1_EEE7_M_head [34]____10.0____0.00__171.01_______1_________Widelands::Game::run()_[34] [35]_____9.9____0.00__169.01_______1_________Fullscreen_Menu_LaunchMPG::select_map()_[35] [36]_____8.5___11.77__132.94_17897783________void_render_road_vert<unsigned_int>()_[36] [37]_____8.2____0.03__140.70__279850_________Widelands::Critter::roam_update()_[37] [38]_____8.0____0.02__135.69__199605_________Widelands::Worker::program_update()_[38] [39]_____6.7____9.60__104.72_7781675_________void_render_road_horiz<unsigned_int>()_[39] [40]_____6.6____0.00__111.96___14488_________Widelands::Map::find_reachable_fields()_[40] [41]_____6.6____0.30__111.67___14488_________void_Widelands::Map::find_reachable<Widelands::FindNodesCallback>()_[41] [42]_____6.3____0.07__106.93___61424_________NetHost::think()_[42] [43]_____6.3____0.01__106.74__122452_________DefaultAI::think()_[43] __index______A_unique_number_given_to_each_element_of_the_table. ____________Index_numbers_are_sorted_numerically. ____________The_index_number_is_printed_next_to_every_function_name_so ____________it_is_easier_to_look_up_where_the_function_in_the_table. %_time______This_is_the_percentage_of_the_`total'_time_that_was_spent ____________in_this_function_and_its_children.__Note_that_due_to ____________different_viewpoints,_functions_excluded_by_options,_etc, ____________these_numbers_will_NOT_add_up_to_100%. ___self______This_is_the_total_amount_of_time_spent_in_this_function. children______This_is_the_total_amount_of_time_propagated_into_this ____________function_by_its_children. _called______This_is_the_number_of_times_the_function_was_called. ____________If_the_function_called_itself_recursively,_the_number ____________only_includes_non-recursive_calls,_and_is_followed_by ____________a_`+'_and_the_number_of_recursive_calls. __name_____The_name_of_the_current_function.__The_index_number_is ____________printed_after_it.__If_the_function_is_a_member_of_a ____________cycle,_the_cycle_number_is_printed_between_the ____________function's_name_and_the_index_number. ================ top functions sorted by "self" column ============== [13]____30.2__407.08__107.54_126370464_________void_render_edge_lists<unsigned_int>()_[13] [26]____19.6__334.54____0.00_896797820_________SDLSurface::get_pixels()_const_[26] [14]____29.3__114.19__385.34_271118424_________std::unique_ptr<Widelands::Field_[],_std::default_delete<Widelands::Field_[]>_ [28]____16.6__103.91__179.87_271118424_________std::__add_c_ref<Widelands::Field*>::type_std::__get_helper<0u,_Widelands::Fie [33]____10.5__101.56___78.31_271118424_________ZNSt11_Tuple_implILj0EJPN9Widelands5FieldESt14default_deleteIA_S1_EEE7_M_head [18]____22.6__101.56__283.78_271118424_________ZSt3getILj0EJPN9Widelands5FieldESt14default_deleteIA_S1_EEENSt11__add_c_refIN [45]_____4.6___78.31____0.00_271118424_________std::_Head_base<0u,_Widelands::Field*,_false>::_M_head()_[45] ---------- Forwarded message ---------- From: Tibor Bamhor <[email protected]> Date: 2014-09-10 15:45 GMT+02:00 Subject: Re: [Widelands-dev] performance question To: Holger Rapp <[email protected]> Cc: [email protected] any volunteer? :) It would be ideal if profiling could be done within some late interval, I mean skipping like first 2 hours and then profile for 10 minutes. But from my random testing of backtrace (stopping of the game in random time), it seems that "cmd_queue" is taking quite a long of time during game near-freezes. Perhaps it relates to number of bobs or non-player objects. I googled for some fiendly profiler, but it is not that simple... 2014-09-10 15:35 GMT+02:00 Holger Rapp <[email protected]>: > > On 10.09.2014, at 00:50, Tibor Bamhor <[email protected]> wrote: > > > Hi, > > > > when working on AI I look on performance as well. > > > > I also encountered game sudden slow-downs when fps drops below 1 or so. > Using printfs I found that in such situation AI is not called for few > seconds at all. So it seems it is not a culprit. > > > > But my question is about other observation - the game with big map > 512x512 - PAUSED and fps still shows ~13 fps - instead of expected 25.0. No > movement on screen of course. So what can the game be doing so cpu > intensive when paused? > > No one can tell without profiling. You need to profile. > > > > > > Regards > > _______________________________________________ > > Mailing list: https://launchpad.net/~widelands-dev > > Post to : [email protected] > > Unsubscribe : https://launchpad.net/~widelands-dev > > More help : https://help.launchpad.net/ListHelp > >
_______________________________________________ Mailing list: https://launchpad.net/~widelands-dev Post to : [email protected] Unsubscribe : https://launchpad.net/~widelands-dev More help : https://help.launchpad.net/ListHelp

