[mob] Add utility to quickly measure time taken from previous step

This commit is contained in:
Neeraj Gupta
2024-10-17 16:26:32 +05:30
parent d66ab0b24e
commit b3243be90a
2 changed files with 59 additions and 30 deletions

View File

@@ -29,3 +29,30 @@ class EnteWatch extends Stopwatch {
stop();
}
}
// TimerLogger helps in quickly including the timeTaken for various operation.
// The timeTaken is logged only if it exceeds the logThreshold. With each call to toString, the timer is reset.
// Usage:
// final TimeLogger tlog = TimeLogger(context: "FaceRecognitionService");
// _logger.info("some operation $tlog");
// _logger.info("another operation $tlog");
class TimeLogger {
final String context;
final int logThreshold;
DateTime _start;
TimeLogger({this.context = "TLog", this.logThreshold = 5})
: _start = DateTime.now();
@override
String toString() {
final int diff = DateTime.now().difference(_start).inMilliseconds;
late String res;
if (diff > logThreshold) {
res = "[$context: $diff ms]";
} else {
res = "";
}
_start = DateTime.now();
return res;
}
}

View File

@@ -24,6 +24,7 @@ import 'package:photos/core/network/network.dart';
import "package:photos/db/ml/db.dart";
import 'package:photos/db/upload_locks_db.dart';
import 'package:photos/ente_theme_data.dart';
import "package:photos/extensions/stop_watch.dart";
import "package:photos/l10n/l10n.dart";
import "package:photos/service_locator.dart";
import 'package:photos/services/app_lifecycle_service.dart';
@@ -197,6 +198,7 @@ void _headlessTaskHandler(HeadlessTask task) {
Future<void> _init(bool isBackground, {String via = ''}) async {
try {
bool initComplete = false;
final TimeLogger tlog = TimeLogger();
Future.delayed(const Duration(seconds: 15), () {
if (!initComplete && !isBackground) {
_logger.severe("Stuck on splash screen for >= 15 seconds");
@@ -209,79 +211,79 @@ Future<void> _init(bool isBackground, {String via = ''}) async {
});
if (!isBackground) _heartBeatOnInit(0);
_isProcessRunning = true;
_logger.info("Initializing... inBG =$isBackground via: $via");
_logger.info("Initializing... inBG =$isBackground via: $via $tlog");
final SharedPreferences preferences = await SharedPreferences.getInstance();
final PackageInfo packageInfo = await PackageInfo.fromPlatform();
await _logFGHeartBeatInfo(preferences);
_logger.info("_logFGHeartBeatInfo done");
_logger.info("_logFGHeartBeatInfo done $tlog");
unawaited(_scheduleHeartBeat(preferences, isBackground));
NotificationService.instance.init(preferences);
AppLifecycleService.instance.init(preferences);
if (isBackground) {
AppLifecycleService.instance.onAppInBackground('init via: $via');
AppLifecycleService.instance.onAppInBackground('init via: $via $tlog');
} else {
AppLifecycleService.instance.onAppInForeground('init via: $via');
AppLifecycleService.instance.onAppInForeground('init via: $via $tlog');
}
// Start workers asynchronously. No need to wait for them to start
Computer.shared().turnOn(workersCount: 4).ignore();
CryptoUtil.init();
_logger.info("Lockscreen init");
_logger.info("Lockscreen init $tlog");
unawaited(LockScreenSettings.instance.init(preferences));
_logger.info("Configuration init");
_logger.info("Configuration init $tlog");
await Configuration.instance.init();
_logger.info("Configuration done");
_logger.info("Configuration done $tlog");
_logger.info("NetworkClient init");
_logger.info("NetworkClient init $tlog");
await NetworkClient.instance.init(packageInfo);
_logger.info("NetworkClient init done");
_logger.info("NetworkClient init done $tlog");
ServiceLocator.instance
.init(preferences, NetworkClient.instance.enteDio, packageInfo);
_logger.info("UserService init");
_logger.info("UserService init $tlog");
await UserService.instance.init();
_logger.info("UserService init done");
_logger.info("UserService init done $tlog");
_logger.info("LocationService init");
_logger.info("LocationService init $tlog");
LocationService.instance.init(preferences);
_logger.info("LocationService init done");
_logger.info("LocationService init done $tlog");
_logger.info("UserRemoteFlagService init");
_logger.info("UserRemoteFlagService init $tlog");
await UserRemoteFlagService.instance.init();
_logger.info("UserRemoteFlagService init done");
_logger.info("UserRemoteFlagService init done $tlog");
_logger.info("BillingService init");
_logger.info("BillingService init $tlog");
BillingService.instance.init();
_logger.info("BillingService init done");
_logger.info("BillingService init done $tlog");
_logger.info("CollectionsService init");
_logger.info("CollectionsService init $tlog");
await CollectionsService.instance.init(preferences);
_logger.info("CollectionsService init done");
_logger.info("CollectionsService init done $tlog");
FavoritesService.instance.initFav().ignore();
_logger.info("FileUploader init");
_logger.info("FileUploader init $tlog");
await FileUploader.instance.init(preferences, isBackground);
_logger.info("FileUploader init done");
_logger.info("FileUploader init done $tlog");
_logger.info("LocalSyncService init");
_logger.info("LocalSyncService init $tlog");
await LocalSyncService.instance.init(preferences);
_logger.info("LocalSyncService init done");
_logger.info("LocalSyncService init done $tlog");
TrashSyncService.instance.init(preferences);
RemoteSyncService.instance.init(preferences);
_logger.info("SyncService init");
_logger.info("SyncService init $tlog");
await SyncService.instance.init(preferences);
_logger.info("SyncService init done");
_logger.info("SyncService init done $tlog");
MemoriesService.instance.init(preferences);
LocalFileUpdateService.instance.init(preferences);
SearchService.instance.init();
FileDataService.instance.init(preferences);
_logger.info("RemoteFileMLService done");
_logger.info("RemoteFileMLService done $tlog");
if (!isBackground &&
Platform.isAndroid &&
await HomeWidgetService.instance.countHomeWidgets() == 0) {
@@ -296,11 +298,11 @@ Future<void> _init(bool isBackground, {String via = ''}) async {
);
});
}
_logger.info("PushService/HomeWidget done");
_logger.info("PushService/HomeWidget done $tlog");
unawaited(SemanticSearchService.instance.init());
MachineLearningController.instance.init();
_logger.info("MachineLearningController done");
_logger.info("MachineLearningController done $tlog");
unawaited(MLService.instance.init());
PersonService.init(
entityService,
@@ -310,9 +312,9 @@ Future<void> _init(bool isBackground, {String via = ''}) async {
MagicCacheService.instance.init(preferences);
initComplete = true;
_logger.info("Initialization done");
_logger.info("Initialization done $tlog");
} catch (e, s) {
_logger.severe("Error in init", e, s);
_logger.severe("Error in init ", e, s);
rethrow;
}
}