From: <hel...@us...> - 2006-02-19 21:32:43
|
Revision: 10120 Author: hellcatv Date: 2006-02-19 13:32:36 -0800 (Sun, 19 Feb 2006) ViewCVS: http://svn.sourceforge.net/vegastrike/?rev=10120&view=rev Log Message: ----------- debugging perf Modified Paths: -------------- trunk/vegastrike/src/star_system.cpp trunk/vegastrike/src/star_system_generic.cpp Modified: trunk/vegastrike/src/star_system.cpp =================================================================== --- trunk/vegastrike/src/star_system.cpp 2006-02-16 21:28:27 UTC (rev 10119) +++ trunk/vegastrike/src/star_system.cpp 2006-02-19 21:32:36 UTC (rev 10120) @@ -308,8 +308,10 @@ extern double saved_interpolation_blend_factor; extern double interpolation_blend_factor; extern bool cam_setup_phase; +extern bool debugPerformance(); //#define UPDATEDEBUG //for hard to track down bugs void GameStarSystem::Draw(bool DrawCockpit) { + double starttime=queryTime(); GFXEnable (DEPTHTEST); GFXEnable (DEPTHWRITE); Music::MuzakCycle(); @@ -339,7 +341,7 @@ } } - + double setupdrawtime=queryTime(); static bool always_make_smooth=XMLSupport::parse_bool(vs_config->getVariable("graphics","always_make_smooth_cam","false")); //bool whichview= _Universe->AccessCockpit()->GetView()==CP_CHASE;//||_Universe->AccessCockpit()->GetView()==CP_VIEWTARGET; /*if (!whichview) */{ @@ -353,7 +355,7 @@ // b) actual drawing (currently duplicating a's work) // With camera setup ocurring between a) and b) cam_setup_phase=true; - + //int numships=0; for (unsigned int sim_counter=0;sim_counter<=SIM_QUEUE_SIZE;++sim_counter) { Unit *unit; @@ -376,11 +378,13 @@ cam_setup_phase=false; } - + setupdrawtime=queryTime()-setupdrawtime; GFXDisable (LIGHTING); bg->Draw(); - + double drawtime=queryTime(); + double maxdrawtime=0; for (unsigned int sim_counter=0;sim_counter<=SIM_QUEUE_SIZE;++sim_counter) { + double tmp=queryTime(); Unit *unit; UnitCollection::UnitIterator iter = physics_buffer[sim_counter].createIterator(); float backup=SIMULATION_ATOM; @@ -396,15 +400,17 @@ } interpolation_blend_factor=saved_interpolation_blend_factor; SIMULATION_ATOM=backup; + tmp=queryTime()-tmp; + if (tmp>maxdrawtime)maxdrawtime=tmp; } - + drawtime=queryTime()-drawtime; WarpTrailDraw(); GFXFogMode (FOG_OFF); GFXColor tmpcol (0,0,0,1); GFXGetLightContextAmbient(tmpcol); - + double processmesh=queryTime(); static bool DrawNearStarsLast =XMLSupport::parse_bool(vs_config->getVariable("graphics","draw_near_stars_in_front_of_planets","false")); if (!DrawNearStarsLast) stars->Draw(); Mesh::ProcessZFarMeshes(); @@ -416,6 +422,7 @@ GamePlanet::ProcessTerrains(); Terrain::RenderAll(); Mesh::ProcessUndrawnMeshes(true); + processmesh=queryTime()-processmesh; Nebula * neb; Matrix ident; @@ -447,6 +454,10 @@ // GFXHudMode (false); // } } + double fintime=queryTime()-starttime; + if (debugPerformance()) { + printf("draw: %f setup %f units %f maxunit %f processmesh %f ",fintime,setupdrawtime,drawtime,maxdrawtime,processmesh); + } } extern void update_ani_cache(); void UpdateAnimatedTexture() Modified: trunk/vegastrike/src/star_system_generic.cpp =================================================================== --- trunk/vegastrike/src/star_system_generic.cpp 2006-02-16 21:28:27 UTC (rev 10119) +++ trunk/vegastrike/src/star_system_generic.cpp 2006-02-19 21:32:36 UTC (rev 10120) @@ -386,7 +386,10 @@ } - +bool debugPerformance() { + static bool dp = XMLSupport::parse_bool(vs_config->getVariable("physics","debug_performance","true")); + return dp; +} //Variables for debugging purposes only - eliminate later unsigned int physicsframecounter=1; unsigned int theunitcounter=0; @@ -395,6 +398,10 @@ unsigned int movingtotal=0; void StarSystem::UpdateUnitPhysics (bool firstframe) { static bool phytoggle=true; + double updatebegin=queryTime(); + double aitime=0; + double phytime=0; + double collidetime=0; if (phytoggle) { // BELOW COMMENTS ARE NO LONGER IN SYNCH // NOTE: Randomization is necessary to preserve scattering - otherwise, whenever a @@ -411,29 +418,36 @@ un_iter iter = this->physics_buffer[current_sim_location].createIterator(); while((unit = iter.current())!=NULL) { int priority=UnitUtil::getPhysicsPriority(unit); - // Doing spreading here and only on priority changes, so as to make AI easier - - //If the priority has really changed (not an initial scattering, because prediction doesn't match) - if (priority!=unit->predicted_priority){ - //Save priority value as prediction for next scheduling - unit->predicted_priority=priority; - //Scatter, so as to achieve uniform distribution - priority = 1 + (((unsigned int)vsrandom.genrand_int32())%priority); - } else { - //Save priority value as prediction - unit->predicted_priority=priority; - } + // Doing spreading here and only on priority changes, so as to make AI easier - int newloc=(current_sim_location+priority)%SIM_QUEUE_SIZE; - float backup=SIMULATION_ATOM; - theunitcounter=theunitcounter+1; - SIMULATION_ATOM*=priority; - unit->sim_atom_multiplier=priority; - unit->ExecuteAI(); + //If the priority has really changed (not an initial scattering, because prediction doesn't match) + if (priority!=unit->predicted_priority){ + //Save priority value as prediction for next scheduling + unit->predicted_priority=priority; + //Scatter, so as to achieve uniform distribution + priority = 1 + (((unsigned int)vsrandom.genrand_int32())%priority); + } else { + //Save priority value as prediction + unit->predicted_priority=priority; + } + + int newloc=(current_sim_location+priority)%SIM_QUEUE_SIZE; + float backup=SIMULATION_ATOM; + theunitcounter=theunitcounter+1; + SIMULATION_ATOM*=priority; + unit->sim_atom_multiplier=priority; + double aa=queryTime(); + unit->ExecuteAI(); + double bb=queryTime(); unit->ResetThreatLevel(); unit->UpdatePhysics(identity_transformation,identity_matrix,Vector (0,0,0),firstframe,&this->gravitationalUnits(),unit); + double cc= queryTime(); last_collisions.clear(); unit->CollideAll(); + double dd = queryTime(); + aitime+=bb-aa; + phytime+=cc-bb; + collidetime+=dd-cc; if (newloc==current_sim_location) { iter.advance(); }else{ @@ -454,8 +468,10 @@ int movingavgindex=physicsframecounter%128; movingtotal=movingtotal-movingavgarray[movingavgindex]+theunitcounter; movingavgarray[movingavgindex]=theunitcounter; - fprintf(stderr,"Frame:%u - %u, %u, %u\n",physicsframecounter,theunitcounter,movingtotal/128,totalprocessed/physicsframecounter); - current_sim_location=(current_sim_location+1)%SIM_QUEUE_SIZE; + if (debugPerformance()) { + printf("PhysFrame:%u - %u, %u, %u t:%f ai:%f p:%f c:%f ",physicsframecounter,theunitcounter,movingtotal/128,totalprocessed/physicsframecounter,queryTime()-updatebegin,aitime,phytime,collidetime); + } + current_sim_location=(current_sim_location+1)%SIM_QUEUE_SIZE; ++physicsframecounter; totalprocessed+=theunitcounter; theunitcounter=0; @@ -564,7 +580,8 @@ Unit *unit; bool firstframe = true; - + double beginss=queryTime(); + double pythontime=0; ///this makes it so systems without players may be simulated less accurately for (int k=0;k<_Universe->numPlayers();k++) { if (_Universe->AccessCockpit(k)->activeStarSystem==this) { @@ -578,9 +595,10 @@ time += GetElapsedTime(); _Universe->pushActiveStarSystem(this); //WARNING PERFORMANCE HACK!!!!! - if (time>2*SIMULATION_ATOM) { - time = 2*SIMULATION_ATOM; - } + if (time>2*SIMULATION_ATOM) { + time = 2*SIMULATION_ATOM; + } + double bolttime=0; if(time/SIMULATION_ATOM>=(1./PHY_NUM)) { while(time/SIMULATION_ATOM >= (1./PHY_NUM)) { // Chew up all SIMULATION_ATOMs that have elapsed since last update //UnitCollection::UnitIterator iter; @@ -589,11 +607,14 @@ UpdateAnimatedTexture(); // iter = units.createIterator(); Unit::ProcessDeleteQueue(); + double pythonidea=queryTime(); if( (run_only_player_starsystem && _Universe->getActiveStarSystem(0)==this) || !run_only_player_starsystem) { if (executeDirector) { ExecuteDirector(); } } + pythontime=queryTime()-pythonidea; + static int dothis=0; if (this==_Universe->getActiveStarSystem(0)) { if (dothis++%2==0) { @@ -612,7 +633,9 @@ UpdateCameraSnds(); //iter = drawList.createIterator(); + bolttime=queryTime(); bolts->UpdatePhysics(); + bolttime=queryTime()-bolttime; current_stage=MISSION_SIMULATION; firstframe = false; } @@ -639,6 +662,9 @@ //WARNING cockpit does not get here... _Universe->popActiveStarSystem(); // VSFileSystem::vs_fprintf (stderr,"bf:%lf",interpolation_blend_factor); + if (debugPerformance()) { + printf ("SS Update: pyth: %f tot: %f\n",pythontime, queryTime()-beginss); + } } /***************************************************************************************/ |