Approximate the GPU frame time by computing a difference between the smallest GPUStartTime and largest GPUEndTime for all command buffers submitted in a frame workload.
More...
#include <gpu_tracer_mtl.h>
|
| GPUTracerMTL ()=default |
|
| ~GPUTracerMTL ()=default |
|
void | MarkFrameEnd () |
| Record that the current frame has ended. Any additional cmd buffers will be attributed to the "next" frame.
|
|
void | RecordCmdBuffer (id< MTLCommandBuffer > buffer) |
| Record the current cmd buffer GPU execution timestamps into an aggregate frame workload metric.
|
|
Approximate the GPU frame time by computing a difference between the smallest GPUStartTime and largest GPUEndTime for all command buffers submitted in a frame workload.
Definition at line 23 of file gpu_tracer_mtl.h.
◆ GPUTracerMTL()
impeller::GPUTracerMTL::GPUTracerMTL |
( |
| ) |
|
|
default |
◆ ~GPUTracerMTL()
impeller::GPUTracerMTL::~GPUTracerMTL |
( |
| ) |
|
|
default |
◆ IPLR_GUARDED_BY()
size_t current_state_ impeller::GPUTracerMTL::IPLR_GUARDED_BY |
( |
trace_state_mutex_ |
| ) |
|
|
privatepure virtual |
◆ MarkFrameEnd()
void impeller::GPUTracerMTL::MarkFrameEnd |
( |
| ) |
|
Record that the current frame has ended. Any additional cmd buffers will be attributed to the "next" frame.
Definition at line 16 of file gpu_tracer_mtl.mm.
16 {
17 if (@available(ios 10.3, tvos 10.2, macos 10.15, macCatalyst 13.0, *)) {
18 Lock lock(trace_state_mutex_);
19 current_state_ = (current_state_ + 1) % 16;
20 }
21}
◆ RecordCmdBuffer()
void impeller::GPUTracerMTL::RecordCmdBuffer |
( |
id< MTLCommandBuffer > |
buffer | ) |
|
Record the current cmd buffer GPU execution timestamps into an aggregate frame workload metric.
Definition at line 23 of file gpu_tracer_mtl.mm.
23 {
24 if (@available(ios 10.3, tvos 10.2, macos 10.15, macCatalyst 13.0, *)) {
25 Lock lock(trace_state_mutex_);
26 auto current_state = current_state_;
27 trace_states_[current_state].pending_buffers += 1;
28
29 auto weak_self = weak_from_this();
30 [
buffer addCompletedHandler:^(id<MTLCommandBuffer>
buffer) {
31 auto self = weak_self.lock();
33 return;
34 }
35 Lock lock(
self->trace_state_mutex_);
36 auto&
state =
self->trace_states_[current_state];
37 state.pending_buffers--;
38 state.smallest_timestamp = std::min(
40 state.largest_timestamp = std::max(
42
43 if (
state.pending_buffers == 0) {
44 auto gpu_ms =
45 (
state.largest_timestamp -
state.smallest_timestamp) * 1000;
46 state.smallest_timestamp = std::numeric_limits<float>::max();
47 state.largest_timestamp = 0;
49 reinterpret_cast<int64_t>(this),
50 "FrameTimeMS", gpu_ms);
51 }
52 }];
53 }
54}
static const uint8_t buffer[]
#define FML_TRACE_COUNTER(category_group, name, counter_id, arg1,...)
The documentation for this class was generated from the following files: