7878
7979public class SplitFactoryImpl implements SplitFactory {
8080
81- private final EventsTrackerProvider mEventsTrackerProvider ;
82- private final StrategyImpressionManager mImpressionManager ;
83- private final SplitTaskExecutor mSplitTaskExecutor ;
84- private final SplitClientConfig mConfig ;
85-
86- // Helper class for tracking SDK startup time
87- public static class StartupTimeTracker {
88- private static final long startTime = System .currentTimeMillis ();
89-
90- public static long getElapsedTime () {
91- return System .currentTimeMillis () - startTime ;
92- }
93-
94- public static String getElapsedTimeLog (String message ) {
95- return "[DEBUG-SDK-STARTUP][+" + getElapsedTime () + "ms] " + message ;
96- }
97- }
98-
9981 private final Key mDefaultClientKey ;
10082 private final SplitManager mManager ;
10183 private final Runnable mDestroyer ;
@@ -112,6 +94,11 @@ public static String getElapsedTimeLog(String message) {
11294 private volatile UserConsentManager mUserConsentManager ;
11395 private final ReentrantLock mInitLock = new ReentrantLock ();
11496
97+ private final EventsTrackerProvider mEventsTrackerProvider ;
98+ private final StrategyImpressionManager mImpressionManager ;
99+ private final SplitTaskExecutor mSplitTaskExecutor ;
100+ private final SplitClientConfig mConfig ;
101+
115102 public SplitFactoryImpl (@ NonNull String apiToken , @ NonNull Key key , @ NonNull SplitClientConfig config , @ NonNull Context context )
116103 throws URISyntaxException {
117104 this (apiToken , key , config , context ,
@@ -128,7 +115,6 @@ private SplitFactoryImpl(@NonNull String apiToken, @NonNull Key key, @NonNull Sp
128115
129116 mDefaultClientKey = key ;
130117 final long initializationStartTime = System .currentTimeMillis ();
131- System .out .println (StartupTimeTracker .getElapsedTimeLog ("SplitFactoryImpl initialization started" ));
132118 SplitFactoryHelper factoryHelper = new SplitFactoryHelper ();
133119 setupValidations (config );
134120 ApiKeyValidator apiKeyValidator = new ApiKeyValidatorImpl ();
@@ -161,46 +147,32 @@ private SplitFactoryImpl(@NonNull String apiToken, @NonNull Key key, @NonNull Sp
161147 String databaseName = factoryHelper .getDatabaseName (config , apiToken , context );
162148 SplitRoomDatabase splitDatabase ;
163149 if (testDatabase == null ) {
164- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Getting database: " + databaseName ));
165150 splitDatabase = SplitRoomDatabase .getDatabase (context , databaseName );
166151 } else {
167152 splitDatabase = testDatabase ;
168153 Logger .d ("Using test database" );
169154 }
170155 mConfig = config ;
171- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Getting SplitCipher" ));
172156 SplitCipher splitCipher = factoryHelper .getCipher (apiToken , config .encryptionEnabled ());
173157
174- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Getting SplitsStorage" ));
175158 SplitsStorage splitsStorage = getSplitsStorage (splitDatabase , splitCipher );
176159
177- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating impressionsObserverExecutor" ));
178160 ScheduledThreadPoolExecutor impressionsObserverExecutor = new ScheduledThreadPoolExecutor (1 ,
179161 new ThreadPoolExecutor .CallerRunsPolicy ());
180162
181- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Building storage container" ));
182163 mStorageContainer = factoryHelper .buildStorageContainer (config .userConsent (),
183164 splitDatabase , config .shouldRecordTelemetry (), splitCipher , telemetryStorage , config .observerCacheExpirationPeriod (), impressionsObserverExecutor , splitsStorage );
184165
185- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating SplitTaskExecutor" ));
186166 mSplitTaskExecutor = new SplitTaskExecutorImpl ();
187167 mSplitTaskExecutor .pause ();
188168
189- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating EventsManagerCoordinator" ));
190169 EventsManagerCoordinator mEventsManagerCoordinator = new EventsManagerCoordinator ();
191170
192- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Getting filter configuration" ));
193171 Pair <Map <SplitFilter .Type , SplitFilter >, String > filtersConfig = factoryHelper .getFilterConfiguration (config .syncConfig ());
194172 Map <SplitFilter .Type , SplitFilter > filters = filtersConfig .first ;
195173 String splitsFilterQueryStringFromConfig = filtersConfig .second ;
196174
197- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Getting flags spec" ));
198175 String flagsSpec = getFlagsSpec (testingConfig );
199-
200- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Building SplitApiFacade" ));
201-
202- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Setting up HTTP client headers" ));
203-
204176 HttpClient defaultHttpClient ;
205177 if (httpClient == null ) {
206178 HttpClientImpl .Builder builder = new HttpClientImpl .Builder ()
@@ -223,34 +195,26 @@ private SplitFactoryImpl(@NonNull String apiToken, @NonNull Key key, @NonNull Sp
223195 SplitApiFacade splitApiFacade = factoryHelper .buildApiFacade (
224196 config , defaultHttpClient , splitsFilterQueryStringFromConfig );
225197
226- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Getting FlagSetsFilter" ));
227198 FlagSetsFilter flagSetsFilter = factoryHelper .getFlagSetsFilter (filters );
228199
229- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating SplitTaskFactory" ));
230200 SplitTaskFactory splitTaskFactory = new SplitTaskFactoryImpl (
231201 config , splitApiFacade , mStorageContainer , splitsFilterQueryStringFromConfig ,
232202 getFlagsSpec (testingConfig ), mEventsManagerCoordinator , filters , flagSetsFilter , testingConfig );
233203
234- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Building WorkManagerWrapper" ));
235204 WorkManagerWrapper workManagerWrapper = factoryHelper .buildWorkManagerWrapper (context , config , apiToken , databaseName , filters );
236205
237- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating SplitSingleThreadTaskExecutor" ));
238206 SplitSingleThreadTaskExecutor splitSingleThreadTaskExecutor = new SplitSingleThreadTaskExecutor ();
239207 splitSingleThreadTaskExecutor .pause ();
240208
241- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Getting ImpressionStrategyProvider" ));
242209 ImpressionStrategyProvider impressionStrategyProvider = factoryHelper .getImpressionStrategyProvider (mSplitTaskExecutor , splitTaskFactory , mStorageContainer , config );
243210 Pair <ProcessStrategy , PeriodicTracker > noneComponents = impressionStrategyProvider .getNoneComponents ();
244211
245- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating StrategyImpressionManager" ));
246212 mImpressionManager = new StrategyImpressionManager (noneComponents , impressionStrategyProvider .getStrategy (config .impressionsMode ()));
247213 final RetryBackoffCounterTimerFactory retryBackoffCounterTimerFactory = new RetryBackoffCounterTimerFactory ();
248214
249- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Building StreamingComponents" ));
250215 StreamingComponents streamingComponents = factoryHelper .buildStreamingComponents (mSplitTaskExecutor ,
251216 splitTaskFactory , config , defaultHttpClient , splitApiFacade , mStorageContainer , flagsSpec );
252217
253- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating Synchronizer" ));
254218 Synchronizer mSynchronizer = new SynchronizerImpl (
255219 config ,
256220 mSplitTaskExecutor ,
@@ -274,11 +238,9 @@ private SplitFactoryImpl(@NonNull String apiToken, @NonNull Key key, @NonNull Sp
274238
275239 CompressionUtilProvider compressionProvider = new CompressionUtilProvider ();
276240
277- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Getting TelemetrySynchronizer" ));
278241 TelemetrySynchronizer telemetrySynchronizer = factoryHelper .getTelemetrySynchronizer (mSplitTaskExecutor ,
279242 splitTaskFactory , config .telemetryRefreshRate (), config .shouldRecordTelemetry ());
280243
281- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Building SyncManager" ));
282244 mSyncManager = factoryHelper .buildSyncManager (
283245 config ,
284246 mSplitTaskExecutor ,
@@ -295,14 +257,12 @@ private SplitFactoryImpl(@NonNull String apiToken, @NonNull Key key, @NonNull Sp
295257 compressionProvider ),
296258 streamingComponents .getSyncGuardian ());
297259
298- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating LifecycleManager" ));
299260 if (testLifecycleManager == null ) {
300261 mLifecycleManager = new SplitLifecycleManagerImpl ();
301262 } else {
302263 mLifecycleManager = testLifecycleManager ;
303264 }
304265
305- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating ImpressionListener" ));
306266 ExecutorService impressionsLoggingTaskExecutor = factoryHelper .getImpressionsLoggingTaskExecutor ();
307267 final DecoratedImpressionListener splitImpressionListener
308268 = new SyncImpressionListener (mSyncManager , impressionsLoggingTaskExecutor );
@@ -319,21 +279,18 @@ private SplitFactoryImpl(@NonNull String apiToken, @NonNull Key key, @NonNull Sp
319279 mEventsTrackerProvider = new EventsTrackerProvider (mStorageContainer .getSplitsStorage (),
320280 mStorageContainer .getTelemetryStorage (), mSyncManager );
321281
322- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating client components register" ));
323282 ClientComponentsRegister componentsRegister = factoryHelper .getClientComponentsRegister (config , mSplitTaskExecutor ,
324283 mEventsManagerCoordinator , mSynchronizer , streamingComponents .getNotificationParser (),
325284 streamingComponents .getNotificationProcessor (), streamingComponents .getSseAuthenticator (),
326285 mStorageContainer , mSyncManager , compressionProvider );
327286
328- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating SplitClientContainer" ));
329287 mClientContainer = new SplitClientContainerImpl (
330288 mDefaultClientKey .matchingKey (), this , config , mSyncManager ,
331289 telemetrySynchronizer , mStorageContainer , mSplitTaskExecutor , splitApiFacade ,
332290 validationLogger , keyValidator , customerImpressionListener ,
333291 streamingComponents .getPushNotificationManager (), componentsRegister , workManagerWrapper ,
334292 mEventsTrackerProvider , flagSetsFilter );
335293
336- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating Destroyer" ));
337294 mDestroyer = new Runnable () {
338295 public void run () {
339296 mInitLock .lock ();
@@ -378,7 +335,6 @@ public void run() {
378335 }
379336 }
380337 };
381- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Adding shutdown hook" ));
382338 Runtime .getRuntime ().addShutdownHook (new Thread () {
383339 @ Override
384340 public void run () {
@@ -387,7 +343,6 @@ public void run() {
387343 }
388344 });
389345 // Set up async initialization
390- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating SplitFactoryHelper.Initializer" ));
391346 final SplitFactoryHelper .Initializer initializer = new SplitFactoryHelper .Initializer (apiToken ,
392347 config ,
393348 splitTaskFactory ,
@@ -408,21 +363,17 @@ public void run() {
408363 }
409364
410365 // Run initializer
411- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Starting initializer thread" ));
412366 new Thread (initializer ).start ();
413367
414368 CleanUpDatabaseTask cleanUpDatabaseTask = splitTaskFactory .createCleanUpDatabaseTask (System .currentTimeMillis () / 1000 );
415369 mSplitTaskExecutor .schedule (cleanUpDatabaseTask , 5L , null );
416370
417371 // Initialize default client
418- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Initializing default client" ));
419372 client ();
420- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating SplitParser and SplitManager" ));
421373 SplitParser mSplitParser = new SplitParser (mStorageContainer .getMySegmentsStorageContainer (), mStorageContainer .getMyLargeSegmentsStorageContainer ());
422374 mManager = new SplitManagerImpl (
423375 mStorageContainer .getSplitsStorage (),
424376 new SplitValidatorImpl (), mSplitParser );
425- System .out .println (StartupTimeTracker .getElapsedTimeLog ("SplitFactoryImpl initialization completed in " + (System .currentTimeMillis () - initializationStartTime ) + "ms" ));
426377 }
427378
428379 @ NonNull
@@ -504,9 +455,8 @@ public void setUserConsent(boolean enabled) {
504455
505456 private UserConsentManager getUserConsentManager () {
506457 if (mUserConsentManager == null ) {
507- synchronized (this ) {
458+ synchronized (mConfig ) {
508459 if (mUserConsentManager == null ) {
509- System .out .println (StartupTimeTracker .getElapsedTimeLog ("Creating UserConsentManager" ));
510460 mUserConsentManager = new UserConsentManagerImpl (mConfig ,
511461 mStorageContainer .getImpressionsStorage (),
512462 mStorageContainer .getEventsStorage (),
@@ -528,7 +478,6 @@ void checkClients() {
528478 }
529479
530480 private void setupValidations (SplitClientConfig splitClientConfig ) {
531-
532481 ValidationConfig .getInstance ().setMaximumKeyLength (splitClientConfig .maximumKeyLength ());
533482 ValidationConfig .getInstance ().setTrackEventNamePattern (splitClientConfig .trackEventNamePattern ());
534483 }
@@ -550,7 +499,6 @@ public EventsTracker getEventsTracker() {
550499 if (mEventsTracker == null ) {
551500 synchronized (this ) {
552501 if (mEventsTracker == null ) {
553- System .out .println (SplitFactoryImpl .StartupTimeTracker .getElapsedTimeLog ("Creating events tracker" ));
554502 EventValidator eventsValidator = new EventValidatorImpl (new KeyValidatorImpl (), mSplitsStorage );
555503 mEventsTracker = new EventsTrackerImpl (eventsValidator , new ValidationMessageLoggerImpl (), mTelemetryStorage ,
556504 new EventPropertiesProcessorImpl (), mSyncManager );
0 commit comments