X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fstructure%2Fsubsystem_mgr.hxx;h=a0e76809c8a3522ddff53b49927248442ab21eff;hb=0a08ee836c817701dc4297d371e3e0a4662d470d;hp=f1e2ad9af5e1ef0a0df572ba1aa30e28f22a35d9;hpb=63ccb3df4c195124acb660c2ac7e11a42677476a;p=simgear.git diff --git a/simgear/structure/subsystem_mgr.hxx b/simgear/structure/subsystem_mgr.hxx index f1e2ad9a..a0e76809 100644 --- a/simgear/structure/subsystem_mgr.hxx +++ b/simgear/structure/subsystem_mgr.hxx @@ -48,9 +48,12 @@ public: const SGTimeStamp& getTime() const { return time; } }; +class SampleStatistic; + typedef std::vector eventTimeVec; typedef std::vector::iterator eventTimeVecIterator; +typedef void (*SGSubsystemTimingCb)(void* userData, const std::string& name, SampleStatistic* pStatistic); /** @@ -227,7 +230,7 @@ public: /** - * Suspend or resum operation of this subsystem. + * Suspend or resume operation of this subsystem. * * @param suspended true if the subsystem should be suspended, false * otherwise. @@ -253,43 +256,25 @@ public: */ virtual bool is_suspended () const; - /** - * Keep track of execution time. - * - *

This method keeps track of timing statistics for each subsystem.

- * - * @param time execution time in ms of last call. + * Trigger the callback to report timing information for all subsystems. */ - void updateExecutionTime(double time); - - /** - * Print details of execution time. - * - *

For debugging purposes, developers can place stamp() calls - * at strategic points in the update() function of each subsystem, which - * record the time between the successive calls to stamp. This method, - * printExecutionTime() is called after exectution of the subsystem - * update function itself to conduct a post-hoc analysis of excecution - * time

- */ - void printTimingInformation(); + void reportTiming(void); /** * Place time stamps at strategic points in the execution of subsystems * update() member functions. Predominantly for debugging purposes. */ void stamp(const std::string& name); - - protected: bool _suspended; eventTimeVec timingInfo; - //int test; + static SGSubsystemTimingCb reportTimingCb; + static void* reportTimingUserData; }; @@ -322,11 +307,10 @@ public: virtual void remove_subsystem (const std::string &name); virtual bool has_subsystem (const std::string &name) const; - void collectDebugTiming(bool collect); - void printTimingStatistics(double minMaxTime=0.0,double minJitter=0.0); + void reportTiming(void); /** - * + * */ void set_fixed_update_time(double fixed_dt); private: @@ -369,9 +353,10 @@ public: enum GroupType { INIT = 0, GENERAL, - FDM, ///< flight model, autopilot, instruments that run coupled + FDM, ///< flight model, autopilot, instruments that run coupled POST_FDM, ///< certain subsystems depend on FDM data DISPLAY, ///< view, camera, rendering updates + SOUND/*I want to be last!*/, ///< needs to run AFTER display, to allow concurrent GPU/sound processing MAX_GROUPS }; @@ -404,16 +389,14 @@ public: virtual SGSubsystem * get_subsystem(const std::string &name) const; - void collectDebugTiming(bool collect); - void printTimingStatistics(double minMaxTime=0.0,double minJitter=0.0); + void reportTiming(); + void setReportTimingCb(void* userData,SGSubsystemTimingCb cb) {reportTimingCb = cb;reportTimingUserData = userData;} private: - SGSubsystemGroup* _groups[MAX_GROUPS]; - + typedef std::map SubsystemDict; SubsystemDict _subsystem_map; - };