pjfanning commented on code in PR #1701:
URL: https://github.com/apache/pekko/pull/1701#discussion_r1929188797


##########
stream/src/main/scala/org/apache/pekko/stream/impl/TraversalBuilder.scala:
##########
@@ -380,12 +380,53 @@ import pekko.util.unused
     }
   }
 
+  /**
+   * Try to find `SingleSource` or wrapped such. This is used as a
+   * performance optimization in FlattenConcat and possibly other places.
+   * @since 1.2.0
+   */
+  @InternalApi def getValuePresentedSource[A >: Null](
+      graph: Graph[SourceShape[A], _]): OptionVal[Graph[SourceShape[A], _]] = {
+    def isValuePresentedSource(graph: Graph[SourceShape[_ <: A], _]): Boolean 
= graph match {
+      case _: SingleSource[_] | _: FutureSource[_] | _: IterableSource[_] | _: 
JavaStreamSource[_, _] |
+          _: FailedSource[_] =>
+        true
+      case maybeEmpty if isEmptySource(maybeEmpty) => true
+      case _                                       => false
+    }
+    graph match {
+      case _ if isValuePresentedSource(graph) => OptionVal.Some(graph)
+      case _ =>
+        graph.traversalBuilder match {
+          case l: LinearTraversalBuilder =>
+            l.pendingBuilder match {
+              case OptionVal.Some(a: AtomicTraversalBuilder) =>
+                a.module match {
+                  case m: GraphStageModule[_, _] =>
+                    m.stage match {
+                      case _ if 
isValuePresentedSource(m.stage.asInstanceOf[Graph[SourceShape[A], _]]) =>
+                        // It would be != EmptyTraversal if 
mapMaterializedValue was used and then we can't optimize.
+                        if ((l.traversalSoFar eq EmptyTraversal) && 
!l.attributes.isAsync)
+                          
OptionVal.Some(m.stage.asInstanceOf[Graph[SourceShape[A], _]])
+                        else OptionVal.None
+                      case _ => OptionVal.None
+                    }
+                  case _ => OptionVal.None
+                }
+              case _ => OptionVal.None
+            }
+          case _ => OptionVal.None
+        }
+    }
+  }
+
   /**
    * Test if a Graph is an empty Source.
    */
   def isEmptySource(graph: Graph[SourceShape[_], _]): Boolean = graph match {
     case source: scaladsl.Source[_, _] if source eq scaladsl.Source.empty => 
true
     case source: javadsl.Source[_, _] if source eq javadsl.Source.empty() => 
true
+    case EmptySource                                                      => 
true

Review Comment:
   I am lost. The only way this is an optimisation is if EmptySource appears 
before one or more the existing cases.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@pekko.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@pekko.apache.org
For additional commands, e-mail: notifications-h...@pekko.apache.org

Reply via email to