-
-
Notifications
You must be signed in to change notification settings - Fork 338
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(sdk): Transfer large envelopes (tens of MB) over bridge without crash #2852
fix(sdk): Transfer large envelopes (tens of MB) over bridge without crash #2852
Conversation
iOS (legacy) Performance metrics 🚀
|
Revision | Plain | With Sentry | Diff |
---|---|---|---|
d0bf494+dirty | 1289.40 ms | 1298.40 ms | 9.00 ms |
3853f43+dirty | 1221.82 ms | 1242.64 ms | 20.82 ms |
e73f4ed+dirty | 1243.27 ms | 1244.52 ms | 1.25 ms |
9c48b2c+dirty | 1246.96 ms | 1255.73 ms | 8.77 ms |
27ef4ee+dirty | 1293.52 ms | 1296.08 ms | 2.56 ms |
6e8584e+dirty | 1274.50 ms | 1296.82 ms | 22.32 ms |
acadc0f+dirty | 1264.38 ms | 1290.06 ms | 25.68 ms |
8900e1a+dirty | 1210.27 ms | 1218.66 ms | 8.39 ms |
e2b64fe+dirty | 1232.22 ms | 1255.20 ms | 22.98 ms |
e5c9b8b+dirty | 1258.57 ms | 1267.32 ms | 8.75 ms |
App size
Revision | Plain | With Sentry | Diff |
---|---|---|---|
d0bf494+dirty | 2.36 MiB | 2.83 MiB | 481.15 KiB |
3853f43+dirty | 2.36 MiB | 2.85 MiB | 499.81 KiB |
e73f4ed+dirty | 2.36 MiB | 2.82 MiB | 469.44 KiB |
9c48b2c+dirty | 2.36 MiB | 2.85 MiB | 495.77 KiB |
27ef4ee+dirty | 2.36 MiB | 2.85 MiB | 500.03 KiB |
6e8584e+dirty | 2.36 MiB | 2.88 MiB | 533.17 KiB |
acadc0f+dirty | 2.36 MiB | 2.83 MiB | 480.37 KiB |
8900e1a+dirty | 2.36 MiB | 2.83 MiB | 479.25 KiB |
e2b64fe+dirty | 2.36 MiB | 2.85 MiB | 495.80 KiB |
e5c9b8b+dirty | 2.36 MiB | 2.87 MiB | 520.43 KiB |
Android (new) Performance metrics 🚀
|
Revision | Plain | With Sentry | Diff |
---|---|---|---|
d0bf494+dirty | 253.73 ms | 308.23 ms | 54.49 ms |
3853f43+dirty | 278.12 ms | 338.72 ms | 60.60 ms |
e73f4ed+dirty | 262.98 ms | 311.02 ms | 48.04 ms |
9c48b2c+dirty | 270.82 ms | 321.12 ms | 50.30 ms |
27ef4ee+dirty | 296.71 ms | 351.00 ms | 54.29 ms |
6e8584e+dirty | 383.37 ms | 400.84 ms | 17.47 ms |
acadc0f+dirty | 259.04 ms | 304.67 ms | 45.63 ms |
8900e1a+dirty | 371.40 ms | 377.70 ms | 6.31 ms |
e2b64fe+dirty | 258.82 ms | 304.26 ms | 45.44 ms |
e5c9b8b+dirty | 335.40 ms | 360.06 ms | 24.67 ms |
App size
Revision | Plain | With Sentry | Diff |
---|---|---|---|
d0bf494+dirty | 7.15 MiB | 8.04 MiB | 910.85 KiB |
3853f43+dirty | 7.15 MiB | 8.08 MiB | 959.34 KiB |
e73f4ed+dirty | 7.15 MiB | 8.09 MiB | 965.94 KiB |
9c48b2c+dirty | 7.15 MiB | 8.07 MiB | 947.16 KiB |
27ef4ee+dirty | 7.15 MiB | 8.08 MiB | 959.49 KiB |
6e8584e+dirty | 7.15 MiB | 8.13 MiB | 1002.18 KiB |
acadc0f+dirty | 7.15 MiB | 8.03 MiB | 903.20 KiB |
8900e1a+dirty | 7.15 MiB | 8.03 MiB | 901.79 KiB |
e2b64fe+dirty | 7.15 MiB | 8.07 MiB | 947.16 KiB |
e5c9b8b+dirty | 7.15 MiB | 8.10 MiB | 980.41 KiB |
@krystofwoldrich if the size is a problem, base64 is 1/3 bigger than the raw array of bytes by definition. |
1 similar comment
@krystofwoldrich if the size is a problem, base64 is 1/3 bigger than the raw array of bytes by definition. |
@marandaneto I've checked how FS libraries are handling this, as they also need to transfer large binary data and they do it the same. |
The thing is that the bigger, the more the overhead of serialization/deserialization to base64. |
In our case, it's a bytes array so this length represents about 200 KB envelope. |
If this has to be fixed ASAP, go for it, otherwise, I'd consider trying to get feedback on facebook/hermes#994 just to be sure we are doing the right thing. |
It affects only Hermes dev builds, so I will wait for the facebook/hermes#994 resolution. |
This pull request has gone three weeks without activity. In another week, I will close it. But! If you comment or otherwise update it, I will reset the clock, and if you label it "A weed is but an unloved flower." ― Ella Wheeler Wilcox 🥀 |
Closing this as the bug only happens in dev env and by fixing facebook/hermes#994 in Hermes, there should not be any changes required on our end. |
…pe-malformed-js-call
Android (legacy) Performance metrics 🚀
|
Revision | Plain | With Sentry | Diff |
---|---|---|---|
e5c9b8b | 409.02 ms | 426.66 ms | 17.64 ms |
d0bf494+dirty | 375.37 ms | 395.14 ms | 19.77 ms |
575f9da | 415.26 ms | 422.98 ms | 7.72 ms |
0db0c72 | 372.12 ms | 386.00 ms | 13.88 ms |
e73f4ed+dirty | 332.96 ms | 354.33 ms | 21.37 ms |
acadc0f+dirty | 373.24 ms | 381.51 ms | 8.27 ms |
8900e1a+dirty | 430.68 ms | 456.13 ms | 25.44 ms |
3ffcddd | 302.92 ms | 315.80 ms | 12.88 ms |
d361d38 | 354.10 ms | 381.69 ms | 27.59 ms |
f06c879 | 408.41 ms | 424.54 ms | 16.13 ms |
App size
Revision | Plain | With Sentry | Diff |
---|---|---|---|
e5c9b8b | 17.73 MiB | 19.83 MiB | 2.10 MiB |
d0bf494+dirty | 17.73 MiB | 19.75 MiB | 2.02 MiB |
575f9da | 17.73 MiB | 19.83 MiB | 2.10 MiB |
0db0c72 | 17.73 MiB | 19.75 MiB | 2.02 MiB |
e73f4ed+dirty | 17.73 MiB | 20.04 MiB | 2.31 MiB |
acadc0f+dirty | 17.73 MiB | 19.75 MiB | 2.01 MiB |
8900e1a+dirty | 17.73 MiB | 19.75 MiB | 2.01 MiB |
3ffcddd | 17.73 MiB | 19.75 MiB | 2.02 MiB |
d361d38 | 17.73 MiB | 19.81 MiB | 2.08 MiB |
f06c879 | 17.73 MiB | 19.85 MiB | 2.12 MiB |
iOS (new) Performance metrics 🚀
|
Revision | Plain | With Sentry | Diff |
---|---|---|---|
d0bf494+dirty | 1266.20 ms | 1267.52 ms | 1.32 ms |
3853f43+dirty | 1271.74 ms | 1278.04 ms | 6.30 ms |
e73f4ed+dirty | 1282.90 ms | 1309.30 ms | 26.40 ms |
9c48b2c+dirty | 1253.39 ms | 1256.30 ms | 2.91 ms |
27ef4ee+dirty | 1236.41 ms | 1244.90 ms | 8.49 ms |
6e8584e+dirty | 1271.71 ms | 1281.26 ms | 9.55 ms |
acadc0f+dirty | 1271.12 ms | 1272.28 ms | 1.16 ms |
8900e1a+dirty | 1268.36 ms | 1273.04 ms | 4.68 ms |
e2b64fe+dirty | 1285.78 ms | 1297.56 ms | 11.78 ms |
e5c9b8b+dirty | 1276.90 ms | 1280.92 ms | 4.02 ms |
App size
Revision | Plain | With Sentry | Diff |
---|---|---|---|
d0bf494+dirty | 2.92 MiB | 3.40 MiB | 488.08 KiB |
3853f43+dirty | 2.92 MiB | 3.41 MiB | 503.54 KiB |
e73f4ed+dirty | 2.92 MiB | 3.38 MiB | 475.71 KiB |
9c48b2c+dirty | 2.92 MiB | 3.41 MiB | 499.97 KiB |
27ef4ee+dirty | 2.92 MiB | 3.41 MiB | 503.72 KiB |
6e8584e+dirty | 2.92 MiB | 3.44 MiB | 536.52 KiB |
acadc0f+dirty | 2.92 MiB | 3.39 MiB | 487.34 KiB |
8900e1a+dirty | 2.92 MiB | 3.39 MiB | 485.96 KiB |
e2b64fe+dirty | 2.92 MiB | 3.41 MiB | 499.97 KiB |
e5c9b8b+dirty | 2.92 MiB | 3.43 MiB | 524.50 KiB |
With the recent addition of native profiling, the SDK crashes on the byte array size limit more often than before. Therefore we should address this. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
@krystofwoldrich & team: Thanks for merging this, when will this be released? Do you know if there is a tag that I can use while on? |
@yogendrajs this was released with version 5.15.0 |
📢 Type of change
📜 Description
Arrays larger than
196603
will crash RN Bridge, params of the called function will disappear andMalformed JS Call
error will be thrown. Since we support attachments 200KB can be easily reached.The implementation was tested using generated large data.
Android simulator was sending 20MB successfully larger envelops started crashing the app (50MB and more)
iOS simulator was sending envelopes up to 60MB without problems.
💡 Motivation and Context
closes: #2744
💚 How did you test it?
sample app, unit tests
📝 Checklist
sendDefaultPII
is enabled🔮 Next steps