Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
gpu_tracer_gles.h
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#ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_GPU_TRACER_GLES_H_
6#define FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_GPU_TRACER_GLES_H_
7
8#include <cstdint>
9#include <deque>
10#include <thread>
11
13
14namespace impeller {
15
16/// @brief Trace GPU execution times using GL_EXT_disjoint_timer_query on GLES.
17///
18/// Note: there are a substantial number of GPUs where usage of the this API is
19/// known to cause crashes. As a result, this functionality is disabled by
20/// default and can only be enabled in debug/profile mode via a specific opt-in
21/// flag that is exposed in the Android manifest.
22///
23/// To enable, add the following metadata to the application's Android manifest:
24/// <meta-data
25/// android:name="io.flutter.embedding.android.EnableOpenGLGPUTracing"
26/// android:value="false" />
28 public:
29 GPUTracerGLES(const ProcTableGLES& gl, bool enable_tracing);
30
31 ~GPUTracerGLES() = default;
32
33 /// @brief Record the thread id of the raster thread.
34 void RecordRasterThread();
35
36 /// @brief Record the start of a frame workload, if one hasn't already been
37 /// started.
38 void MarkFrameStart(const ProcTableGLES& gl);
39
40 /// @brief Record the end of a frame workload.
41 void MarkFrameEnd(const ProcTableGLES& gl);
42
43 private:
44 void ProcessQueries(const ProcTableGLES& gl);
45
46 std::deque<uint32_t> pending_traces_;
47 std::optional<uint32_t> active_frame_ = std::nullopt;
48 std::thread::id raster_thread_;
49
50 bool enabled_ = false;
51};
52
53} // namespace impeller
54
55#endif // FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_GPU_TRACER_GLES_H_
Trace GPU execution times using GL_EXT_disjoint_timer_query on GLES.
void MarkFrameEnd(const ProcTableGLES &gl)
Record the end of a frame workload.
void MarkFrameStart(const ProcTableGLES &gl)
Record the start of a frame workload, if one hasn't already been started.
void RecordRasterThread()
Record the thread id of the raster thread.