breaking: reduce combined response cutoff to 16 MB (#987)

* breaking: reduce combined response cutoff to 16 MB
* rename `MAX_PAYLOAD_SIZE` to `COMBINED_RESPONSE_CUTOFF`
* update some comments
* cleanup: split `if` statements into multiple lines
This commit is contained in:
Chris Brody 2020-06-09 19:48:33 -04:00 committed by GitHub
parent 305cb2cdd5
commit dead4b4ab6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -36,10 +36,11 @@ public class NativeToJsMessageQueue {
// exec() is asynchronous. Set this to true when running bridge benchmarks. // exec() is asynchronous. Set this to true when running bridge benchmarks.
static final boolean DISABLE_EXEC_CHAINING = false; static final boolean DISABLE_EXEC_CHAINING = false;
// Arbitrarily chosen upper limit for how much data to send to JS in one shot. // A hopefully reasonable upper limit of how much combined payload data
// This currently only chops up on message boundaries. It may be useful // to send to the JavaScript in one shot.
// to allow it to break up messages. // This currently only chops up on message boundaries.
private static int MAX_PAYLOAD_SIZE = 50 * 1024 * 10240; // It may be useful to split and reassemble response messages someday.
private static int COMBINED_RESPONSE_CUTOFF = 16 * 1024 * 1024;
/** /**
* When true, the active listener is not fired upon enqueue. When set to false, * When true, the active listener is not fired upon enqueue. When set to false,
@ -124,7 +125,10 @@ public class NativeToJsMessageQueue {
/** /**
* Combines and returns queued messages combined into a single string. * Combines and returns queued messages combined into a single string.
* Combines as many messages as possible, while staying under MAX_PAYLOAD_SIZE. *
* Combines as many messages as possible, without exceeding
* COMBINED_RESPONSE_CUTOFF in case of multiple response messages.
*
* Returns null if the queue is empty. * Returns null if the queue is empty.
*/ */
public String popAndEncode(boolean fromOnlineEvent) { public String popAndEncode(boolean fromOnlineEvent) {
@ -140,7 +144,10 @@ public class NativeToJsMessageQueue {
int numMessagesToSend = 0; int numMessagesToSend = 0;
for (JsMessage message : queue) { for (JsMessage message : queue) {
int messageSize = calculatePackedMessageLength(message); int messageSize = calculatePackedMessageLength(message);
if (numMessagesToSend > 0 && totalPayloadLen + messageSize > MAX_PAYLOAD_SIZE && MAX_PAYLOAD_SIZE > 0) { if (numMessagesToSend > 0 &&
COMBINED_RESPONSE_CUTOFF > 0 &&
totalPayloadLen + messageSize > COMBINED_RESPONSE_CUTOFF
) {
break; break;
} }
totalPayloadLen += messageSize; totalPayloadLen += messageSize;
@ -175,7 +182,10 @@ public class NativeToJsMessageQueue {
int numMessagesToSend = 0; int numMessagesToSend = 0;
for (JsMessage message : queue) { for (JsMessage message : queue) {
int messageSize = message.calculateEncodedLength() + 50; // overestimate. int messageSize = message.calculateEncodedLength() + 50; // overestimate.
if (numMessagesToSend > 0 && totalPayloadLen + messageSize > MAX_PAYLOAD_SIZE && MAX_PAYLOAD_SIZE > 0) { if (numMessagesToSend > 0 &&
COMBINED_RESPONSE_CUTOFF > 0 &&
totalPayloadLen + messageSize > COMBINED_RESPONSE_CUTOFF
) {
break; break;
} }
totalPayloadLen += messageSize; totalPayloadLen += messageSize;