summaryrefslogtreecommitdiff
path: root/android/1.1
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 /android/1.1
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 'android/1.1')
-rw-r--r--android/1.1/location_api/GnssAPIClient.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/android/1.1/location_api/GnssAPIClient.cpp b/android/1.1/location_api/GnssAPIClient.cpp
index cec5145..fcef459 100644
--- a/android/1.1/location_api/GnssAPIClient.cpp
+++ b/android/1.1/location_api/GnssAPIClient.cpp
@@ -469,13 +469,20 @@ void GnssAPIClient::onGnssNmeaCb(GnssNmeaNotification gnssNmeaNotification)
mMutex.unlock();
if (gnssCbIface != nullptr) {
- android::hardware::hidl_string nmeaString;
- nmeaString.setToExternal(gnssNmeaNotification.nmea, gnssNmeaNotification.length);
- auto r = gnssCbIface->gnssNmeaCb(
- static_cast<V1_0::GnssUtcTime>(gnssNmeaNotification.timestamp), nmeaString);
- if (!r.isOk()) {
- LOC_LOGE("%s] Error from gnssNmeaCb nmea=%s length=%zu description=%s", __func__,
- gnssNmeaNotification.nmea, gnssNmeaNotification.length, r.description().c_str());
+ const std::string s(gnssNmeaNotification.nmea);
+ std::stringstream ss(s);
+ std::string each;
+ while(std::getline(ss, each, '\n')) {
+ each += '\n';
+ android::hardware::hidl_string nmeaString;
+ nmeaString.setToExternal(each.c_str(), each.length());
+ auto r = gnssCbIface->gnssNmeaCb(
+ static_cast<V1_0::GnssUtcTime>(gnssNmeaNotification.timestamp), nmeaString);
+ if (!r.isOk()) {
+ LOC_LOGE("%s] Error from gnssNmeaCb nmea=%s length=%zu description=%s", __func__,
+ gnssNmeaNotification.nmea, gnssNmeaNotification.length,
+ r.description().c_str());
+ }
}
}
}