diff --git a/BUILD b/BUILD
index a19631e6df608f6955bfb5a63f86e6a5a78563ba..a958922e46404b083c0c4da762d0ed0722c606c7 100644
--- a/BUILD
+++ b/BUILD
@@ -383,6 +383,7 @@ cc_library(
     "src/core/census/context.c",
     "src/core/census/initialize.c",
     "src/core/census/record_stat.c",
+    "src/core/census/tracing.c",
   ],
   hdrs = [
     "include/grpc/grpc_security.h",
@@ -618,6 +619,7 @@ cc_library(
     "src/core/census/context.c",
     "src/core/census/initialize.c",
     "src/core/census/record_stat.c",
+    "src/core/census/tracing.c",
   ],
   hdrs = [
     "include/grpc/byte_buffer.h",
@@ -1101,6 +1103,7 @@ objc_library(
     "src/core/census/context.c",
     "src/core/census/initialize.c",
     "src/core/census/record_stat.c",
+    "src/core/census/tracing.c",
   ],
   hdrs = [
     "include/grpc/grpc_security.h",
diff --git a/Makefile b/Makefile
index 996fcfa1fc4aaa23fb97586223d315f331db400f..65840bb59105603094b359efe17bf78911d08289 100644
--- a/Makefile
+++ b/Makefile
@@ -3615,6 +3615,7 @@ LIBGRPC_SRC = \
     src/core/census/context.c \
     src/core/census/initialize.c \
     src/core/census/record_stat.c \
+    src/core/census/tracing.c \
 
 PUBLIC_HEADERS_C += \
     include/grpc/grpc_security.h \
@@ -3880,6 +3881,7 @@ LIBGRPC_UNSECURE_SRC = \
     src/core/census/context.c \
     src/core/census/initialize.c \
     src/core/census/record_stat.c \
+    src/core/census/tracing.c \
 
 PUBLIC_HEADERS_C += \
     include/grpc/byte_buffer.h \
diff --git a/build.json b/build.json
index dd633070ff9f2d6d537fccc5b23fba253eb60642..b053e47ae050fe05f27d2873f80ec9d9b83944c7 100644
--- a/build.json
+++ b/build.json
@@ -24,7 +24,8 @@
       "src": [
         "src/core/census/context.c",
         "src/core/census/initialize.c",
-        "src/core/census/record_stat.c"
+        "src/core/census/record_stat.c",
+        "src/core/census/tracing.c"
       ]
     },
     {
diff --git a/gRPC.podspec b/gRPC.podspec
index f47b44fe9d654203acd91e4839c752fbf39b6432..63394dbd39e129af6388ec63fc217da35bf182c6 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -391,7 +391,8 @@ Pod::Spec.new do |s|
                       'src/core/transport/transport_op_string.c',
                       'src/core/census/context.c',
                       'src/core/census/initialize.c',
-                      'src/core/census/record_stat.c'
+                      'src/core/census/record_stat.c',
+                      'src/core/census/tracing.c'
 
     ss.private_header_files = 'src/core/support/env.h',
                               'src/core/support/file.h',
diff --git a/include/grpc/census.h b/include/grpc/census.h
index 6baad53f154520f43f7b099f386000f6ffba690c..4c6263ec863585d4ff76963aebded1f491ea7a2b 100644
--- a/include/grpc/census.h
+++ b/include/grpc/census.h
@@ -103,8 +103,8 @@ void census_context_destroy(census_context *context);
 
 /* Distributed traces can have a number of options. */
 enum census_trace_mask_values {
-  CENSUS_TRACE_MASK_NONE = 0,       /* Default, empty flags */
-  CENSUS_TRACE_MASK_IS_SAMPLED = 1, /* RPC tracing enabled for this context. */
+  CENSUS_TRACE_MASK_NONE = 0,      /* Default, empty flags */
+  CENSUS_TRACE_MASK_IS_SAMPLED = 1 /* RPC tracing enabled for this context. */
 };
 
 /** Get the current trace mask associated with this context. The value returned
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index 3e578c171b95e15914e6b5b58ccca6c037f8a96a..e2c206cfd21fcb90f395ad2495aff383df86004c 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -1018,6 +1018,7 @@ src/core/transport/transport_op_string.c \
 src/core/census/context.c \
 src/core/census/initialize.c \
 src/core/census/record_stat.c \
+src/core/census/tracing.c \
 include/grpc/support/alloc.h \
 include/grpc/support/atm.h \
 include/grpc/support/atm_gcc_atomic.h \
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index 84c1099a2ae2c18b14d68ad42d871c3d1d4f281e..57665336b392c74beac7c32db6c3acb73bedd207 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -9995,6 +9995,7 @@
       "src/core/census/initialize.c", 
       "src/core/census/record_stat.c", 
       "src/core/census/rpc_stat_id.h", 
+      "src/core/census/tracing.c", 
       "src/core/channel/census_filter.h", 
       "src/core/channel/channel_args.c", 
       "src/core/channel/channel_args.h", 
@@ -10442,6 +10443,7 @@
       "src/core/census/initialize.c", 
       "src/core/census/record_stat.c", 
       "src/core/census/rpc_stat_id.h", 
+      "src/core/census/tracing.c", 
       "src/core/channel/census_filter.h", 
       "src/core/channel/channel_args.c", 
       "src/core/channel/channel_args.h", 
diff --git a/vsprojects/grpc/grpc.vcxproj b/vsprojects/grpc/grpc.vcxproj
index 744627e388dd8cce2ac8ad684bfb79e2323f58ee..a826402ed0e4e1ebe8b10530b5dc3a6d7655717f 100644
--- a/vsprojects/grpc/grpc.vcxproj
+++ b/vsprojects/grpc/grpc.vcxproj
@@ -545,6 +545,8 @@
     </ClCompile>
     <ClCompile Include="..\..\src\core\census\record_stat.c">
     </ClCompile>
+    <ClCompile Include="..\..\src\core\census\tracing.c">
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\gpr\gpr.vcxproj">
diff --git a/vsprojects/grpc/grpc.vcxproj.filters b/vsprojects/grpc/grpc.vcxproj.filters
index 84a7823b2d20645c72607ef0d45572b0de0e8abd..f7e163adc9f6def34c3693ec3dde73c51924560f 100644
--- a/vsprojects/grpc/grpc.vcxproj.filters
+++ b/vsprojects/grpc/grpc.vcxproj.filters
@@ -409,6 +409,9 @@
     <ClCompile Include="..\..\src\core\census\record_stat.c">
       <Filter>src\core\census</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\census\tracing.c">
+      <Filter>src\core\census</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\include\grpc\grpc_security.h">
diff --git a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj
index a5730235fba7893f03f91687077063dea7953535..7ac0ba89a03f19d8cff5ca0f465dd718e14facdb 100644
--- a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj
+++ b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj
@@ -480,6 +480,8 @@
     </ClCompile>
     <ClCompile Include="..\..\src\core\census\record_stat.c">
     </ClCompile>
+    <ClCompile Include="..\..\src\core\census\tracing.c">
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\gpr\gpr.vcxproj">
diff --git a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters
index c7790431dfa4a5f9716e061eca4e537727d97a0e..c79a37f059e92b9d2173cc7e88c461e245e9d6c4 100644
--- a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters
@@ -340,6 +340,9 @@
     <ClCompile Include="..\..\src\core\census\record_stat.c">
       <Filter>src\core\census</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\census\tracing.c">
+      <Filter>src\core\census</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\include\grpc\byte_buffer.h">