Bläddra i källkod

chang cloud_grpc_stream projects. add latency show.

yuchuli 4 år sedan
förälder
incheckning
4340ffb9dc

+ 6 - 0
src/driver/driver_cloud_grpc_pc_stream/grpcpc.cpp

@@ -167,6 +167,7 @@ void grpcpc::run()
     //        std::cout << "接收到回复:" << reply.remsg()<<"--\n" << std::endl;
     //        std::cout << "接收到回复:" << reply.remsg()<<"--\n" << std::endl;
             if(reply.nres() == 1)
             if(reply.nres() == 1)
             {
             {
+                mnculatency = reply.nculatency();
                 std::cout<<"data size is "<<reply.xdata().size()<<"time is"<<QDateTime::currentMSecsSinceEpoch()<<std::endl;
                 std::cout<<"data size is "<<reply.xdata().size()<<"time is"<<QDateTime::currentMSecsSinceEpoch()<<std::endl;
                 iv::cloud::cloudmsg xmsg;
                 iv::cloud::cloudmsg xmsg;
                 if(xmsg.ParseFromArray(reply.xdata().data(),reply.xdata().size()))
                 if(xmsg.ParseFromArray(reply.xdata().data(),reply.xdata().size()))
@@ -364,3 +365,8 @@ float grpcpc::getctrlfps()
 {
 {
     return 1000.0/mninterval;
     return 1000.0/mninterval;
 }
 }
+
+qint64 grpcpc::getculatency()
+{
+    return mnculatency;
+}

+ 3 - 0
src/driver/driver_cloud_grpc_pc_stream/grpcpc.h

@@ -76,6 +76,8 @@ private:
     float mframerate = 0.0;
     float mframerate = 0.0;
     int mninterval = 100;
     int mninterval = 100;
 
 
+    qint64 mnculatency = 0;
+
     int gindex = 0;
     int gindex = 0;
 
 
 
 
@@ -92,6 +94,7 @@ public:
     float getframerate();
     float getframerate();
     void setctrlfps(float framerate);
     void setctrlfps(float framerate);
     float getctrlfps();
     float getctrlfps();
+    qint64 getculatency();
 
 
 
 
 };
 };

+ 13 - 2
src/driver/driver_cloud_grpc_server_stream/cumsgbuffer.cpp

@@ -5,7 +5,8 @@ cumsgbuffer::cumsgbuffer()
 
 
 }
 }
 
 
