diff options
Diffstat (limited to 'indra/llcommon')
| -rw-r--r-- | indra/llcommon/llmetricperformancetester.cpp | 84 | ||||
| -rw-r--r-- | indra/llcommon/llmetricperformancetester.h | 9 | ||||
| -rw-r--r-- | indra/llcommon/llversionviewer.h | 2 | 
3 files changed, 93 insertions, 2 deletions
diff --git a/indra/llcommon/llmetricperformancetester.cpp b/indra/llcommon/llmetricperformancetester.cpp index 5fa3a5ea07..41d3eb0bf3 100644 --- a/indra/llcommon/llmetricperformancetester.cpp +++ b/indra/llcommon/llmetricperformancetester.cpp @@ -63,7 +63,18 @@ BOOL LLMetricPerformanceTesterBasic::addTester(LLMetricPerformanceTesterBasic* t  	sTesterMap.insert(std::make_pair(name, tester));  	return TRUE;  } -	 + +/*static*/  +void LLMetricPerformanceTesterBasic::deleteTester(std::string name) +{ +	name_tester_map_t::iterator tester = sTesterMap.find(name); +	if (tester != sTesterMap.end()) +	{ +		delete tester->second; +		sTesterMap.erase(tester); +	} +} +  /*static*/   LLMetricPerformanceTesterBasic* LLMetricPerformanceTesterBasic::getTester(std::string name)   { @@ -83,7 +94,78 @@ BOOL LLMetricPerformanceTesterBasic::isMetricLogRequested(std::string name)  	return (LLFastTimer::sMetricLog && ((LLFastTimer::sLogName == name) || (LLFastTimer::sLogName == DEFAULT_METRIC_NAME)));  } +/*static*/  +LLSD LLMetricPerformanceTesterBasic::analyzeMetricPerformanceLog(std::istream& is) +{ +	LLSD ret; +	LLSD cur; +	 +	while (!is.eof() && LLSDSerialize::fromXML(cur, is)) +	{ +		for (LLSD::map_iterator iter = cur.beginMap(); iter != cur.endMap(); ++iter) +		{ +			std::string label = iter->first; +			 +			LLMetricPerformanceTesterBasic* tester = LLMetricPerformanceTesterBasic::getTester(iter->second["Name"].asString()) ; +			if(tester) +			{ +				ret[label]["Name"] = iter->second["Name"] ; +				 +				S32 num_of_metrics = tester->getNumberOfMetrics() ; +				for(S32 index = 0 ; index < num_of_metrics ; index++) +				{ +					ret[label][ tester->getMetricName(index) ] = iter->second[ tester->getMetricName(index) ] ; +				} +			} +		} +	} +	 +	return ret; +} + +/*static*/  +void LLMetricPerformanceTesterBasic::doAnalysisMetrics(std::string baseline, std::string target, std::string output) +{ +	if(!LLMetricPerformanceTesterBasic::hasMetricPerformanceTesters()) +	{ +		return ; +	} +	 +	// Open baseline and current target, exit if one is inexistent +	std::ifstream base_is(baseline.c_str()); +	std::ifstream target_is(target.c_str()); +	if (!base_is.is_open() || !target_is.is_open()) +	{ +		llwarns << "'-analyzeperformance' error : baseline or current target file inexistent" << llendl; +		base_is.close(); +		target_is.close(); +		return; +	} +	//analyze baseline +	LLSD base = analyzeMetricPerformanceLog(base_is); +	base_is.close(); +	 +	//analyze current +	LLSD current = analyzeMetricPerformanceLog(target_is); +	target_is.close(); +	 +	//output comparision +	std::ofstream os(output.c_str()); +	 +	os << "Label, Metric, Base(B), Target(T), Diff(T-B), Percentage(100*T/B)\n";  +	for(LLMetricPerformanceTesterBasic::name_tester_map_t::iterator iter = LLMetricPerformanceTesterBasic::sTesterMap.begin() ;  +		iter != LLMetricPerformanceTesterBasic::sTesterMap.end() ; ++iter) +	{ +		LLMetricPerformanceTesterBasic* tester = ((LLMetricPerformanceTesterBasic*)iter->second) ;	 +		tester->analyzePerformance(&os, &base, ¤t) ; +	} +	 +	os.flush(); +	os.close(); +} + +  //----------------------------------------------------------------------------------------------  // LLMetricPerformanceTesterBasic : Tester instance methods  //---------------------------------------------------------------------------------------------- diff --git a/indra/llcommon/llmetricperformancetester.h b/indra/llcommon/llmetricperformancetester.h index 1372f48dcf..1a18cdf36f 100644 --- a/indra/llcommon/llmetricperformancetester.h +++ b/indra/llcommon/llmetricperformancetester.h @@ -62,6 +62,8 @@ public:  	 */  	virtual void analyzePerformance(std::ofstream* os, LLSD* base, LLSD* current) ; +	static void doAnalysisMetrics(std::string baseline, std::string target, std::string output) ; +  	/**  	 * @return Returns the number of the test metrics in this tester instance.  	 */ @@ -116,6 +118,7 @@ protected:  private:  	void preOutputTestResults(LLSD* sd) ;  	void postOutputTestResults(LLSD* sd) ; +	static LLSD analyzeMetricPerformanceLog(std::istream& is) ;  	std::string mName ;							// Name of this tester instance  	S32 mCount ;								// Current record count @@ -135,6 +138,12 @@ public:  	static LLMetricPerformanceTesterBasic* getTester(std::string name) ;  	/** +	 * @return Delete the named tester from the list  +	 * @param[in] name - Name of the tester instance to delete. +	 */ +	static void deleteTester(std::string name); + +	/**  	 * @return Returns TRUE if that metric *or* the default catch all metric has been requested to be logged  	 * @param[in] name - Name of the tester queried.  	 */ diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 117d96ffa6..d22c879243 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -29,7 +29,7 @@  const S32 LL_VERSION_MAJOR = 2;  const S32 LL_VERSION_MINOR = 6; -const S32 LL_VERSION_PATCH = 1; +const S32 LL_VERSION_PATCH = 2;  const S32 LL_VERSION_BUILD = 0;  const char * const LL_CHANNEL = "Second Life Developer";  | 
