aboutsummaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/src/com/google/android/icing/IcingSearchEngine.java35
-rw-r--r--java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java20
2 files changed, 49 insertions, 6 deletions
diff --git a/java/src/com/google/android/icing/IcingSearchEngine.java b/java/src/com/google/android/icing/IcingSearchEngine.java
index 16a4a4a..b54b344 100644
--- a/java/src/com/google/android/icing/IcingSearchEngine.java
+++ b/java/src/com/google/android/icing/IcingSearchEngine.java
@@ -306,9 +306,14 @@ public class IcingSearchEngine implements Closeable {
@NonNull ResultSpecProto resultSpec) {
throwIfClosed();
+ long javaToNativeStartTimestampMs = System.currentTimeMillis();
byte[] searchResultBytes =
nativeSearch(
- this, searchSpec.toByteArray(), scoringSpec.toByteArray(), resultSpec.toByteArray());
+ this,
+ searchSpec.toByteArray(),
+ scoringSpec.toByteArray(),
+ resultSpec.toByteArray(),
+ javaToNativeStartTimestampMs);
if (searchResultBytes == null) {
Log.e(TAG, "Received null SearchResultProto from native.");
return SearchResultProto.newBuilder()
@@ -317,7 +322,10 @@ public class IcingSearchEngine implements Closeable {
}
try {
- return SearchResultProto.parseFrom(searchResultBytes, EXTENSION_REGISTRY_LITE);
+ SearchResultProto.Builder searchResultProtoBuilder =
+ SearchResultProto.newBuilder().mergeFrom(searchResultBytes, EXTENSION_REGISTRY_LITE);
+ setNativeToJavaJniLatency(searchResultProtoBuilder);
+ return searchResultProtoBuilder.build();
} catch (InvalidProtocolBufferException e) {
Log.e(TAG, "Error parsing SearchResultProto.", e);
return SearchResultProto.newBuilder()
@@ -330,7 +338,7 @@ public class IcingSearchEngine implements Closeable {
public SearchResultProto getNextPage(long nextPageToken) {
throwIfClosed();
- byte[] searchResultBytes = nativeGetNextPage(this, nextPageToken);
+ byte[] searchResultBytes = nativeGetNextPage(this, nextPageToken, System.currentTimeMillis());
if (searchResultBytes == null) {
Log.e(TAG, "Received null SearchResultProto from native.");
return SearchResultProto.newBuilder()
@@ -339,7 +347,10 @@ public class IcingSearchEngine implements Closeable {
}
try {
- return SearchResultProto.parseFrom(searchResultBytes, EXTENSION_REGISTRY_LITE);
+ SearchResultProto.Builder searchResultProtoBuilder =
+ SearchResultProto.newBuilder().mergeFrom(searchResultBytes, EXTENSION_REGISTRY_LITE);
+ setNativeToJavaJniLatency(searchResultProtoBuilder);
+ return searchResultProtoBuilder.build();
} catch (InvalidProtocolBufferException e) {
Log.e(TAG, "Error parsing SearchResultProto.", e);
return SearchResultProto.newBuilder()
@@ -348,6 +359,16 @@ public class IcingSearchEngine implements Closeable {
}
}
+ private void setNativeToJavaJniLatency(SearchResultProto.Builder searchResultProtoBuilder) {
+ int nativeToJavaLatencyMs =
+ (int)
+ (System.currentTimeMillis()
+ - searchResultProtoBuilder.getQueryStats().getNativeToJavaStartTimestampMs());
+ searchResultProtoBuilder.setQueryStats(
+ searchResultProtoBuilder.getQueryStats().toBuilder()
+ .setNativeToJavaJniLatencyMs(nativeToJavaLatencyMs));
+ }
+
@NonNull
public void invalidateNextPageToken(long nextPageToken) {
throwIfClosed();
@@ -657,9 +678,11 @@ public class IcingSearchEngine implements Closeable {
IcingSearchEngine instance,
byte[] searchSpecBytes,
byte[] scoringSpecBytes,
- byte[] resultSpecBytes);
+ byte[] resultSpecBytes,
+ long javaToNativeStartTimestampMs);
- private static native byte[] nativeGetNextPage(IcingSearchEngine instance, long nextPageToken);
+ private static native byte[] nativeGetNextPage(
+ IcingSearchEngine instance, long nextPageToken, long javaToNativeStartTimestampMs);
private static native void nativeInvalidateNextPageToken(
IcingSearchEngine instance, long nextPageToken);
diff --git a/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java b/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java
index b55cfd1..556e537 100644
--- a/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java
+++ b/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java
@@ -214,6 +214,16 @@ public final class IcingSearchEngineTest {
assertStatusOk(searchResultProto.getStatus());
assertThat(searchResultProto.getResultsCount()).isEqualTo(1);
assertThat(searchResultProto.getResults(0).getDocument()).isEqualTo(emailDocument);
+
+ // TODO(b/236412954): Enable these JNI latency tests once cl/469819190 is synced to Jetpack
+ // Test that JNI latency has been set properly
+ // assertThat(searchResultProto.getQueryStats().hasNativeToJavaJniLatencyMs()).isTrue();
+ // assertThat(searchResultProto.getQueryStats().hasNativeToJavaStartTimestampMs()).isTrue();
+ // assertThat(searchResultProto.getQueryStats().hasJavaToNativeJniLatencyMs()).isTrue();
+ // assertThat(searchResultProto.getQueryStats().getNativeToJavaJniLatencyMs()).isAtLeast(0);
+ // assertThat(searchResultProto.getQueryStats().getNativeToJavaStartTimestampMs())
+ // .isGreaterThan(0);
+ // assertThat(searchResultProto.getQueryStats().getJavaToNativeJniLatencyMs()).isAtLeast(0);
}
@Test
@@ -256,6 +266,16 @@ public final class IcingSearchEngineTest {
DocumentProto resultDocument = searchResultProto.getResults(0).getDocument();
assertThat(resultDocument).isEqualTo(documents.remove(resultDocument.getUri()));
+ // TODO(b/236412954): Enable these JNI latency tests once cl/469819190 is synced to Jetpack
+ // Test that JNI latency has been set
+ // assertThat(searchResultProto.getQueryStats().hasNativeToJavaJniLatencyMs()).isTrue();
+ // assertThat(searchResultProto.getQueryStats().hasNativeToJavaStartTimestampMs()).isTrue();
+ // assertThat(searchResultProto.getQueryStats().hasJavaToNativeJniLatencyMs()).isTrue();
+ // assertThat(searchResultProto.getQueryStats().getNativeToJavaJniLatencyMs()).isAtLeast(0);
+ // assertThat(searchResultProto.getQueryStats().getNativeToJavaStartTimestampMs())
+ // .isGreaterThan(0);
+ // assertThat(searchResultProto.getQueryStats().getJavaToNativeJniLatencyMs()).isAtLeast(0);
+
// fetch rest pages
for (int i = 1; i < 5; i++) {
searchResultProto = icingSearchEngine.getNextPage(searchResultProto.getNextPageToken());