-void cumsgbuffer::addmsg(int id, qint64 ntime, std::string strVIN, std::string strqueryMD5, std::string strctrlMD5, std::vector<char> *pxdata,bool bImportant,int nkeeptime)
+void cumsgbuffer::addmsg(int id, qint64 ntime, std::string strVIN, std::string strqueryMD5, std::string strctrlMD5,
+                         std::vector<char> *pxdata,bool bImportant,int nkeeptime,qint64 nculatency)
 {
 {
     qDebug("ntime is %ld",ntime);
     qDebug("ntime is %ld",ntime);
     mMutex.lock();
     mMutex.lock();
@@ -28,6 +29,7 @@ void cumsgbuffer::addmsg(int id, qint64 ntime, std::string strVIN, std::string s
         cmsg.strVIN = strVIN;
         cmsg.strVIN = strVIN;
         cmsg.strqueryMD5 = strqueryMD5;
         cmsg.strqueryMD5 = strqueryMD5;
         cmsg.strctrlMD5 = strctrlMD5;
         cmsg.strctrlMD5 = strctrlMD5;
+        cmsg.mnlatency = nculatency;
         if(pxdata->size() > 0)
         if(pxdata->size() > 0)
         {
         {
             cmsg.xdata.resize(pxdata->size());
             cmsg.xdata.resize(pxdata->size());
@@ -53,6 +55,7 @@ void cumsgbuffer::addmsg(int id, qint64 ntime, std::string strVIN, std::string s
         pmsg->strqueryMD5 = strqueryMD5;
         pmsg->strqueryMD5 = strqueryMD5;
         pmsg->strctrlMD5 = strctrlMD5;
         pmsg->strctrlMD5 = strctrlMD5;
         pmsg->xdata.clear();
         pmsg->xdata.clear();
+        pmsg->mnlatency = nculatency;
         if(pxdata->size()>0)
         if(pxdata->size()>0)
         {
         {
             pmsg->xdata.resize(pxdata->size());
             pmsg->xdata.resize(pxdata->size());
@@ -64,7 +67,8 @@ void cumsgbuffer::addmsg(int id, qint64 ntime, std::string strVIN, std::string s
 }
 }
 
 
 
 
-int cumsgbuffer::getmsg(std::string strVIN,std::string strqueryMD5, qint64 nlasttime, int &id, qint64 &ntime,   std::vector<char> *pxdata)
+int cumsgbuffer::getmsg(std::string strVIN,std::string strqueryMD5, qint64 nlasttime, int &id, qint64 &ntime,
+                        std::vector<char> *pxdata,qint64 * pnculatency)
 {
 {
     mMutex.lock();
     mMutex.lock();
     iv::cumsg * pmsg = 0;
     iv::cumsg * pmsg = 0;
@@ -99,9 +103,16 @@ int cumsgbuffer::getmsg(std::string strVIN,std::string strqueryMD5, qint64 nlast
         mMutex.unlock();
         mMutex.unlock();
         return 0;
         return 0;
     }
     }
+    qint64 now = QDateTime::currentMSecsSinceEpoch();
+    if(abs(now - pmsg->mlastuptime)>60000)   //Data  is old not use.
+    {
+        mMutex.unlock();
+        return 0;
+    }
     id = pmsg->id;
     id = pmsg->id;
     ntime = pmsg->ntime;
     ntime = pmsg->ntime;
     pxdata->clear();
     pxdata->clear();
+    *pnculatency = pmsg->mnlatency;
     int ndatasize = pmsg->xdata.size();
     int ndatasize = pmsg->xdata.size();
     pxdata->resize(ndatasize);
     pxdata->resize(ndatasize);
     memcpy(pxdata->data(),pmsg->xdata.data(),ndatasize);
     memcpy(pxdata->data(),pmsg->xdata.data(),ndatasize);

+ 3 - 2
src/driver/driver_cloud_grpc_server_stream/cumsgbuffer.h

@@ -22,6 +22,7 @@ struct cumsg
     bool mbImportant = false;
     bool mbImportant = false;
     int mkeeptime;
     int mkeeptime;
     bool mbhavequery = false;
     bool mbhavequery = false;
+    qint64 mnlatency;
 };
 };
 }
 }
 
 
@@ -37,14 +38,14 @@ private:
 
 
 public:
 public:
     void addmsg(int id,qint64 ntime,std::string strVIN,std::string strqueryMD5,
     void addmsg(int id,qint64 ntime,std::string strVIN,std::string strqueryMD5,
-                std::string strctrlMD5,std::vector<char> * pxdata,bool bImportant,int nkeeptime);
+                std::string strctrlMD5,std::vector<char> * pxdata,bool bImportant,int nkeeptime,qint64 nculatency);
 
 
 
 
     //if no new msg return 0
     //if no new msg return 0
     // -1 no this vin
     // -1 no this vin
     // -2 queryMD5 error
     // -2 queryMD5 error
     int getmsg(std::string strVIN,std::string strqueryMD5,qint64 nlasttime, int & id,qint64 & ntime,
     int getmsg(std::string strVIN,std::string strqueryMD5,qint64 nlasttime, int & id,qint64 & ntime,
-                std::vector<char> * pxdata);
+                std::vector<char> * pxdata,qint64 * pnculatency);
 
 
 
 
 
 

+ 11 - 4
src/driver/driver_cloud_grpc_server_stream/main.cpp

@@ -35,7 +35,7 @@ static pcmsgbuffer gpcmsgbuf;
 
 
 
 
 void uploadsend(::grpc::ServerReaderWriter<iv::UploadReplyStream, iv::UploadRequestStream>* stream,bool * pbrun,
 void uploadsend(::grpc::ServerReaderWriter<iv::UploadReplyStream, iv::UploadRequestStream>* stream,bool * pbrun,
-                std::string * pstrvin,std::string * pstrmd5,bool *pbUpdatemd4orvin,QMutex * pmutex,int * preqid,qint64 * pnsendtime,QMutex * pmutexidtime)
+                std::string * pstrvin,std::string * pstrmd5,bool *pbUpdatemd4orvin,QMutex * pmutex,int * preqid,qint64 * pnsendtime,qint64 * recvtime,QMutex * pmutexidtime)
 {
 {
     std::string strvin;
     std::string strvin;
     std::string strmd5;
     std::string strmd5;
@@ -71,6 +71,7 @@ void uploadsend(::grpc::ServerReaderWriter<iv::UploadReplyStream, iv::UploadRequ
         pmutexidtime->lock();
         pmutexidtime->lock();
         reply.set_nreqsendtime(*pnsendtime);
         reply.set_nreqsendtime(*pnsendtime);
         reply.set_nreqid(*preqid);
         reply.set_nreqid(*preqid);
+        reply.set_npausetime(QDateTime::currentMSecsSinceEpoch() - *recvtime);
         pmutexidtime->unlock();
         pmutexidtime->unlock();
         if(nres == 1)
         if(nres == 1)
         {
         {
@@ -111,6 +112,7 @@ void queryctrlsend(::grpc::ServerReaderWriter<iv::queryReplyStream, iv::queryReq
     xTime.start();
     xTime.start();
     int nlastsend = xTime.elapsed();
     int nlastsend = xTime.elapsed();
     qint64 nlastdatatime = 0;
     qint64 nlastdatatime = 0;
+    qint64 nculatency;
     while(*pbrun)
     while(*pbrun)
     {
     {
         if(*pbUpdatemd4orvin)
         if(*pbUpdatemd4orvin)
@@ -126,7 +128,7 @@ void queryctrlsend(::grpc::ServerReaderWriter<iv::queryReplyStream, iv::queryReq
         qint64 ntime;
         qint64 ntime;
         std::vector<char > xvectorquerydata;
         std::vector<char > xvectorquerydata;
 
 
-        int nres = gcumsgbuf.getmsg(strvin,strmd5,nlastdatatime,id,ntime,&xvectorquerydata);
+        int nres = gcumsgbuf.getmsg(strvin,strmd5,nlastdatatime,id,ntime,&xvectorquerydata,&nculatency);
 
 
         nlastdatatime = ntime;
         nlastdatatime = ntime;
 
 
@@ -138,6 +140,7 @@ void queryctrlsend(::grpc::ServerReaderWriter<iv::queryReplyStream, iv::queryReq
             reply.set_xdata(xvectorquerydata.data(),xvectorquerydata.size());
             reply.set_xdata(xvectorquerydata.data(),xvectorquerydata.size());
             reply.set_id(id);
             reply.set_id(id);
             reply.set_ntime(ntime);
             reply.set_ntime(ntime);
+            reply.set_nculatency(nculatency);
             stream->Write(reply);
             stream->Write(reply);
             nlastsend = xTime.elapsed();
             nlastsend = xTime.elapsed();
         }
         }
@@ -170,9 +173,10 @@ class UploadServiceImpl final : public iv::UploadStream::Service {
       QMutex uploadmutex;
       QMutex uploadmutex;
       int reqid = -1;
       int reqid = -1;
       qint64 pnsendtime = 0;
       qint64 pnsendtime = 0;
+      qint64 nrecvtime = 0;
       QMutex mutexidtime;
       QMutex mutexidtime;
       std::thread * pthread = new std::thread(uploadsend,stream,&brun,&strvin,&strctrlmd5,&bUpdatemd4orvin,&uploadmutex,
       std::thread * pthread = new std::thread(uploadsend,stream,&brun,&strvin,&strctrlmd5,&bUpdatemd4orvin,&uploadmutex,
-                                              &reqid,&pnsendtime,&mutexidtime);
+                                              &reqid,&pnsendtime,&nrecvtime,&mutexidtime);
       std::cout<<"new connect."<<std::endl;
       std::cout<<"new connect."<<std::endl;
 
 
 
 
@@ -196,11 +200,14 @@ class UploadServiceImpl final : public iv::UploadStream::Service {
               memcpy(xvectordata.data(),request.xdata().data(),request.xdata().size());
               memcpy(xvectordata.data(),request.xdata().data(),request.xdata().size());
           }
           }
 
 
+          mutexidtime.lock();
           reqid = request.id();
           reqid = request.id();
           pnsendtime = request.nsendtime();
           pnsendtime = request.nsendtime();
+          nrecvtime = QDateTime::currentMSecsSinceEpoch();
+          mutexidtime.unlock();
 
 
           gcumsgbuf.addmsg(request.id(),request.ntime(),request.strvin(),request.strquerymd5(),request.strctrlmd5(),
           gcumsgbuf.addmsg(request.id(),request.ntime(),request.strvin(),request.strquerymd5(),request.strctrlmd5(),
-                           &xvectordata,request.bimportant(),request.kepptime());
+                           &xvectordata,request.bimportant(),request.kepptime(),request.nlatency());
 //          std::cout << "收到请求,类型为" << request.askmsg() <<"\n"<<std::endl;
 //          std::cout << "收到请求,类型为" << request.askmsg() <<"\n"<<std::endl;
       }
       }
       std::cout<<" no conn"<<std::endl;
       std::cout<<" no conn"<<std::endl;

+ 56 - 0
src/tool/RemoteCtrl_Stream/mainwindow.cpp

@@ -194,6 +194,20 @@ MainWindow::MainWindow(QWidget *parent)
     mpbigpicdlg->setModal(false);
     mpbigpicdlg->setModal(false);
     connect(mpbigpicdlg,SIGNAL(finished(int)),this,SLOT(onCloseBigDlg()));
     connect(mpbigpicdlg,SIGNAL(finished(int)),this,SLOT(onCloseBigDlg()));
 
 
+    mpProgLatency = new QProgressBar();
+    ui->statusbar->addPermanentWidget(mpProgLatency);
+    QLabel * pLabel = new QLabel();
+    pLabel->setFixedWidth(150);
+    pLabel->setText("Latency");
+    mpLabelLatency = pLabel;
+    ui->statusbar->addPermanentWidget(pLabel);
+    mpProgLatency->setRange(0,100);
+    mpProgLatency->setValue(0);
+    mpProgLatency->setTextVisible(false);
+    mpProgLatency->setFixedWidth(300);
+    mpProgLatency->setStyleSheet("QProgressBar{background:white} QProgressBar:chunk{background:green}");
+ //   mpProgLatency->setGeometry(0,0,300,30);
+
     setWindowTitle(mstrProgName +mstrVIN+  mstrGPSTime + mstrPicTime);
     setWindowTitle(mstrProgName +mstrVIN+  mstrGPSTime + mstrPicTime);
 
 
 }
 }
@@ -635,6 +649,43 @@ void MainWindow::onTimerUpdateView()
     static qint64 time_gps = 0;
     static qint64 time_gps = 0;
 
 
 
 
+    qint64 nculatency = mgrpcpc->getculatency();
+    if(nculatency != mncurculatency)
+    {
+        mncurculatency = nculatency;
+        int nsheet = 0;
+        if(mncurculatency >= 200)
+        {
+            if(mncurculatency >= 500)nsheet = 2;
+            else nsheet = 1;
+        }
+        bool bNeedChangeSheet = false;
+        if(nsheet != mnProgLatencySheet)
+        {
+            mnProgLatencySheet = nsheet;
+            bNeedChangeSheet = true;
+        }
+        mpLabelLatency->setText(QString::number(mncurculatency)+"ms");
+        int nprog = mncurculatency;
+        if(nprog>500)nprog = 500;
+        mpProgLatency->setValue(nprog);
+        if(bNeedChangeSheet)
+        {
+            switch(mnProgLatencySheet)
+            {
+            case 0:
+                mpProgLatency->setStyleSheet("QProgressBar{background:white} QProgressBar:chunk{background:green}");
+                break;
+            case 1:
+                mpProgLatency->setStyleSheet("QProgressBar{background:white} QProgressBar:chunk{background:blue}");
+                break;
+            case 2:
+                mpProgLatency->setStyleSheet("QProgressBar{background:white} QProgressBar:chunk{background:red}");
+                break;
+            }
+        }
+
+    }
 
 
     if(gTimeGPSIMUUpdate != time_gps)
     if(gTimeGPSIMUUpdate != time_gps)
     {
     {
@@ -857,3 +908,8 @@ void MainWindow::on_actionSet_FrameRate_triggered()
         mgrpcpc->setctrlfps(fctrlfps);
         mgrpcpc->setctrlfps(fctrlfps);
     }
     }
 }
 }
+
+void MainWindow::on_actionSet_Camera_triggered()
+{
+    
+}

+ 9 - 0
src/tool/RemoteCtrl_Stream/mainwindow.h

@@ -10,6 +10,7 @@
 #include <QtWebEngineWidgets/QtWebEngineWidgets>
 #include <QtWebEngineWidgets/QtWebEngineWidgets>
 #include <QSet>
 #include <QSet>
 #include <QMutex>
 #include <QMutex>
+#include <QProgressBar>
 
 
 #include <iostream>
 #include <iostream>
 
 
@@ -104,6 +105,8 @@ private slots:
 
 
     void on_actionSet_FrameRate_triggered();
     void on_actionSet_FrameRate_triggered();
 
 
+    void on_actionSet_Camera_triggered();
+    
 public:
 public:
      void resizeEvent(QResizeEvent *event);
      void resizeEvent(QResizeEvent *event);
 
 
@@ -173,6 +176,12 @@ private:
      DialogPic * mppicdlg;
      DialogPic * mppicdlg;
      DialogBigPic * mpbigpicdlg;
      DialogBigPic * mpbigpicdlg;
 
 
+     QProgressBar * mpProgLatency;
+     QLabel * mpLabelLatency;
+
+     qint64 mncurculatency = 0;
+     int mnProgLatencySheet = 0; //0 green 1 blue 2 red
+
 
 
      bool mbSavePic = false;
      bool mbSavePic = false;
 
 

+ 1 - 1
src/tool/RemoteCtrl_Stream/mainwindow.ui

@@ -506,7 +506,7 @@
   <widget class="QStatusBar" name="statusbar"/>
   <widget class="QStatusBar" name="statusbar"/>
   <action name="actionSet_FrameRate">
   <action name="actionSet_FrameRate">
    <property name="text">
    <property name="text">
-    <string>Set FrameRate</string>
+    <string>&amp;Set FrameRate</string>
    </property>
    </property>
   </action>
   </action>
  </widget>
  </widget>