This class is populated by FlowController, which will record throttling events. Currently it
only keeps the last flow control event, but it could be expanded to record more information in
the future. The events can be used to dynamically adjust concurrency in the client. For example:
// Increase flow control limits if there was throttling in the past 5 minutes and throttled time// was longer than 1 minute.while(true){FlowControlEventevent=flowControlEventStats.getLastFlowControlEvent();if(event!=null && event.getTimestampMs() > System.currentMillis()-TimeUnit.MINUTES.toMillis(5) && event.getThrottledTimeInMs() > TimeUnit.MINUTES.toMillis(1)){flowController.increaseThresholds(elementSteps,byteSteps);}Thread.sleep(TimeUnit.MINUTE.toMillis(10));}
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-28 UTC."],[[["\u003cp\u003eThis webpage lists various versions of \u003ccode\u003eFlowControlEventStats\u003c/code\u003e, a Java class used to record statistics of flow control events, with the latest version being 2.63.1.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eFlowControlEventStats\u003c/code\u003e is designed to track throttling events and is populated by \u003ccode\u003eFlowController\u003c/code\u003e, and it currently retains the last flow control event, but has the potential to store more details.\u003c/p\u003e\n"],["\u003cp\u003eThe recorded events can be used to adjust the concurrency of the client, for example, increasing flow control limits if throttling has occurred within a specific time frame and duration.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eFlowControlEventStats\u003c/code\u003e inherits from \u003ccode\u003ejava.lang.Object\u003c/code\u003e and includes methods like \u003ccode\u003egetLastFlowControlEvent()\u003c/code\u003e, along with the inherited members such as \u003ccode\u003eclone()\u003c/code\u003e, \u003ccode\u003eequals()\u003c/code\u003e, and \u003ccode\u003ehashCode()\u003c/code\u003e, among others, from the Object class.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003egetLastFlowControlEvent()\u003c/code\u003e method returns a \u003ccode\u003eFlowControlEventStats.FlowControlEvent\u003c/code\u003e, giving access to the most recent recorded flow control event.\u003c/p\u003e\n"]]],[],null,["# Class FlowControlEventStats (2.69.0)\n\nVersion latestkeyboard_arrow_down\n\n- [2.69.0 (latest)](/java/docs/reference/gax/latest/com.google.api.gax.batching.FlowControlEventStats)\n- [2.68.2](/java/docs/reference/gax/2.68.2/com.google.api.gax.batching.FlowControlEventStats)\n- [2.67.0](/java/docs/reference/gax/2.67.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.66.0](/java/docs/reference/gax/2.66.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.65.0](/java/docs/reference/gax/2.65.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.63.1](/java/docs/reference/gax/2.63.1/com.google.api.gax.batching.FlowControlEventStats)\n- [2.62.0](/java/docs/reference/gax/2.62.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.61.0](/java/docs/reference/gax/2.61.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.60.0](/java/docs/reference/gax/2.60.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.59.1](/java/docs/reference/gax/2.59.1/com.google.api.gax.batching.FlowControlEventStats)\n- [2.58.0](/java/docs/reference/gax/2.58.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.57.0](/java/docs/reference/gax/2.57.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.55.0](/java/docs/reference/gax/2.55.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.54.1](/java/docs/reference/gax/2.54.1/com.google.api.gax.batching.FlowControlEventStats)\n- [2.53.0](/java/docs/reference/gax/2.53.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.52.0](/java/docs/reference/gax/2.52.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.51.0](/java/docs/reference/gax/2.51.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.50.0](/java/docs/reference/gax/2.50.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.49.0](/java/docs/reference/gax/2.49.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.48.1](/java/docs/reference/gax/2.48.1/com.google.api.gax.batching.FlowControlEventStats)\n- [2.47.0](/java/docs/reference/gax/2.47.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.46.1](/java/docs/reference/gax/2.46.1/com.google.api.gax.batching.FlowControlEventStats)\n- [2.45.0](/java/docs/reference/gax/2.45.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.43.0](/java/docs/reference/gax/2.43.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.42.0](/java/docs/reference/gax/2.42.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.41.0](/java/docs/reference/gax/2.41.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.39.0](/java/docs/reference/gax/2.39.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.38.0](/java/docs/reference/gax/2.38.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.37.0](/java/docs/reference/gax/2.37.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.36.0](/java/docs/reference/gax/2.36.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.35.0](/java/docs/reference/gax/2.35.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.34.1](/java/docs/reference/gax/2.34.1/com.google.api.gax.batching.FlowControlEventStats)\n- [2.33.0](/java/docs/reference/gax/2.33.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.32.1](/java/docs/reference/gax/2.32.1/com.google.api.gax.batching.FlowControlEventStats)\n- [2.31.1](/java/docs/reference/gax/2.31.1/com.google.api.gax.batching.FlowControlEventStats)\n- [2.30.1](/java/docs/reference/gax/2.30.1/com.google.api.gax.batching.FlowControlEventStats)\n- [2.24.0](/java/docs/reference/gax/2.24.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.23.3](/java/docs/reference/gax/2.23.3/com.google.api.gax.batching.FlowControlEventStats)\n- [2.22.0](/java/docs/reference/gax/2.22.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.21.0](/java/docs/reference/gax/2.21.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.20.1](/java/docs/reference/gax/2.20.1/com.google.api.gax.batching.FlowControlEventStats)\n- [2.19.6](/java/docs/reference/gax/2.19.6/com.google.api.gax.batching.FlowControlEventStats)\n- [2.18.7](/java/docs/reference/gax/2.18.7/com.google.api.gax.batching.FlowControlEventStats)\n- [2.17.0](/java/docs/reference/gax/2.17.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.16.0](/java/docs/reference/gax/2.16.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.15.0](/java/docs/reference/gax/2.15.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.14.0](/java/docs/reference/gax/2.14.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.13.0](/java/docs/reference/gax/2.13.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.12.2](/java/docs/reference/gax/2.12.2/com.google.api.gax.batching.FlowControlEventStats)\n- [2.11.0](/java/docs/reference/gax/2.11.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.10.0](/java/docs/reference/gax/2.10.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.9.0](/java/docs/reference/gax/2.9.0/com.google.api.gax.batching.FlowControlEventStats)\n- [2.8.1](/java/docs/reference/gax/2.8.1/com.google.api.gax.batching.FlowControlEventStats)\n- [2.7.1](/java/docs/reference/gax/2.7.1/com.google.api.gax.batching.FlowControlEventStats) \n\n public class FlowControlEventStats\n\nRecord the statistics of flow control events.\n\nThis class is populated by FlowController, which will record throttling events. Currently it\nonly keeps the last flow control event, but it could be expanded to record more information in\nthe future. The events can be used to dynamically adjust concurrency in the client. For example: \n\n\n // Increase flow control limits if there was throttling in the past 5 minutes and throttled time\n // was longer than 1 minute.\n while(true) {\n FlowControlEvent event = flowControlEventStats.getLastFlowControlEvent();\n if (event != null\n && event.getTimestampMs() \u003e System.currentMillis() - TimeUnit.MINUTES.toMillis(5)\n && event.getThrottledTimeInMs() \u003e TimeUnit.MINUTES.toMillis(1)) {\n flowController.increaseThresholds(elementSteps, byteSteps);\n }\n Thread.sleep(TimeUnit.MINUTE.toMillis(10));\n }\n \nInheritance\n-----------\n\n[java.lang.Object](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html) \\\u003e FlowControlEventStats \n\nInherited Members\n-----------------\n\n[Object.clone()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--) \n[Object.equals(Object)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-) \n[Object.finalize()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--) \n[Object.getClass()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--) \n[Object.hashCode()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--) \n[Object.notify()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--) \n[Object.notifyAll()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--) \n[Object.toString()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--) \n[Object.wait()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--) \n[Object.wait(long)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-) \n[Object.wait(long,int)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-)\n\nConstructors\n------------\n\n### FlowControlEventStats()\n\n public FlowControlEventStats()\n\nMethods\n-------\n\n### getLastFlowControlEvent()\n\n public FlowControlEventStats.FlowControlEvent getLastFlowControlEvent()"]]