Removing unnecessary use of Math.ceil in HTTP/2 priority algorithm.
Motivation: We're currently using Math.ceil which isn't necessary. We should exchange for a lighter weight operation. Modifications: Changing the logic to just ensure that we allocate at least one byte to the child rather than always performing a ceil. Result: Slight performance improvement in the priority algorithm.
This commit is contained in:
parent
9737cc6cc9
commit
ba9f214303
@ -235,8 +235,10 @@ public class DefaultHttp2RemoteFlowController implements Http2RemoteFlowControll
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This will allocate bytes by stream weight and priority for the entire tree rooted at {@code parent}, but does
|
* This will allocate bytes by stream weight and priority for the entire tree rooted at {@code parent}, but does not
|
||||||
* not write any bytes.
|
* write any bytes. The connection window is generally distributed amongst siblings according to their weight,
|
||||||
|
* however we need to ensure that the entire connection window is used (assuming streams have >= connection window
|
||||||
|
* bytes to send) and we may need some sort of rounding to accomplish this.
|
||||||
*
|
*
|
||||||
* @param parent The parent of the tree.
|
* @param parent The parent of the tree.
|
||||||
* @param connectionWindow The connection window this is available for use at this point in the tree.
|
* @param connectionWindow The connection window this is available for use at this point in the tree.
|
||||||
@ -282,7 +284,10 @@ public class DefaultHttp2RemoteFlowController implements Http2RemoteFlowControll
|
|||||||
int weight = child.weight();
|
int weight = child.weight();
|
||||||
double weightRatio = weight / (double) totalWeight;
|
double weightRatio = weight / (double) totalWeight;
|
||||||
|
|
||||||
int bytesForTree = Math.min(nextConnectionWindow, (int) Math.ceil(connectionWindow * weightRatio));
|
// In order to make progress toward the connection window due to possible rounding errors, we make sure
|
||||||
|
// that each stream (with data to send) is given at least 1 byte toward the connection window.
|
||||||
|
int connectionWindowChunk = Math.max(1, (int) (connectionWindow * weightRatio));
|
||||||
|
int bytesForTree = Math.min(nextConnectionWindow, connectionWindowChunk);
|
||||||
int bytesForChild = Math.min(state.streamableBytes(), bytesForTree);
|
int bytesForChild = Math.min(state.streamableBytes(), bytesForTree);
|
||||||
|
|
||||||
if (bytesForChild > 0) {
|
if (bytesForChild > 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user