Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
gpu_tracer_mtl.mm
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <Metal/Metal.h>
6#include "fml/trace_event.h"
9
10#include <memory>
11
13
14namespace impeller {
15
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}
22
23void GPUTracerMTL::RecordCmdBuffer(id<MTLCommandBuffer> buffer) {
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();
32 if (!self) {
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(
39 state.smallest_timestamp, static_cast<Scalar>(buffer.GPUStartTime));
40 state.largest_timestamp = std::max(
41 state.largest_timestamp, static_cast<Scalar>(buffer.GPUEndTime));
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;
48 FML_TRACE_COUNTER("flutter", "GPUTracer",
49 reinterpret_cast<int64_t>(this), // Trace Counter ID
50 "FrameTimeMS", gpu_ms);
51 }
52 }];
53 }
54}
55
56} // namespace impeller
void RecordCmdBuffer(id< MTLCommandBuffer > buffer)
Record the current cmd buffer GPU execution timestamps into an aggregate frame workload metric.
void MarkFrameEnd()
Record that the current frame has ended. Any additional cmd buffers will be attributed to the "next" ...
AtkStateType state
static const uint8_t buffer[]
float Scalar
Definition scalar.h:18
#define FML_TRACE_COUNTER(category_group, name, counter_id, arg1,...)
Definition trace_event.h:85