Index: gm/gm.h |
diff --git a/gm/gm.h b/gm/gm.h |
index e00a650f3352b241b6bccc628f9cda6068028a58..6fe59c2726ad6353ff6a8014bd0d90bb3e1d8235 100644 |
--- a/gm/gm.h |
+++ b/gm/gm.h |
@@ -34,10 +34,20 @@ struct GrContextOptions; |
DEF_SIMPLE_GM_BG_NAME(NAME, CANVAS, W, H, SK_ColorWHITE, SkString(#NAME)) |
#define DEF_SIMPLE_GM_BG(NAME, CANVAS, W, H, BGCOLOR)\ |
DEF_SIMPLE_GM_BG_NAME(NAME, CANVAS, W, H, BGCOLOR, SkString(#NAME)) |
-#define DEF_SIMPLE_GM_BG_NAME(NAME, CANVAS, W, H, BGCOLOR, NAME_STR) \ |
- static void SK_MACRO_CONCAT(NAME, _GM)(SkCanvas * CANVAS); \ |
- DEF_GM(return new skiagm::SimpleGM(NAME_STR, SK_MACRO_CONCAT(NAME, _GM), \ |
- SkISize::Make(W, H), BGCOLOR);) \ |
+ |
+// Disable tail calls in Simple GM functions to make sure they appear on any stack trace. |
+#if defined(__clang__) |
+ #define DISABLE_TAIL_CALLS __attribute__((optnone)) |
+#elif defined(__GNUC__) |
+ #define DISABLE_TAIL_CALLS __attribute__((optimize("-O1"))) |
+#else |
+ #define DISABLE_TAIL_CALLS /*TODO: MSVC*/ |
+#endif |
+ |
+#define DEF_SIMPLE_GM_BG_NAME(NAME, CANVAS, W, H, BGCOLOR, NAME_STR) \ |
+ static void DISABLE_TAIL_CALLS SK_MACRO_CONCAT(NAME, _GM)(SkCanvas * CANVAS); \ |
+ DEF_GM(return new skiagm::SimpleGM(NAME_STR, SK_MACRO_CONCAT(NAME, _GM), \ |
+ SkISize::Make(W, H), BGCOLOR);) \ |
void SK_MACRO_CONCAT(NAME, _GM)(SkCanvas * CANVAS) |
namespace skiagm { |