mirror of
https://github.com/yse/easy_profiler.git
synced 2024-12-27 00:31:02 +08:00
Merge branch 'develop' of https://github.com/yse/easy_profiler into develop
This commit is contained in:
commit
bc44bec36d
@ -146,6 +146,10 @@ void foo()
|
||||
*/
|
||||
#define PROFILER_DISABLE profiler::setEnabled(false);
|
||||
|
||||
#define PROFILER_SET_THREAD_NAME(name) profiler::setThreadName(name);
|
||||
|
||||
#define PROFILER_SET_MAIN_THREAD PROFILER_SET_THREAD_NAME("Main")
|
||||
|
||||
#else
|
||||
#define PROFILER_ADD_MARK(name)
|
||||
#define PROFILER_ADD_MARK_GROUPED(name,block_group)
|
||||
@ -158,6 +162,8 @@ void foo()
|
||||
#define PROFILER_DISABLE profiler::setEnabled(false);
|
||||
#define PROFILER_ADD_EVENT(name)
|
||||
#define PROFILER_ADD_EVENT_GROUPED(name,block_group)
|
||||
#define PROFILER_SET_THREAD_NAME(name)
|
||||
#define PROFILER_SET_MAIN_THREAD
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
@ -227,6 +233,7 @@ namespace profiler
|
||||
void PROFILER_API endBlock();
|
||||
void PROFILER_API setEnabled(bool isEnable);
|
||||
unsigned int PROFILER_API dumpBlocksToFile(const char* filename);
|
||||
void PROFILER_API setThreadName(const char* name);
|
||||
}
|
||||
|
||||
typedef uint8_t block_type_t;
|
||||
@ -235,6 +242,7 @@ namespace profiler
|
||||
|
||||
const block_type_t BLOCK_TYPE_EVENT = 1;
|
||||
const block_type_t BLOCK_TYPE_BLOCK = 2;
|
||||
const block_type_t BLOCK_TYPE_THREAD_SIGN = 3;
|
||||
|
||||
#pragma pack(push,1)
|
||||
class PROFILER_API BaseBlockData
|
||||
|
@ -99,6 +99,7 @@ struct BlocksTree
|
||||
::profiler::SerilizedBlock* node;
|
||||
::profiler::BlockStatistics* frame_statistics; ///< Pointer to statistics for this block within the parent (may be nullptr for top-level blocks)
|
||||
::profiler::BlockStatistics* total_statistics; ///< Pointer to statistics for this block within the bounds of all frames per current thread
|
||||
const char* thread_name;
|
||||
|
||||
#ifdef PROFILER_COUNT_TOTAL_CHILDREN_NUMBER
|
||||
unsigned int total_children_number; ///< Number of all children including number of grandchildren (and so on)
|
||||
@ -118,6 +119,7 @@ struct BlocksTree
|
||||
#ifdef PROFILER_COUNT_DEPTH
|
||||
, depth(0)
|
||||
#endif
|
||||
, thread_name("")
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ Block::Block(const char* _name, color_t _color, block_type_t _type) :
|
||||
name(_name)
|
||||
{
|
||||
tick(begin);
|
||||
if (this->type == BLOCK_TYPE_EVENT)
|
||||
if (BLOCK_TYPE_BLOCK != this->type)
|
||||
{
|
||||
end = begin;
|
||||
}
|
||||
|
@ -27,6 +27,11 @@ extern "C"{
|
||||
{
|
||||
return ProfileManager::instance().dumpBlocksToFile(filename);
|
||||
}
|
||||
|
||||
void PROFILER_API setThreadName(const char* name)
|
||||
{
|
||||
return ProfileManager::instance().setThreadName(name);
|
||||
}
|
||||
}
|
||||
|
||||
SerilizedBlock::SerilizedBlock(Block* block):
|
||||
@ -164,3 +169,14 @@ unsigned int ProfileManager::dumpBlocksToFile(const char* filename)
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
void ProfileManager::setThreadName(const char* name)
|
||||
{
|
||||
profiler::Block block(name, 0, profiler::BLOCK_TYPE_THREAD_SIGN);
|
||||
auto find_it = m_namedThreades.find(block.getThreadId());
|
||||
if (find_it != m_namedThreades.end())
|
||||
return;
|
||||
|
||||
_internalInsertBlock(&block);
|
||||
m_namedThreades.insert(block.getThreadId());
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ along with this program.If not, see <http://www.gnu.org/licenses/>.
|
||||
#include <stack>
|
||||
#include <map>
|
||||
#include <list>
|
||||
#include <set>
|
||||
|
||||
#ifdef WIN32
|
||||
#include <Windows.h>
|
||||
@ -54,6 +55,7 @@ class ProfileManager
|
||||
|
||||
typedef std::stack<profiler::Block*> stack_of_blocks_t;
|
||||
typedef std::map<size_t, stack_of_blocks_t> map_of_threads_stacks;
|
||||
typedef std::set<size_t> set_of_thread_id;
|
||||
|
||||
map_of_threads_stacks m_openedBracketsMap;
|
||||
|
||||
@ -66,7 +68,7 @@ class ProfileManager
|
||||
typedef std::list<profiler::SerilizedBlock*> serialized_list_t;
|
||||
serialized_list_t m_blocks;
|
||||
|
||||
|
||||
set_of_thread_id m_namedThreades;
|
||||
public:
|
||||
static ProfileManager& instance();
|
||||
~ProfileManager();
|
||||
@ -74,6 +76,7 @@ public:
|
||||
void endBlock();
|
||||
void setEnabled(bool isEnable);
|
||||
unsigned int dumpBlocksToFile(const char* filename);
|
||||
void setThreadName(const char* name);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -239,6 +239,10 @@ extern "C"{
|
||||
tree.node = new profiler::SerilizedBlock(sz, data);
|
||||
++blocks_counter;
|
||||
|
||||
if (::profiler::BLOCK_TYPE_THREAD_SIGN == baseData->getType()){
|
||||
root.thread_name = tree.node->getBlockName();
|
||||
}
|
||||
|
||||
if (!root.children.empty())
|
||||
{
|
||||
BlocksTree& back = root.children.back();
|
||||
|
Loading…
x
Reference in New Issue
Block a user