mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
5e987cc0e2
Fixes #2545 Fixes #2546 Fixes #2547 Fixes #2548 Fixes #2549 Fixes #2550 Fixes #2551 Fixes #2552 Fixes #2553 Fixes #2554 Fixes #2555 Fixes #2556 Fixes #2557 Fixes #2558 Fixes #2559 Fixes #2560 Fixes #2561 Fixes #2562 Fixes #2563 Fixes #2564 Fixes #2565 Fixes #2567 Fixes #2566 Fixes #2568 Fixes #2569 Fixes #2570 Fixes #2522 Fixes #2571 --------- Co-authored-by: water <awaterford111445@gmail.com> Co-authored-by: Hat Kid <6624576+Hat-Kid@users.noreply.github.com> Co-authored-by: ManDude <7569514+ManDude@users.noreply.github.com>
49 lines
1,019 B
C++
49 lines
1,019 B
C++
#pragma once
|
|
|
|
#include <atomic>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "common/common_types.h"
|
|
|
|
struct ProfNode {
|
|
u64 ts;
|
|
u64 tid;
|
|
char name[128];
|
|
enum Kind : u8 { BEGIN, END, INSTANT, UNUSED } kind = UNUSED;
|
|
};
|
|
|
|
class GlobalProfiler {
|
|
public:
|
|
GlobalProfiler();
|
|
void set_max_events(size_t event_count);
|
|
void instant_event(const char* name);
|
|
void begin_event(const char* name);
|
|
void event(const char* name, ProfNode::Kind kind);
|
|
void end_event();
|
|
void clear();
|
|
void set_enable(bool en);
|
|
void dump_to_json(const std::string& path);
|
|
void root_event();
|
|
|
|
private:
|
|
std::atomic_bool m_enabled = false;
|
|
u64 m_t0 = 0;
|
|
std::atomic_size_t m_next_idx = 0;
|
|
std::vector<ProfNode> m_nodes;
|
|
};
|
|
|
|
struct ScopedEvent {
|
|
ScopedEvent(const ScopedEvent&) = delete;
|
|
ScopedEvent& operator=(const ScopedEvent&) = delete;
|
|
GlobalProfiler* prof = nullptr;
|
|
~ScopedEvent() {
|
|
if (prof) {
|
|
prof->end_event();
|
|
}
|
|
}
|
|
};
|
|
|
|
GlobalProfiler& prof();
|
|
ScopedEvent scoped_prof(const char* name);
|