LCOV - code coverage report
Current view: top level - nnstreamer-2.4.2/ext/nnstreamer/extra - nnstreamer_grpc_flatbuf.h (source / functions) Coverage Total Hit
Test: nnstreamer 2.4.2-0 nnstreamer/nnstreamer#eca68b8d050408568af95d831a8eef62aaee7784 Lines: 83.3 % 6 5
Test Date: 2025-03-14 05:36:58 Functions: 60.0 % 5 3

            Line data    Source code
       1              : /* SPDX-License-Identifier: LGPL-2.1-only */
       2              : /**
       3              :  * GStreamer / NNStreamer gRPC/flatbuf support
       4              :  * Copyright (C) 2020 Dongju Chae <dongju.chae@samsung.com>
       5              :  */
       6              : /**
       7              :  * @file    nnstreamer_grpc_flatbuffer.h
       8              :  * @date    26 Nov 2020
       9              :  * @brief   nnstreamer gRPC/Flatbuf support
      10              :  * @see     https://github.com/nnstreamer/nnstreamer
      11              :  * @author  Dongju Chae <dongju.chae@samsung.com>
      12              :  * @bug     No known bugs except for NYI items
      13              :  */
      14              : 
      15              : #ifndef __NNS_GRPC_FLATBUF_H__
      16              : #define __NNS_GRPC_FLATBUF_H__
      17              : 
      18              : #include "nnstreamer_grpc_common.h"
      19              : #include "nnstreamer.grpc.fb.h" /* Generated by `flatc` */
      20              : 
      21              : using nnstreamer::flatbuf::TensorService;
      22              : using nnstreamer::flatbuf::Tensors;
      23              : using nnstreamer::flatbuf::Tensor;
      24              : using nnstreamer::flatbuf::Empty;
      25              : 
      26              : using flatbuffers::grpc::Message;
      27              : 
      28              : namespace grpc {
      29              : 
      30              : /**
      31              :  * @brief NNStreamer gRPC flatbuf service impl.
      32              :  */
      33              : class ServiceImplFlatbuf : public NNStreamerRPC
      34              : {
      35              :   public:
      36              :     ServiceImplFlatbuf (const grpc_config * config);
      37              : 
      38              :     void parse_tensors (Message<Tensors> &tensors);
      39              :     gboolean fill_tensors (Message<Tensors> &tensors);
      40              : 
      41              :   protected:
      42              :     template <typename T>
      43              :     grpc::Status _write_tensors (T writer);
      44              : 
      45              :     template <typename T>
      46              :     grpc::Status _read_tensors (T reader);
      47              : 
      48              :     void _get_tensors_from_buffer (GstBuffer *buffer, Message<Tensors> &tensors);
      49              :     void _get_buffer_from_tensors (Message<Tensors> &tensors, GstBuffer **buffer);
      50              : 
      51              :     std::unique_ptr<nnstreamer::flatbuf::TensorService::Stub> client_stub_;
      52              : };
      53              : 
      54              : /**
      55              :  * @brief NNStreamer gRPC flatbuf sync service impl.
      56              :  */
      57              : class SyncServiceImplFlatbuf final
      58              :   : public ServiceImplFlatbuf, public TensorService::Service
      59              : {
      60              :   public:
      61              :     SyncServiceImplFlatbuf (const grpc_config * config);
      62              : 
      63              :     Status SendTensors (ServerContext *context, ServerReader<Message<Tensors>> *reader,
      64              :         Message<Empty> *replay) override;
      65              : 
      66              :     Status RecvTensors (ServerContext *context, const Message<Empty> *request,
      67              :         ServerWriter<Message<Tensors>> *writer) override;
      68              : 
      69              :   private:
      70              :     gboolean start_server (std::string address) override;
      71              :     gboolean start_client (std::string address) override;
      72              : 
      73              :     void _client_thread ();
      74              : };
      75              : 
      76              : class AsyncCallData;
      77              : 
      78              : /**
      79              :  * @brief NNStreamer gRPC flatbuf async service impl.
      80              :  */
      81              : class AsyncServiceImplFlatbuf final
      82              :   : public ServiceImplFlatbuf, public TensorService::AsyncService
      83              : {
      84              :   public:
      85              :     AsyncServiceImplFlatbuf (const grpc_config * config);
      86              :     ~AsyncServiceImplFlatbuf ();
      87              : 
      88              :     /** @brief set the last call data */
      89            4 :     void set_last_call (AsyncCallData * call) { last_call_ = call; }
      90              : 
      91              :   private:
      92              :     gboolean start_server (std::string address) override;
      93              :     gboolean start_client (std::string address) override;
      94              : 
      95              :     void _server_thread ();
      96              :     void _client_thread ();
      97              : 
      98              :     AsyncCallData * last_call_;
      99              : };
     100              : 
     101              : /** @brief Internal base class to serve a request */
     102              : class AsyncCallData {
     103              :   public:
     104              :     /** @brief Constructor of AsyncCallData */
     105            8 :     AsyncCallData (AsyncServiceImplFlatbuf *service)
     106            8 :       : service_ (service), state_ (CREATE), count_ (0)
     107              :     {
     108            8 :     }
     109              : 
     110              :     /** @brief Destructor of AsyncCallData */
     111            2 :     virtual ~AsyncCallData () {}
     112              : 
     113              :     /** @brief FSM-based state handling function */
     114            0 :     virtual void RunState (bool ok) {}
     115              : 
     116              :   protected:
     117              :     enum CallState { CREATE, PROCESS, FINISH, DESTROY };
     118              : 
     119              :     AsyncServiceImplFlatbuf *service_;
     120              :     CallState state_;
     121              :     guint count_;
     122              : 
     123              :     Message<Tensors> rpc_tensors_;
     124              :     Message<Empty> rpc_empty_;
     125              : };
     126              : 
     127              : }; /* namespace grpc */
     128              : 
     129              : #endif /* __NNS_GRPC_FLATBUF_H__ */
        

Generated by: LCOV version 2.0-1