|  | # QUIC platform API | 
|  |  | 
|  | This directory contains the infrastructure blocks needed to support QUIC in | 
|  | certain platform. These APIs act as interaction layers between QUIC core and | 
|  | either the upper layer application (i.e. Chrome, Envoy) or the platform's own | 
|  | infrastructure (i.e. logging, test framework and system IO). QUIC core needs the | 
|  | implementations of these APIs to build and function appropriately. There is | 
|  | unidirectional dependency from QUIC core to most of the APIs here, such as | 
|  | QUIC_LOG and QuicMutex, but a few APIs also depend back on QUIC core's basic | 
|  | QUIC data types, such as QuicClock and QuicSleep. | 
|  |  | 
|  | -   APIs used by QUIC core: | 
|  |  | 
|  | Most APIs are used by QUIC core to interact with platform infrastructure | 
|  | (i.e. QUIC_LOG) or to wrap around platform dependent data types (i.e. | 
|  | QuicThread), the dependency is: | 
|  |  | 
|  | ``` | 
|  | application -> quic_core -> quic_platform_api | 
|  | |                             | | 
|  | v                             v | 
|  | platform_infrastructure <- quic_platform_impl | 
|  | ``` | 
|  |  | 
|  | -   APIs used by applications: | 
|  |  | 
|  | Some APIs are used by applications to interact with QUIC core (i.e. | 
|  | QuicMemSlice). For such APIs, their dependency model is: | 
|  |  | 
|  | ``` | 
|  | application -> quic_core -> quic_platform_api | 
|  | |                            ^ | 
|  | |                            | | 
|  | -------------------> quic_platform_impl | 
|  | |                            | | 
|  | |                            v | 
|  | -------------------> platform_infrastructure | 
|  | ``` | 
|  |  | 
|  |         An example for such dependency | 
|  | is QuicClock. | 
|  |  | 
|  |         Or | 
|  |  | 
|  | ``` | 
|  | application -> quic_core -> quic_platform_api | 
|  | |                            ^ | 
|  | |                            | | 
|  | |                            v | 
|  | -------------------> quic_platform_impl | 
|  | |                            | | 
|  | |                            v | 
|  | -------------------> platform_infrastructure | 
|  | ``` | 
|  |  | 
|  |         An example for such dependency | 
|  | is QuicMemSlice. | 
|  |  | 
|  | # Documentation of each API and its usage. | 
|  |  | 
|  | QuicMemSlice | 
|  | :   QuicMemSlice is used to wrap application data and pass to QUIC stream's | 
|  | write interface. It refers to a memory block of data which should be around | 
|  | till QuicMemSlice::Reset() is called. It's upto each platform, to implement | 
|  | it as reference counted or not. | 
|  |  | 
|  | QuicClock | 
|  | :   QuicClock is used by QUIC core to get current time. Its instance is created | 
|  | by applications and passed into QuicDispatcher and | 
|  | QuicConnectionHelperInterface. | 
|  |  | 
|  | TODO(b/131224336) add document for other APIs |