From 4d324075e95ea0f75e90f1e1b33ad01918cc9c67 Mon Sep 17 00:00:00 2001 From: Mihaela Ogrezeanu Date: Tue, 19 Nov 2019 10:26:30 -0800 Subject: [PATCH] Show caller stack trace Summary: On Android, the stack trace looks different so we don't need to use the Regex we use on iOS. We can simply display all the lines in the trace. Reviewed By: pasqualeanatriello Differential Revision: D17181400 fbshipit-source-id: e471da17b89806a161edc7edcf05ac6faed44bf0 --- .../plugins/sections/ChangesetDebug.java | 6 ++++-- .../plugins/sections/SectionsFlipperPlugin.java | 17 +++++++++++++++-- src/plugins/sections/Models.js | 1 + src/plugins/sections/StackTrace.js | 13 +++++++++++++ src/plugins/sections/index.js | 7 ++++++- 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/sections/ChangesetDebug.java b/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/sections/ChangesetDebug.java index 8c44fbf82..cc9a5120e 100644 --- a/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/sections/ChangesetDebug.java +++ b/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/sections/ChangesetDebug.java @@ -40,7 +40,8 @@ public class ChangesetDebug implements ChangesetDebugListener { String surfaceId, String id, FlipperArray tree, - FlipperObject changesetData); + FlipperObject changesetData, + StackTraceElement[] trace); } public static void setListener(ChangesetListener listener) { @@ -103,7 +104,8 @@ public class ChangesetDebug implements ChangesetDebugListener { surfaceId, sChangesetIdGenerator.incrementAndGet() + "-" + surfaceId, tree.build(), - changesetData.build()); + changesetData.build(), + changesetDebugInfo.getStackTrace()); } private static boolean isEventAsync(@ApplyNewChangeSet int source) { diff --git a/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/sections/SectionsFlipperPlugin.java b/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/sections/SectionsFlipperPlugin.java index cfe36f6df..95e47b2f5 100644 --- a/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/sections/SectionsFlipperPlugin.java +++ b/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/sections/SectionsFlipperPlugin.java @@ -62,7 +62,8 @@ public class SectionsFlipperPlugin implements FlipperPlugin, ChangesetListener { String surfaceId, String id, FlipperArray tree, - FlipperObject changesetData) { + FlipperObject changesetData, + StackTraceElement[] trace) { if (mConnection == null) { return; } @@ -84,7 +85,9 @@ public class SectionsFlipperPlugin implements FlipperPlugin, ChangesetListener { .put("reason", reason) .put("surface_key", surfaceId) .put("tree_generation_timestamp", 10000) // TODO - .put("stack_trace", new FlipperArray.Builder().build()) + .put("payload", new FlipperObject.Builder().build()) + .put("stack_trace", getStackTrace(trace)) + .put("skip_stack_trace_format", true) .put("payload", eventPayloadBuilder.build()) .build()); @@ -122,4 +125,14 @@ public class SectionsFlipperPlugin implements FlipperPlugin, ChangesetListener { .put("changeset", changesetData) .build()); } + + private FlipperArray getStackTrace(StackTraceElement[] trace) { + final FlipperArray.Builder builder = new FlipperArray.Builder(); + + for (StackTraceElement element : trace) { + builder.put(element.toString() + "\n"); + } + + return builder.build(); + } } diff --git a/src/plugins/sections/Models.js b/src/plugins/sections/Models.js index a093552ac..9cb04b565 100644 --- a/src/plugins/sections/Models.js +++ b/src/plugins/sections/Models.js @@ -16,6 +16,7 @@ export type AddEventPayload = {| id: string, reason: string, stack_trace: Array, + skip_stack_trace_format?: boolean, surface_key: string, event_timestamp: number, update_mode: number, diff --git a/src/plugins/sections/StackTrace.js b/src/plugins/sections/StackTrace.js index 3c4526084..e1cf590e0 100644 --- a/src/plugins/sections/StackTrace.js +++ b/src/plugins/sections/StackTrace.js @@ -22,10 +22,23 @@ function isSystemLibrary(libraryName: ?string): boolean { type Props = { data: Array, + skip_stack_trace_format?: boolean, }; export default class extends React.Component { render() { + if (this.props.skip_stack_trace_format) { + return ( + + {this.props.data.map(stack_trace_line => { + return { + caller: stack_trace_line, + }; + })} + + ); + } + return ( {/* We need to filter out from the stack trace any reference to the plugin such that the information is more coincised and focused */} diff --git a/src/plugins/sections/index.js b/src/plugins/sections/index.js index 61f9787f8..436850ebb 100644 --- a/src/plugins/sections/index.js +++ b/src/plugins/sections/index.js @@ -284,7 +284,12 @@ export default class extends FlipperPlugin { {this.renderTreeHierarchy(focusedTreeGeneration)} {focusedTreeGeneration && ( - + )}