Trace shader compilation for clients other than Android framework

We had added detailed events specifically when running in Android
framework, but other clients (eg, Flutter) would like these, too.

To keep the same semantics in Android, added a new _ALWAYS variant
of TRACE_EVENT0. It works like TRACE_EVENT0, but has the _ALWAYS
semantics in Android.

Bug: skia:11360
Change-Id: I13fd77445e0d2a05e46b75629b37bab5f571b02e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/375018
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index 78cb5dc..497af01 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -589,6 +589,7 @@
   executable("skslc") {
     defines = [
       "SKSL_STANDALONE",
+      "SK_DISABLE_TRACING",
       "SK_ENABLE_SPIRV_VALIDATION",
     ]
     sources = [
diff --git a/src/core/SkTraceEventCommon.h b/src/core/SkTraceEventCommon.h
index 01b8a72..db46692 100644
--- a/src/core/SkTraceEventCommon.h
+++ b/src/core/SkTraceEventCommon.h
@@ -64,6 +64,7 @@
 #define ATRACE_ANDROID_FRAMEWORK(fmt, ...) TRACE_EMPTY
 #define ATRACE_ANDROID_FRAMEWORK_ALWAYS(fmt, ...) TRACE_EMPTY
 #define TRACE_EVENT0(cg, n) TRACE_EMPTY
+#define TRACE_EVENT0_ALWAYS(cg, n) TRACE_EMPTY
 #define TRACE_EVENT1(cg, n, a1n, a1v) TRACE_EMPTY
 #define TRACE_EVENT2(cg, n, a1n, a1v, a2n, a2v) TRACE_EMPTY
 #define TRACE_EVENT_INSTANT0(cg, n, scope) TRACE_EMPTY
@@ -142,6 +143,8 @@
 // associated arguments. In the framework, the arguments are ignored.
 #define TRACE_EVENT0(category_group, name) \
     SkAndroidFrameworkTraceUtil __trace(name)
+#define TRACE_EVENT0_ALWAYS(category_group, name) \
+    SkAndroidFrameworkTraceUtilAlways __trace_always(name)
 #define TRACE_EVENT1(category_group, name, arg1_name, arg1_val) \
     SkAndroidFrameworkTraceUtil __trace(name)
 #define TRACE_EVENT2(category_group, name, arg1_name, arg1_val, arg2_name, arg2_val) \
@@ -197,6 +200,9 @@
 #define TRACE_EVENT0(category_group, name) \
   INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name)
 
+#define TRACE_EVENT0_ALWAYS(category_group, name) \
+  INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name)
+
 #define TRACE_EVENT1(category_group, name, arg1_name, arg1_val) \
   INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name, arg1_name, arg1_val)
 
diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.cpp b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
index 6fc86ed..cb14885 100644
--- a/src/gpu/gl/builders/GrGLProgramBuilder.cpp
+++ b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
@@ -52,7 +52,7 @@
                                                const GrProgramDesc& desc,
                                                const GrProgramInfo& programInfo,
                                                const GrGLPrecompiledProgram* precompiledProgram) {
-    ATRACE_ANDROID_FRAMEWORK_ALWAYS("shader_compile");
+    TRACE_EVENT0_ALWAYS("skia.gpu", "shader_compile");
     GrAutoLocaleSetter als("C");
 
     // create a builder.  This will be handed off to effects so they can use it to add
@@ -260,7 +260,7 @@
         this->computeCountsAndStrides(programID, primProc, false);
         usedProgramBinaries = true;
     } else if (cached) {
-        ATRACE_ANDROID_FRAMEWORK_ALWAYS("cache_hit");
+        TRACE_EVENT0_ALWAYS("skia.gpu", "cache_hit");
         SkReadBuffer reader(fCached->data(), fCached->size());
         SkFourByteTag shaderType = GrPersistentCacheUtils::GetType(&reader);
 
@@ -322,7 +322,7 @@
         }
     }
     if (!usedProgramBinaries) {
-        ATRACE_ANDROID_FRAMEWORK_ALWAYS("cache_miss");
+        TRACE_EVENT0_ALWAYS("skia.gpu", "cache_miss");
         // Either a cache miss, or we got something other than binaries from the cache
 
         /*
@@ -443,7 +443,7 @@
         this->bindProgramResourceLocations(programID);
 
         {
-            ATRACE_ANDROID_FRAMEWORK_ALWAYS("driver_link_program");
+            TRACE_EVENT0_ALWAYS("skia.gpu", "driver_link_program");
             GL_CALL(LinkProgram(programID));
             if (checkLinked) {
                 if (!this->checkLinkStatus(programID, errorHandler, sksl, glsl)) {
diff --git a/src/gpu/gl/builders/GrGLShaderStringBuilder.cpp b/src/gpu/gl/builders/GrGLShaderStringBuilder.cpp
index 9793e2b..eb32e2e 100644
--- a/src/gpu/gl/builders/GrGLShaderStringBuilder.cpp
+++ b/src/gpu/gl/builders/GrGLShaderStringBuilder.cpp
@@ -57,7 +57,7 @@
                                     const SkSL::String& glsl,
                                     GrGpu::Stats* stats,
                                     GrContextOptions::ShaderErrorHandler* errorHandler) {
-    ATRACE_ANDROID_FRAMEWORK_ALWAYS("driver_compile_shader");
+    TRACE_EVENT0_ALWAYS("skia.gpu", "driver_compile_shader");
     const GrGLInterface* gli = glCtx.glInterface();
 
     // Specify GLSL source to the driver.
diff --git a/src/sksl/SkSLCompiler.cpp b/src/sksl/SkSLCompiler.cpp
index a6d6cac..68f8986 100644
--- a/src/sksl/SkSLCompiler.cpp
+++ b/src/sksl/SkSLCompiler.cpp
@@ -1426,7 +1426,7 @@
         String text,
         const Program::Settings& settings,
         const std::vector<std::unique_ptr<ExternalFunction>>* externalFunctions) {
-    ATRACE_ANDROID_FRAMEWORK("SkSL::Compiler::convertProgram");
+    TRACE_EVENT0("skia.gpu", "SkSL::Compiler::convertProgram");
 
     SkASSERT(!externalFunctions || (kind == ProgramKind::kGeneric));
 
@@ -1714,7 +1714,7 @@
 }
 
 bool Compiler::toGLSL(Program& program, OutputStream& out) {
-    ATRACE_ANDROID_FRAMEWORK("SkSL::Compiler::toGLSL");
+    TRACE_EVENT0("skia.gpu", "SkSL::Compiler::toGLSL");
     AutoSource as(this, program.fSource.get());
     GLSLCodeGenerator cg(fContext.get(), &program, this, &out);
     bool result = cg.generateCode();