aboutsummaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorGrace Zhao <gracezrx@google.com>2022-09-08 20:26:31 +0000
committerGrace Zhao <gracezrx@google.com>2022-09-08 22:53:11 +0000
commitb02eecda6a12241798cdbaaa7069d19f2fc5f41f (patch)
tree15687379068030d4d5443c916d91e9ed364f9b39 /java
parent87267cbc5531600072a283ba0c9500c3fcac87af (diff)
downloadicing-b02eecda6a12241798cdbaaa7069d19f2fc5f41f.tar.gz
Sync from upstream.
Descriptions: ====================================================================== [FileBackedVector Consolidation][4/x] Fix potential PWrite bug in GrowIfNecessary ====================================================================== [FileBackedVector Consolidation][5/x] Create benchmark for FileBackedVector ====================================================================== [FileBackedVector Consolidation][6/x] Avoid calling GetFileSize in GrowIfNecessary ====================================================================== [PersistentHashMap][3.3/x] Implement Delete ====================================================================== Fix the PopulateMatchedTermsStats bug ====================================================================== Add JNI latency for query latency stats breakdown. ====================================================================== [ResultStateManager] Thread safety test1 ====================================================================== [ResultStateManager][2/x] Thread safety test2 ====================================================================== Add native lock contention latency for measuring query latency ====================================================================== Fix implementation of HasMember operator in ANTLR-based list-filter prototype. ====================================================================== Fix improper uses of std::string_view ====================================================================== Extend the scale of Icing ====================================================================== Decouple the term frequency array from DocHitInfo ====================================================================== Disable hit_term_frequency for non-relevance queries ====================================================================== [ResultStateManager][3/x] Thread safety test3 ====================================================================== [PersistentHashMap][4/x] Implement iterator ======================================================================= Fix the lite index compaction bug ======================================================================= Change-Id: I0edad67affed97af107e2d7cd73770e0268c0903
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());