Great question. This is part of our code-generation layering, actually. We have a requirement that generated code can only include headers in the impl/codegen directories, including transitively. This has long been part of our story for supporting code generation for multiple platforms. At the same time, we've tried to reduce the number of headers in those directories, especially in the Core surface. I don't have a measurement on the performance impact if we were to move grpc_empty_slice etc to the impl/codegen directory, but this overhead doesn't seem to show up noticeably in our performance profiles.
Thanks,
Vijay