mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Add a tag argument to Skia shader trace events for use by DevTools (flutter/engine#26590)
This commit is contained in:
parent
32d589e08b
commit
02ce01fd73
@ -48,6 +48,18 @@ namespace {
|
||||
// Defined in Skia's src/core/SkTraceEvent.h.
|
||||
constexpr std::string_view kTraceCategoryPrefix = "disabled-by-default-";
|
||||
|
||||
// Category name used for shader compilation events.
|
||||
constexpr std::string_view kShaderCategoryName =
|
||||
"disabled-by-default-skia.shaders";
|
||||
|
||||
#if !defined(OS_FUCHSIA)
|
||||
// Argument name of the tag used by DevTools.
|
||||
constexpr char kDevtoolsTagArg[] = "devtoolsTag";
|
||||
|
||||
// DevtoolsTag value for shader events.
|
||||
constexpr char kShadersDevtoolsTag[] = "shaders";
|
||||
#endif // !defined(OS_FUCHSIA)
|
||||
|
||||
#if defined(OS_FUCHSIA)
|
||||
template <class T, class U>
|
||||
inline T BitCast(const U& u) {
|
||||
@ -68,7 +80,7 @@ class FlutterEventTracer : public SkEventTracer {
|
||||
static constexpr uint8_t kNo = 0;
|
||||
|
||||
FlutterEventTracer(bool enabled, const std::vector<std::string>& allowlist)
|
||||
: enabled_(enabled ? kYes : kNo) {
|
||||
: enabled_(enabled ? kYes : kNo), shaders_category_flag_(nullptr) {
|
||||
for (const std::string& category : allowlist) {
|
||||
allowlist_.insert(std::string(kTraceCategoryPrefix) + category);
|
||||
}
|
||||
@ -195,22 +207,47 @@ class FlutterEventTracer : public SkEventTracer {
|
||||
trace_release_context(trace_context);
|
||||
|
||||
#else // defined(OS_FUCHSIA)
|
||||
const char* devtoolsTag = nullptr;
|
||||
if (shaders_category_flag_ &&
|
||||
category_enabled_flag == shaders_category_flag_) {
|
||||
devtoolsTag = kShadersDevtoolsTag;
|
||||
}
|
||||
switch (phase) {
|
||||
case TRACE_EVENT_PHASE_BEGIN:
|
||||
case TRACE_EVENT_PHASE_COMPLETE:
|
||||
fml::tracing::TraceEvent0(kSkiaTag, name);
|
||||
if (devtoolsTag) {
|
||||
fml::tracing::TraceEvent1(kSkiaTag, name, kDevtoolsTagArg,
|
||||
devtoolsTag);
|
||||
} else {
|
||||
fml::tracing::TraceEvent0(kSkiaTag, name);
|
||||
}
|
||||
break;
|
||||
case TRACE_EVENT_PHASE_END:
|
||||
fml::tracing::TraceEventEnd(name);
|
||||
break;
|
||||
case TRACE_EVENT_PHASE_INSTANT:
|
||||
fml::tracing::TraceEventInstant0(kSkiaTag, name);
|
||||
if (devtoolsTag) {
|
||||
fml::tracing::TraceEventInstant1(kSkiaTag, name, kDevtoolsTagArg,
|
||||
devtoolsTag);
|
||||
} else {
|
||||
fml::tracing::TraceEventInstant0(kSkiaTag, name);
|
||||
}
|
||||
break;
|
||||
case TRACE_EVENT_PHASE_ASYNC_BEGIN:
|
||||
fml::tracing::TraceEventAsyncBegin0(kSkiaTag, name, id);
|
||||
if (devtoolsTag) {
|
||||
fml::tracing::TraceEventAsyncBegin1(kSkiaTag, name, id,
|
||||
kDevtoolsTagArg, devtoolsTag);
|
||||
} else {
|
||||
fml::tracing::TraceEventAsyncBegin0(kSkiaTag, name, id);
|
||||
}
|
||||
break;
|
||||
case TRACE_EVENT_PHASE_ASYNC_END:
|
||||
fml::tracing::TraceEventAsyncEnd0(kSkiaTag, name, id);
|
||||
if (devtoolsTag) {
|
||||
fml::tracing::TraceEventAsyncEnd1(kSkiaTag, name, id, kDevtoolsTagArg,
|
||||
devtoolsTag);
|
||||
} else {
|
||||
fml::tracing::TraceEventAsyncEnd0(kSkiaTag, name, id);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -243,7 +280,11 @@ class FlutterEventTracer : public SkEventTracer {
|
||||
allowed = false;
|
||||
}
|
||||
flag_it = category_flag_map_.insert(std::make_pair(name, allowed)).first;
|
||||
reverse_flag_map_.insert(std::make_pair(&flag_it->second, name));
|
||||
const uint8_t* flag = &flag_it->second;
|
||||
reverse_flag_map_.insert(std::make_pair(flag, name));
|
||||
if (kShaderCategoryName == name) {
|
||||
shaders_category_flag_ = flag;
|
||||
}
|
||||
}
|
||||
return &flag_it->second;
|
||||
}
|
||||
@ -263,6 +304,7 @@ class FlutterEventTracer : public SkEventTracer {
|
||||
std::set<std::string> allowlist_;
|
||||
std::map<const char*, uint8_t> category_flag_map_;
|
||||
std::map<const uint8_t*, const char*> reverse_flag_map_;
|
||||
const uint8_t* shaders_category_flag_;
|
||||
FML_DISALLOW_COPY_AND_ASSIGN(FlutterEventTracer);
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user