You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
3.1 KiB

/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#ifndef plProfileManagerFull_h_inc
#define plProfileManagerFull_h_inc
#include "plProfileManager.h"
#include "hsStlUtils.h"
#include "hsStlSortUtils.h"
class plProfileManager;
class plGraphPlate;
class plStatusLog;
class hsStream;
class plProfileVar;
class plProfileManagerFull
{
public:
typedef std::set<const char*, stringISorter> GroupSet;
protected:
plProfileManager::VarVec& fVars;
bool fLogStats; // If true, log the stats at the end of the frame
std::wstring fLogAgeName;
std::string fLogSpawnName;
std::vector<plGraphPlate*> fGraphs;
plGraphPlate* fDetailGraph;
struct detailVar
{
plProfileVar* var;
Int32 min;
Int32 max;
};
std::vector<detailVar> fDetailVars; // the vars we want to show on the detail graph
GroupSet fShowGroups;
plProfileVar* fShowLaps;
UInt32 fMinLap; // For Display
void IPrintGroup(hsStream* s, const char* groupName, bool printTitle=false);
void ILogStats();
plProfileVar* IFindTimer(const char* name);
void ISetActive(const char* groupName, bool active);
plProfileManagerFull();
public:
static plProfileManagerFull& Instance();
void EndFrame(); // Call end frame on our special timers
void Update();
void GetGroups(GroupSet& groups);
void ShowGroup(const char* groupName);
void ShowNextGroup();
struct LapPair { const char* group; const char* varName; };
typedef std::vector<LapPair> LapNames;
void GetLaps(LapNames& lapNames);
void ShowLaps(const char* groupName, const char* varName);
void SetMinLap(int m) { fMinLap = m; };
void PageDownLaps() { fMinLap += 40; }
void PageUpLaps() { fMinLap = (fMinLap < 40) ? 0 : fMinLap - 40;}
void CreateGraph(const char* varName, UInt32 min, UInt32 max);
void ResetDefaultDetailVars();
void ShowDetailGraph();
void HideDetailGraph();
void AddDetailVar(const char* varName, UInt32 min, UInt32 max);
void RemoveDetailVar(const char* varName);
void UpdateDetailLabels();
void ResetMax();
void LogStats(const char* ageName, const char* spawnName);
const wchar* GetProfilePath();
// If you're going to call LogStats, make sure to call this first so all stats will be evaluated before logging
void ActivateAllStats();
};
#endif // plProfileManagerFull_h_inc