src/core. exec_ctx is now a thread_local pointer of type ExecCtx instead of
grpc_exec_ctx which is initialized whenever ExecCtx is instantiated. ExecCtx
also keeps track of the previous exec_ctx so that nesting of exec_ctx is
allowed. This means that there is only one exec_ctx being used at any
time. Also, grpc_exec_ctx_finish is called in the destructor of the
object, and the previous exec_ctx is restored to avoid breaking current
functionality. The code still explicitly calls grpc_exec_ctx_finish
because removing all such instances causes the code to break.
Most core end2end tests are written around a single RPC with an explicit
deadline. Currently, this deadline is calculated before bringing up the
test fixture, and thus time spent bringing up the test fixture is taken
from the time allotted to the RPC.
This change moves the calculation of these deadlines immediately before
call creation. Additionally, the functions that calculate these
deadlines have been renamed from 'xx_seconds_time()' to
'xx_seconds_from_now()' for clarity.
Setting the newly added compression_level field of
grpc_op::send_initial_metadata by a server now has the effect of
applying that compression level for the subsequent call messages leaving
the server. The ultimate meaning of the level depends on the client's
supported compression algorithms.