Reuse Pattern instance to improve performance
To improve the performance, explicitly compile the regular expression
into a Pattern instance (which is immutable) as part of class
initialization, cache it, and reuse the same instance for every
invocation.
Bug: 325342963
Test: atest IwlanTests
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:a3dd84ad72786d8767d6b988f46a468404e117cd)
Merged-In: Icaed3cfbfad3b47ea3230ce3c638b32d33914a90
Change-Id: Icaed3cfbfad3b47ea3230ce3c638b32d33914a90
diff --git a/src/com/google/android/iwlan/epdg/EpdgSelector.java b/src/com/google/android/iwlan/epdg/EpdgSelector.java
index 3db6ac2..3590a7e 100644
--- a/src/com/google/android/iwlan/epdg/EpdgSelector.java
+++ b/src/com/google/android/iwlan/epdg/EpdgSelector.java
@@ -68,6 +68,7 @@
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class EpdgSelector {
@@ -101,6 +102,7 @@
private static final int PCO_IPV6_LEN = 16; // 16 bytes for IPv6 address in PCO data.
private static final String NO_DOMAIN = "NO_DOMAIN";
+ private static final Pattern PLMN_PATTERN = Pattern.compile("\\d{5,6}");
BlockingQueue<Runnable> dnsResolutionQueue;
@@ -1388,6 +1390,6 @@
* @return True if the PLMN identifier is valid, false otherwise.
*/
private static boolean isValidPlmn(String plmn) {
- return plmn != null && plmn.matches("\\d{5,6}");
+ return plmn != null && PLMN_PATTERN.matcher(plmn).matches();
}
}