Replace future elapsedRealtime with system clock
Bug: 314328533
Test: on cuttlefish
Change-Id: Ide876ff5bed855972a5c6e2f853c173b5e652535
diff --git a/AconfigFlags.bp b/AconfigFlags.bp
index c477a75..9e30843 100644
--- a/AconfigFlags.bp
+++ b/AconfigFlags.bp
@@ -180,6 +180,12 @@
],
}
+cc_aconfig_library {
+ name: "android_location_flags_c_lib",
+ vendor_available: true,
+ aconfig_declarations: "android.location.flags-aconfig",
+}
+
java_aconfig_library {
name: "android.location.flags-aconfig-java",
aconfig_declarations: "android.location.flags-aconfig",
@@ -256,7 +262,6 @@
defaults: ["framework-minus-apex-aconfig-java-defaults"],
}
-
// OS
aconfig_declarations {
name: "android.os.flags-aconfig",
diff --git a/location/java/android/location/flags/gnss.aconfig b/location/java/android/location/flags/gnss.aconfig
index 794a555..5f1279e 100644
--- a/location/java/android/location/flags/gnss.aconfig
+++ b/location/java/android/location/flags/gnss.aconfig
@@ -41,3 +41,10 @@
description: "Flag for GNSS configuration from resource"
bug: "317734846"
}
+
+flag {
+ name: "replace_future_elapsed_realtime_jni"
+ namespace: "location"
+ description: "Flag for replacing future elapsedRealtime in JNI"
+ bug: "314328533"
+}
diff --git a/services/core/jni/gnss/Android.bp b/services/core/jni/gnss/Android.bp
index f3ba484f62..e72259f 100644
--- a/services/core/jni/gnss/Android.bp
+++ b/services/core/jni/gnss/Android.bp
@@ -68,5 +68,6 @@
"android.hardware.gnss@2.1",
"android.hardware.gnss.measurement_corrections@1.0",
"android.hardware.gnss.visibility_control@1.0",
+ "android_location_flags_c_lib",
],
}
diff --git a/services/core/jni/gnss/Utils.cpp b/services/core/jni/gnss/Utils.cpp
index 571534f..274e3b7 100644
--- a/services/core/jni/gnss/Utils.cpp
+++ b/services/core/jni/gnss/Utils.cpp
@@ -20,6 +20,7 @@
#include <android/hardware/gnss/1.0/IGnss.h>
#include <android/hardware/gnss/2.0/IGnss.h>
+#include <android_location_flags.h>
#include <utils/SystemClock.h>
/*
* Save a pointer to JavaVm to attach/detach threads executing
@@ -27,6 +28,8 @@
*/
JavaVM* android::ScopedJniThreadAttach::sJvm;
+namespace location_flags = android::location::flags;
+
namespace android {
namespace {
@@ -194,7 +197,12 @@
flags = static_cast<uint32_t>(location.elapsedRealtime.flags);
if (flags & android::hardware::gnss::ElapsedRealtime::HAS_TIMESTAMP_NS) {
- SET(ElapsedRealtimeNanos, location.elapsedRealtime.timestampNs);
+ if (location_flags::replace_future_elapsed_realtime_jni() &&
+ location.elapsedRealtime.timestampNs > android::elapsedRealtimeNano()) {
+ SET(ElapsedRealtimeNanos, android::elapsedRealtimeNano());
+ } else {
+ SET(ElapsedRealtimeNanos, location.elapsedRealtime.timestampNs);
+ }
} else {
SET(ElapsedRealtimeNanos, android::elapsedRealtimeNano());
}