shared_lib: Fix macros for MSVC

MSVC traditional preprocessor macro expansion has some quirks that cause
macro arguments to be expanded differently.

https://learn.microsoft.com/en-us/cpp/preprocessor/preprocessor-experimental-overview?view=msvc-160#rescanning-replacement-list-for-macros

Adding a level on indirection makes the macro work correctly both on
clang/gcc and traditional MSVC.

Bug: 237053982
Change-Id: Ief839a1340f544147f91201835f89bbb05235b9b
diff --git a/include/perfetto/public/te_category_macros.h b/include/perfetto/public/te_category_macros.h
index e1511c9..a9f5071 100644
--- a/include/perfetto/public/te_category_macros.h
+++ b/include/perfetto/public/te_category_macros.h
@@ -63,7 +63,10 @@
 #pragma GCC system_header
 #endif
 
-#define PERFETTO_I_TE_CAT_DESCRIPTION(D, ...) D
+#define PERFETTO_I_TE_CAT_DESCRIPTION_GET(D, ...) D
+#define PERFETTO_I_TE_CAT_DESCRIPTION_CALL(MACRO, ARGS) MACRO ARGS
+#define PERFETTO_I_TE_CAT_DESCRIPTION(D, ...) \
+  PERFETTO_I_TE_CAT_DESCRIPTION_CALL(PERFETTO_I_TE_CAT_DESCRIPTION_GET, (D))
 
 #define PERFETTO_I_TE_CAT_NUM_TAGS_(A, B, C, D, E, N, ...) N
 #define PERFETTO_I_TE_CAT_NUM_TAGS(...) \
diff --git a/include/perfetto/public/te_macros.h b/include/perfetto/public/te_macros.h
index c67169b..f548238 100644
--- a/include/perfetto/public/te_macros.h
+++ b/include/perfetto/public/te_macros.h
@@ -40,11 +40,14 @@
 #define PERFETTO_I_TE_STATIC_ASSERT_NUM_PARAMS(...) \
   PERFETTO_I_TE_STATIC_ASSERT_NUM_PARAMS_(__VA_ARGS__, 0, 0, 0, 0, 0, 0)
 
-#define PERFETTO_I_TE_LIMIT_4(NAME_AND_TYPE1, NAME_AND_TYPE2, EXTRA1, EXTRA2, \
-                              EXTRA3, EXTRA4, ...)                            \
+#define PERFETTO_I_TE_LIMIT_4__(NAME_AND_TYPE1, NAME_AND_TYPE2, EXTRA1, \
+                                EXTRA2, EXTRA3, EXTRA4, ...)            \
   NAME_AND_TYPE1, NAME_AND_TYPE2, EXTRA1, EXTRA2, EXTRA3, EXTRA4
+#define PERFETTO_I_TE_LIMIT_4_(MACRO, ARGS) MACRO ARGS
+#define PERFETTO_I_TE_LIMIT_4(...) \
+  PERFETTO_I_TE_LIMIT_4_(PERFETTO_I_TE_LIMIT_4__, (__VA_ARGS__))
 
-// In C we have to use a compund literal. In C++ we can use a regular
+// In C we have to use a compound literal. In C++ we can use a regular
 // initializer.
 #ifndef __cplusplus
 #define PERFETTO_I_TE_HL_MACRO_PARAMS_PREAMBLE (struct PerfettoTeHlMacroParams)