From d1da3ae0aa3ddde0b129364b5e1c6073f7bdb7b7 Mon Sep 17 00:00:00 2001 From: Nikita Iashchenko Date: Mon, 18 Oct 2021 16:44:11 +0100 Subject: OpenJDK 11: Add String.repeat() Add native implementation for java.lang.String#repeat(). This implementation is 4.7-40.9 times faster (depending on how large result string is) than naive StringBuilder implementation. | Test | Java, ns | ART, ns | Gain | |------------------+------------+------------+-------| | len:1 reps:1m | 15,553,793 | 379,730 | 40.96 | | len:13 reps:10 | 724 | 154 | 4.7 | | len:13 reps:100k | 7,099,111 | 553,559 ns | 12.82 | Bug: 202962059 Test: atest CtsLibcoreOjTestCases:test.java.lang.String.StringRepeat Test: atest LibcoreBenchmarkTests:libcore.benchmark.StringTest Change-Id: I6535bb9201c14c455f0b13988e034919049e1222 --- runtime/native/java_lang_String.cc | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'runtime/native/java_lang_String.cc') diff --git a/runtime/native/java_lang_String.cc b/runtime/native/java_lang_String.cc index 86f93299d9..94ca5b53d6 100644 --- a/runtime/native/java_lang_String.cc +++ b/runtime/native/java_lang_String.cc @@ -109,10 +109,19 @@ static jcharArray String_toCharArray(JNIEnv* env, jobject java_this) { return soa.AddLocalReference(mirror::String::ToCharArray(s, soa.Self())); } +static jstring String_doRepeat(JNIEnv* env, jobject java_this, jint count) { + ScopedFastNativeObjectAccess soa(env); + StackHandleScope<1> hs(soa.Self()); + Handle string = hs.NewHandle(soa.Decode(java_this)); + ObjPtr result = mirror::String::DoRepeat(soa.Self(), string, count); + return soa.AddLocalReference(result); +} + static JNINativeMethod gMethods[] = { FAST_NATIVE_METHOD(String, charAt, "(I)C"), FAST_NATIVE_METHOD(String, compareTo, "(Ljava/lang/String;)I"), FAST_NATIVE_METHOD(String, concat, "(Ljava/lang/String;)Ljava/lang/String;"), + FAST_NATIVE_METHOD(String, doRepeat, "(I)Ljava/lang/String;"), FAST_NATIVE_METHOD(String, doReplace, "(CC)Ljava/lang/String;"), FAST_NATIVE_METHOD(String, fastSubstring, "(II)Ljava/lang/String;"), FAST_NATIVE_METHOD(String, getCharsNoCheck, "(II[CI)V"), -- cgit v1.2.3-59-g8ed1b