message: Adds conditional tracing around ExecutorState::PropagateOutputs.
diff: @@ -2046,6 +2046,23 @@ Status ExecutorState::ProcessOutputs(const NodeItem& item, OpKernelContext* ctx,
  void ExecutorState::PropagateOutputs(const TaggedNode& tagged_node,
  const NodeItem* item, EntryVector* outputs,
  TaggedNodeSeq* ready) {
  + auto activity_handle =
  + [&]() -> std::unique_ptr<tracing::TraceCollector::Handle> {
  + if (TF_PREDICT_FALSE(trace_collector_ != nullptr &&
  + trace_collector_->IsEnabledForActivities(
  + false /* is_expensive */))) {
  + const string& op_name = item->kernel->name();
  + // Intentionally using ExecutorPropagateOutputs as the first key so that
  + // users are aware that it's not the op invocation.
  + return trace_collector_->CreateActivityHandle(
  + "ExecutorPropagateOutputs",
  + strings::StrCat(op_name, "#id=", step_id_, "#"),
  + false /* is_expensive */);
  + } else {
  + return nullptr;
  + }
  + }();
  +
  const Node* node = tagged_node.node;
  FrameState* input_frame = tagged_node.input_frame;
  const int64 input_iter = tagged_node.input_iter;
  