blob: 683376db96095a54d9e0a3bfeb9da443341e21f3 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#pragma once
#include "optick.config.h"
#if USE_OPTICK
#include "optick_common.h"
#include "optick_memory.h"
//////////////////////////////////////////////////////////////////////////
// Platform-specific stuff
//////////////////////////////////////////////////////////////////////////
namespace Optick
{
struct Trace;
struct Module;
struct Symbol;
struct SymbolEngine;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Platform API
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct Platform
{
// Platform Name
static OPTICK_INLINE const char* GetName();
// Thread ID (system thread id)
static OPTICK_INLINE ThreadID GetThreadID();
// Process ID
static OPTICK_INLINE ProcessID GetProcessID();
// CPU Frequency
static OPTICK_INLINE int64 GetFrequency();
// CPU Time (Ticks)
static OPTICK_INLINE int64 GetTime();
// System Tracer
static OPTICK_INLINE Trace* GetTrace();
// Symbol Resolver
static OPTICK_INLINE SymbolEngine* GetSymbolEngine();
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Tracing API
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct Trace
{
virtual void SetPassword(const char* /*pwd*/) {};
virtual CaptureStatus::Type Start(Mode::Type mode, int frequency, const ThreadList& threads) = 0;
virtual bool Stop() = 0;
virtual ~Trace() {};
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Symbol API
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct Module
{
string path;
void* address;
size_t size;
Module(const char* p, void* a, size_t s) : path(p), address(a), size(s) {}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct Symbol
{
uint64 address;
uint64 offset;
wstring file;
wstring function;
uint32 line;
Symbol()
: address(0)
, offset(0)
, line(0)
{}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct SymbolEngine
{
// Get list of loaded modules
virtual const vector<Module>& GetModules() = 0;
// Get Symbol from address
virtual const Symbol* GetSymbol(uint64 dwAddress) = 0;
virtual ~SymbolEngine() {};
};
}
//////////////////////////////////////////////////////////////////////////
#endif //USE_OPTICK
|