aboutsummaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorGrace Zhao <gracezrx@google.com>2022-09-08 23:05:54 +0000
committerGrace Zhao <gracezrx@google.com>2022-09-08 23:15:32 +0000
commit74a50aaa18e41c7bfaaf23ada3747db97a1abc4d (patch)
tree89e439fe96d33793cb5aa4f56bc1393f7a9f2b3b /java
parent91c6a8e58858d2d432d1cfb2766f4684e8644e09 (diff)
parentb02eecda6a12241798cdbaaa7069d19f2fc5f41f (diff)
downloadicing-74a50aaa18e41c7bfaaf23ada3747db97a1abc4d.tar.gz
Merge remote-tracking branch 'aosp/upstream-master' into androidx-main
* aosp/upstream-master: 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 ======================================================================= Bug: 146903474 Bug: 193919210 Bug: 241536882 Bug: 236412954 Bug: 218735359 Bug: 208654892 Bug: 241310816 Bug: 236412954 Bug: 242761389 Bug: 243889347 Change-Id: Ib1f1808378fa44226226802b0e6d188ee20af946
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());