60 ScopeTimings timings = {};
62 timings.finished =
false;
63 timings.cpu_start = ScopeTimings::Clock::now();
65 scope_timings.append(timings);
78 for (
int i = scope_timings.size() - 1;
i >= 0;
i--) {
79 ScopeTimings &query = scope_timings[
i];
80 if (!query.finished) {
81 query.finished =
true;
82 query.cpu_end = ScopeTimings::Clock::now();
91MTLContext::ScopeTimings::TimePoint MTLContext::ScopeTimings::epoch =
92 MTLContext::ScopeTimings::Clock::now();
94void MTLContext::process_frame_timings()
102 bool frame_is_valid = !queries.
is_empty();
104 for (
int i = queries.
size() - 1;
i >= 0;
i--) {
105 if (!queries[
i].finished) {
106 frame_is_valid =
false;
112 if (!frame_is_valid) {
116 for (ScopeTimings &query : queries) {
117 ScopeTimings::Nanoseconds
begin = query.cpu_start - ScopeTimings::epoch;
118 ScopeTimings::Nanoseconds end = query.cpu_end - ScopeTimings::epoch;
127 MTLCaptureManager *capture_manager = [MTLCaptureManager sharedCaptureManager];
128 if (!capture_manager) {
132 MTLCaptureDescriptor *capture_descriptor = [[MTLCaptureDescriptor alloc]
init];
133 capture_descriptor.captureObject = this->
device;
135 if (![capture_manager startCaptureWithDescriptor:capture_descriptor
error:&
error]) {
136 NSLog(
@"Failed to start Metal frame capture, error %@",
error);
144 MTLCaptureManager *capture_manager = [MTLCaptureManager sharedCaptureManager];
145 if (!capture_manager) {
149 [capture_manager stopCapture];
155 MTLCaptureManager *capture_manager = [MTLCaptureManager sharedCaptureManager];
156 if (!capture_manager) {
160 id<MTLCaptureScope> capture_scope = [capture_manager newCaptureScopeWithDevice:this->
device];
161 capture_scope.label = [NSString stringWithUTF8String:
name];
162 [capture_scope retain];
164 return reinterpret_cast<void *
>(capture_scope);
171 [(id<MTLCaptureScope>)scope beginScope];
173 MTLCaptureManager *capture_manager = [MTLCaptureManager sharedCaptureManager];
174 return [capture_manager isCapturing];
179 [(id<MTLCaptureScope>)scope endScope];
#define CLOG_ERROR(clg_ref,...)
#define CLOG_ENSURE(clg_ref)
bool debug_capture_begin(const char *title) override
void * debug_capture_scope_create(const char *name) override
void debug_capture_scope_end(void *scope) override
void debug_group_begin(const char *name, int index) override
bool debug_capture_scope_begin(void *scope) override
MTLCommandBufferManager main_command_buffer
void debug_group_end() override
void debug_capture_end() override
static ProfileReport & get()
void add_group_cpu(StringRefNull name, uint64_t cpu_start, uint64_t cpu_end)
static void error(const char *str)
static void init(bNodeTree *, bNode *node)