diff options
author | Katz Yamada <kyamada@codeaurora.org> | 2018-10-02 16:10:03 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-10-05 16:26:02 -0700 |
commit | 5b53be1d9e037a197cdc56b65c73543c63051df1 (patch) | |
tree | 3a3b1d74ac659fed92f5ac3795b1e7adcfe3f1b1 /android/1.1 | |
parent | 837f245997498fc3b813498d24acc40bc00d6dd7 (diff) | |
download | gps-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.cpp | 21 |
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()); + } } } } |