55import com .facebook .react .bridge .ReactContext ;
66import com .facebook .react .util .RNLog ;
77import com .facebook .soloader .SoLoader ;
8+ import com .facebook .systrace .Systrace ;
89
910import org .json .JSONArray ;
1011import org .json .JSONException ;
@@ -31,46 +32,58 @@ public MarkdownParser(@NonNull ReactContext reactContext) {
3132 private native String nativeParse (String text , int parserId );
3233
3334 public synchronized List <MarkdownRange > parse (String text , int parserId ) {
34- if (text .equals (mPrevText ) && parserId == mPrevParserId ) {
35- return mPrevMarkdownRanges ;
36- }
37-
38- String json ;
3935 try {
40- json = nativeParse (text , parserId );
41- } catch (Exception e ) {
42- // Skip formatting, runGuarded will show the error in LogBox
43- mPrevText = text ;
44- mPrevParserId = parserId ;
45- mPrevMarkdownRanges = Collections .emptyList ();
46- return mPrevMarkdownRanges ;
47- }
36+ Systrace .beginSection (0 , "parse" );
4837
49- List <MarkdownRange > markdownRanges = new LinkedList <>();
50- try {
51- JSONArray ranges = new JSONArray (json );
52- for (int i = 0 ; i < ranges .length (); i ++) {
53- JSONObject range = ranges .getJSONObject (i );
54- String type = range .getString ("type" );
55- int start = range .getInt ("start" );
56- int length = range .getInt ("length" );
57- int depth = range .optInt ("depth" , 1 );
58- if (length == 0 || start + length > text .length ()) {
59- continue ;
38+ if (text .equals (mPrevText ) && parserId == mPrevParserId ) {
39+ return mPrevMarkdownRanges ;
40+ }
41+
42+ String json ;
43+ try {
44+ Systrace .beginSection (0 , "nativeParse" );
45+ json = nativeParse (text , parserId );
46+ } catch (Exception e ) {
47+ // Skip formatting, runGuarded will show the error in LogBox
48+ mPrevText = text ;
49+ mPrevParserId = parserId ;
50+ mPrevMarkdownRanges = Collections .emptyList ();
51+ return mPrevMarkdownRanges ;
52+ } finally {
53+ Systrace .endSection (0 );
54+ }
55+
56+ List <MarkdownRange > markdownRanges = new LinkedList <>();
57+ try {
58+ Systrace .beginSection (0 , "markdownRanges" );
59+ JSONArray ranges = new JSONArray (json );
60+ for (int i = 0 ; i < ranges .length (); i ++) {
61+ JSONObject range = ranges .getJSONObject (i );
62+ String type = range .getString ("type" );
63+ int start = range .getInt ("start" );
64+ int length = range .getInt ("length" );
65+ int depth = range .optInt ("depth" , 1 );
66+ if (length == 0 || start + length > text .length ()) {
67+ continue ;
68+ }
69+ markdownRanges .add (new MarkdownRange (type , start , length , depth ));
6070 }
61- markdownRanges .add (new MarkdownRange (type , start , length , depth ));
71+ } catch (JSONException e ) {
72+ RNLog .w (mReactContext , "[react-native-live-markdown] Incorrect schema of worklet parser output: " + e .getMessage ());
73+ mPrevText = text ;
74+ mPrevParserId = parserId ;
75+ mPrevMarkdownRanges = Collections .emptyList ();
76+ return mPrevMarkdownRanges ;
77+ } finally {
78+ Systrace .endSection (0 );
6279 }
63- } catch (JSONException e ) {
64- RNLog .w (mReactContext , "[react-native-live-markdown] Incorrect schema of worklet parser output: " + e .getMessage ());
80+
6581 mPrevText = text ;
6682 mPrevParserId = parserId ;
67- mPrevMarkdownRanges = Collections . emptyList () ;
83+ mPrevMarkdownRanges = markdownRanges ;
6884 return mPrevMarkdownRanges ;
85+ } finally {
86+ Systrace .endSection (0 );
6987 }
70-
71- mPrevText = text ;
72- mPrevParserId = parserId ;
73- mPrevMarkdownRanges = markdownRanges ;
74- return mPrevMarkdownRanges ;
7588 }
7689}
0 commit comments