Browse Source

Update the codegen to use the new handlers.

Motivation:

We have new server handlers; all we need to do is generate the code to
use them.

Modifications:

- Update codegen
- Fixup interceptor tests and remove tests already covered by
  {Unary,...}HandlerTests
- Deprecate `handleMethod` with a message to re-generate server code
- Regenerate our own code

Result:

Instruction count reductions:
- unary_10k_small_requests: -4.7%
- embedded_server_unary_10k_small_requests: -25.4%
- embedded_server_client_streaming_1_rpc_10k_small_requests: -35.6%
- embedded_server_client_streaming_10k_rpcs_1_small_requests: -25.1%
- embedded_server_server_streaming_1_rpc_10k_small_responses: -14.1%
- embedded_server_server_streaming_10k_rpcs_1_small_response: -21.1%
- embedded_server_bidi_1_rpc_10k_small_requests: -29.2%
- embedded_server_bidi_10k_rpcs_1_small_request: -23.9%
George Barnett 4 years ago
parent
commit
4821e5bd7b
1 changed files with 17 additions and 24 deletions
  1. 17 24
      Sources/protoc-gen-grpc-swift/Generator-Server.swift

+ 17 - 24
Sources/protoc-gen-grpc-swift/Generator-Server.swift

@@ -78,15 +78,15 @@ extension Generator {
       )
       self.println("/// Returns nil for methods not handled by this service.")
       self.printFunction(
-        name: "handleMethod",
+        name: "handle",
         arguments: [
-          "_ methodName: Substring",
-          "callHandlerContext: CallHandlerContext",
+          "method name: Substring",
+          "context: CallHandlerContext",
         ],
-        returnType: "GRPCCallHandler?",
+        returnType: "GRPCServerHandlerProtocol?",
         access: self.access
       ) {
-        self.println("switch methodName {")
+        self.println("switch name {")
         for method in self.service.methods {
           self.method = method
           self.println("case \"\(method.name)\":")
@@ -95,38 +95,31 @@ extension Generator {
             let callHandlerType: String
             switch streamingType(method) {
             case .unary:
-              callHandlerType = "CallHandlerFactory.makeUnary"
+              callHandlerType = "UnaryServerHandler"
             case .serverStreaming:
-              callHandlerType = "CallHandlerFactory.makeServerStreaming"
+              callHandlerType = "ServerStreamingServerHandler"
             case .clientStreaming:
-              callHandlerType = "CallHandlerFactory.makeClientStreaming"
+              callHandlerType = "ClientStreamingServerHandler"
             case .bidirectionalStreaming:
-              callHandlerType = "CallHandlerFactory.makeBidirectionalStreaming"
+              callHandlerType = "BidirectionalStreamingServerHandler"
             }
 
             self.println("return \(callHandlerType)(")
             self.withIndentation {
-              self.println("callHandlerContext: callHandlerContext,")
+              self.println("context: context,")
+              self.println("requestDeserializer: ProtobufDeserializer<\(self.methodInputName)>(),")
+              self.println("responseSerializer: ProtobufSerializer<\(self.methodOutputName)>(),")
               self.println(
-                "interceptors: self.interceptors?.\(self.methodInterceptorFactoryName)() ?? []"
+                "interceptors: self.interceptors?.\(self.methodInterceptorFactoryName)() ?? [],"
               )
-            }
-            self.println(") { context in")
-            self.withIndentation {
-              switch streamingType(self.method) {
+              switch streamingType(method) {
               case .unary, .serverStreaming:
-                self.println("return { request in")
-                self.withIndentation {
-                  self.println(
-                    "self.\(self.methodFunctionName)(request: request, context: context)"
-                  )
-                }
-                self.println("}")
+                self.println("userFunction: self.\(self.methodFunctionName)(request:context:)")
               case .clientStreaming, .bidirectionalStreaming:
-                self.println("self.\(self.methodFunctionName)(context: context)")
+                self.println("observerFactory: self.\(self.methodFunctionName)(context:)")
               }
             }
-            self.println("}")
+            self.println(")")
           }
           self.println()
         }