summaryrefslogtreecommitdiff
path: root/gnss
diff options
context:
space:
mode:
authorKatz Yamada <kyamada@codeaurora.org>2018-10-02 16:10:03 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2018-10-05 16:26:02 -0700
commit5b53be1d9e037a197cdc56b65c73543c63051df1 (patch)
tree3a3b1d74ac659fed92f5ac3795b1e7adcfe3f1b1 /gnss
parent837f245997498fc3b813498d24acc40bc00d6dd7 (diff)
downloadgps-5b53be1d9e037a197cdc56b65c73543c63051df1.tar.gz
perf: Reduce NMEA traffic over client IPC
Improve hal daemon performance by reducing number of NMEA callbacks on IPC. Position and sv NMEA sentences, generated during one TBF will be concatenated by hal and sent over one IPC, then client lib disassemble it into multiple sentences. Change-Id: I522e293d7e26fb8a25edb6ed931c4d69186223e8 CRs-Fixed: 2299008
Diffstat (limited to 'gnss')
-rw-r--r--gnss/GnssAdapter.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/gnss/GnssAdapter.cpp b/gnss/GnssAdapter.cpp
index 32e0833..3d3c990 100644
--- a/gnss/GnssAdapter.cpp
+++ b/gnss/GnssAdapter.cpp
@@ -40,6 +40,7 @@
#include <netdb.h>
#include <GnssAdapter.h>
#include <string>
+#include <sstream>
#include <loc_log.h>
#include <loc_nmea.h>
#include <Agps.h>
@@ -2976,9 +2977,12 @@ GnssAdapter::reportPosition(const UlpLocation& ulpLocation,
uint8_t generate_nmea = (reported && status != LOC_SESS_FAILURE && !blank_fix);
std::vector<std::string> nmeaArraystr;
loc_nmea_generate_pos(ulpLocation, locationExtended, generate_nmea, nmeaArraystr);
+ stringstream ss;
for (auto sentence : nmeaArraystr) {
- reportNmea(sentence.c_str(), sentence.length());
+ ss << sentence;
}
+ string s = ss.str();
+ reportNmea(s.c_str(), s.length());
}
}
@@ -3069,9 +3073,12 @@ GnssAdapter::reportSv(GnssSvNotification& svNotify)
if (NMEA_PROVIDER_AP == ContextBase::mGps_conf.NMEA_PROVIDER && !mTrackingSessions.empty()) {
std::vector<std::string> nmeaArraystr;
loc_nmea_generate_sv(svNotify, nmeaArraystr);
+ stringstream ss;
for (auto sentence : nmeaArraystr) {
- reportNmea(sentence.c_str(), sentence.length());
+ ss << sentence;
}
+ string s = ss.str();
+ reportNmea(s.c_str(), s.length());
}
mGnssSvIdUsedInPosAvail = false;