Skip to content

Commit 6960246

Browse files
Java Performance - Not allocating strings for Constants (#246)
This change also contributes to the improvement of java performance. Avoid creating constants as strings everytime we evaluating configs. **This is the last PR on this Improvment**
1 parent c14e878 commit 6960246

File tree

8 files changed

+381
-412
lines changed

8 files changed

+381
-412
lines changed

src/main/kotlin/com/statsig/sdk/ClientInitializeFormatter.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ internal data class ClientConfig(
4545

4646
internal class ClientInitializeFormatter(
4747
private val specStore: SpecStore,
48-
private val evalFun: (user: StatsigUser, config: APIConfig?) -> ConfigEvaluation,
48+
private val evalFun: (user: StatsigUser, config: APIConfig?, endResult: ConfigEvaluation) -> Unit,
4949
private val user: StatsigUser,
5050
private val hash: HashAlgo = HashAlgo.SHA256,
5151
private val clientSDKKey: String? = null,
@@ -132,7 +132,8 @@ internal class ClientInitializeFormatter(
132132

133133
if (delegate != null && delegate != "") {
134134
val delegateSpec = specStore.getConfig(delegate)
135-
val delegateResult = evalFun(user, delegateSpec)
135+
var delegateResult = ConfigEvaluation()
136+
evalFun(user, delegateSpec, delegateResult)
136137
if (delegateSpec != null) {
137138
result.allocatedExperimentName = hashName(delegate)
138139
result.isUserInExperiment = delegateResult.isExperimentGroup
@@ -154,7 +155,8 @@ internal class ClientInitializeFormatter(
154155
return null
155156
}
156157

157-
val evalResult = evalFun(user, configSpec)
158+
val evalResult = ConfigEvaluation()
159+
evalFun(user, configSpec, evalResult)
158160
val hashedName = hashName(configName)
159161
val result = ClientConfig(
160162
hashedName,
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.statsig.sdk
2+
3+
object Const {
4+
const val EMPTY_STR: String = ""
5+
const val ZERO: String = "0"
6+
7+
const val GT: String = "gt"
8+
const val GTE: String = "gte"
9+
const val LT: String = "lt"
10+
const val LTE: String = "lte"
11+
const val VERSION_GT: String = "version_gt"
12+
const val VERSION_GTE: String = "version_gte"
13+
const val VERSION_LT: String = "version_lt"
14+
const val VERSION_LTE: String = "version_lte"
15+
const val VERSION_EQ: String = "version_eq"
16+
const val VERSION_NEQ: String = "version_neq"
17+
const val ANY: String = "any"
18+
const val ANY_CASE_SENSITIVE: String = "any_case_sensitive"
19+
const val NONE_CASE_SENSITIVE: String = "none_case_sensitive"
20+
const val STR_STARTS_WITH_ANY: String = "str_starts_with_any"
21+
const val STR_ENDS_WITH_ANY: String = "str_ends_with_any"
22+
const val STR_CONTAINS_ANY: String = "str_contains_any"
23+
const val STR_CONTAINS_NONE: String = "str_contains_none"
24+
const val STR_MATCHES: String = "str_matches"
25+
const val EQ: String = "eq"
26+
const val NEQ: String = "neq"
27+
const val BEFORE: String = "before"
28+
const val AFTER: String = "after"
29+
const val ON: String = "on"
30+
const val IN_SEGMENT_LIST: String = "in_segment_list"
31+
const val NOT_IN_SEGMENT_LIST: String = "not_in_segment_list"
32+
33+
const val APP_VERSION: String = "app_version"
34+
const val APPVERSION: String = "appversion"
35+
const val BROWSER_NAME: String = "browser_name"
36+
const val BROWSER_VERSION: String = "browser_version"
37+
const val BROWSERNAME: String = "browsername"
38+
const val BROWSERVERSION: String = "browserversion"
39+
const val CML_SHA_256: String = "SHA-256"
40+
const val COUNTRY: String = "country"
41+
const val DEFAULT: String = "default"
42+
const val DISABLED: String = "disabled"
43+
const val EMAIL: String = "email"
44+
const val IP: String = "ip"
45+
const val IPADDRESS: String = "ipaddress"
46+
const val IP_ADDRESS: String = "ip_address"
47+
const val LOCALE: String = "locale"
48+
const val NONE: String = "none"
49+
const val OS_NAME: String = "os_name"
50+
const val OS_VERSION: String = "os_version"
51+
const val OSNAME: String = "osname"
52+
const val OSVERSION: String = "osversion"
53+
const val USER_AGENT: String = "user_agent"
54+
const val USER_ID: String = "user_id"
55+
const val USERAGENT: String = "useragent"
56+
const val USERID: String = "userid"
57+
58+
const val PUBLIC: String = "public"
59+
const val FAIL_GATE: String = "fail_gate"
60+
const val PASS_GATE: String = "pass_gate"
61+
const val IP_BASED: String = "ip_based"
62+
const val UA_BASED: String = "ua_based"
63+
const val USER_FIELD: String = "user_field"
64+
const val CURRENT_TIME: String = "current_time"
65+
const val ENVIRONMENT_FIELD: String = "environment_field"
66+
const val USER_BUCKET: String = "user_bucket"
67+
const val UNIT_ID: String = "unit_id"
68+
}

0 commit comments

Comments
 (0)