-
Notifications
You must be signed in to change notification settings - Fork 6k
[Impeller] GPU Tracer for GLES. #47080
Conversation
| has_started_frame_ = true; | ||
|
|
||
| FML_DCHECK(!active_frame_.has_value()); | ||
| FML_DCHECK(query != 0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is redundant with the query == 0 check above
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
| std::deque<uint32_t> pending_traces_; | ||
| std::optional<uint32_t> active_frame_ = std::nullopt; | ||
| std::thread::id raster_thread_; | ||
| bool has_started_frame_ = false; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
has_started_frame_ can be removed. The code can instead check whether active_frame_ contains a value.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
| } | ||
|
|
||
| // For reasons unknown to me, querying the state of more than | ||
| // on query object per frame causes crashes on a Pixel 6 pro. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
typo: "on" -> "one"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
| // For reasons unknown to me, querying the state of more than | ||
| // on query object per frame causes crashes on a Pixel 6 pro. | ||
| // It does not crash on an S10. | ||
| auto latest_query = pending_traces_.front(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think latest_query implies that this is the most recent query, when it's actually the least recent.
I'd rename this to query
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
|
|
||
| // For reasons unknown to me, querying the state of more than | ||
| // on query object per frame causes crashes on a Pixel 6 pro. | ||
| // It does not crash on an S10. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Where exactly is the crash happening?
If the tracer can only consume one pending query per MarkFrameStart call, then that means the pending traces queue will grow unbounded each time a query result is unavailable at the next MarkFrameStart.
|
This actually works OK on the Pixel 7s we have in the device lab. On a Pixel 6 pro the crash is almost immediate and appears to be in the driver: Based on some other reports, this seems like a fiddly API (https://bugs.chromium.org/p/chromium/issues/detail?id=453965) . I'm going to make usage opt in so we can use it on our benchmarks when necessary without worrying about broader device compatibility. |
| return; | ||
| } | ||
|
|
||
| FML_DCHECK(!active_frame_.has_value()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This duplicates the active_frame_.has_value() check above
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
|
|
||
| void GPUTracerGLES::MarkFrameEnd(const ProcTableGLES& gl) { | ||
| if (!enabled_ || std::this_thread::get_id() != raster_thread_ || | ||
| !active_frame_.has_value() || !active_frame_.has_value()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove the second copy of !active_frame_.has_value()
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
…136982) flutter/engine@d46933e...b27e1b3 2023-10-20 [email protected] Add link support in web accessibility (flutter/engine#46117) 2023-10-20 [email protected] [web] Support `flutterViewId` in platform view messages (flutter/engine#46891) 2023-10-20 [email protected] Fix async image loading issues in skwasm. (flutter/engine#47117) 2023-10-20 [email protected] Add option to save Impeller failure images in rendertests (flutter/engine#47142) 2023-10-20 [email protected] Roll Skia from b960e9140f56 to 9ffd5ef9a9ed (3 revisions) (flutter/engine#47167) 2023-10-20 [email protected] [macOS] Eliminate extraneous loadView calls (flutter/engine#47166) 2023-10-20 [email protected] Roll Dart SDK from ba96a157a8eb to 53fee35b299f (1 revision) (flutter/engine#47165) 2023-10-20 [email protected] [Impeller] GPU Tracer for GLES. (flutter/engine#47080) 2023-10-20 [email protected] Roll Skia from de628929015d to b960e9140f56 (2 revisions) (flutter/engine#47164) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-engine-flutter-autoroll Please CC [email protected],[email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Trace GPU execution time on GLES using GL_EXT_disjoint_timer_query. This requires a per-app opt in from the Android Manifest with the key `"io.flutter.embedding.android.EnableOpenGLGPUTracing` set to true.
Fixes breakages from: * flutter/engine#47080 * flutter/engine#47247 * flutter/engine#47278
Fixes breakages from: * flutter/engine#47080 * flutter/engine#47247 * flutter/engine#47278
Fixes breakages from: * flutter/engine#47080 * flutter/engine#47247 * flutter/engine#47278
bdero/impeller-cmake#20 Fixes breakages from: * #47080 * #47247 * #47278
Trace GPU execution time on GLES using GL_EXT_disjoint_timer_query. This requires a per-app opt in from the Android Manifest with the key
"io.flutter.embedding.android.EnableOpenGLGPUTracingset to true.