Skip to content

Commit 024ea5f

Browse files
authored
Merge pull request #78 from pavan142/performanceAnalytics
Added Performance Analytics
2 parents 571d15d + 2bbc190 commit 024ea5f

File tree

9 files changed

+25
-20
lines changed

9 files changed

+25
-20
lines changed

app/build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@ apply plugin: 'kotlin-android'
44
// crash analytics
55
apply plugin: 'com.google.gms.google-services'
66
apply plugin: 'com.google.firebase.crashlytics'
7+
apply plugin: 'com.google.firebase.firebase-perf'
78

89
android {
910
compileSdkVersion 29
1011
defaultConfig {
1112
applicationId "com.frankenstein.screenx"
1213
minSdkVersion 21
1314
targetSdkVersion 29
14-
versionCode 8
15-
versionName "1.5.1"
15+
versionCode 9
16+
versionName "1.5.2-perf-baseline"
1617
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1718
}
1819
buildTypes {
@@ -78,6 +79,7 @@ dependencies {
7879
implementation platform('com.google.firebase:firebase-bom:26.7.0')
7980
implementation 'com.google.firebase:firebase-analytics'
8081
implementation 'com.google.firebase:firebase-crashlytics'
82+
implementation 'com.google.firebase:firebase-perf'
8183

8284
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
8385
testImplementation 'junit:junit:4.12'

app/src/main/AndroidManifest.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
<meta-data
2222
android:name="com.google.mlkit.vision.DEPENDENCIES"
2323
android:value="ocr" />
24+
<meta-data
25+
android:name="firebase_performance_logcat_enabled"
26+
android:value="true" />
2427
<activity
2528
android:name="com.frankenstein.screenx.MainActivity"
2629
android:label="@string/app_name"

app/src/main/java/com/frankenstein/screenx/ScreenFactory.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616

1717
import com.frankenstein.screenx.helper.Logger;
1818
import com.frankenstein.screenx.helper.PermissionHelper;
19-
import com.frankenstein.screenx.helper.TimeLogger;
2019
import com.frankenstein.screenx.models.AppGroup;
2120
import com.frankenstein.screenx.models.Screenshot;
2221
import com.frankenstein.screenx.multithreading.GetScreensAsyncTask;
22+
import com.google.firebase.perf.metrics.AddTrace;
2323

2424
import androidx.lifecycle.MutableLiveData;
2525

@@ -38,7 +38,6 @@ public class ScreenFactory {
3838

3939
private boolean _initialized = false;
4040
private final Logger _logger = Logger.getInstance("ScreenFactory");
41-
private static final Logger _mTimeLogger = TimeLogger.getInstance();
4241
private boolean _monitoring = false;
4342
private Handler _monitorHandler;
4443
private Handler _mainHandler;
@@ -66,9 +65,8 @@ private ScreenFactory(Context context) {
6665
startMonitor();
6766
}
6867

68+
@AddTrace(name = "analyze_all_screens")
6969
public void analyzeScreens(ArrayList<Screenshot> screens) {
70-
Long start = System.currentTimeMillis();
71-
_logger.log("Analyzing screens", Thread.currentThread().toString());
7270
ArrayList<Screenshot> newScreenshots = new ArrayList<>();
7371
for (AppGroup ag: appgroups.values())
7472
ag.screenshots.clear();
@@ -79,8 +77,6 @@ public void analyzeScreens(ArrayList<Screenshot> screens) {
7977
newScreenshots.add(screen);
8078
}
8179
sort();
82-
Long end = System.currentTimeMillis();
83-
_mTimeLogger.log("Posting Screenshots value to livedata on UI Thread, Time taken for analyze Screens is", (end-start));
8480
screenshots.postValue(newScreenshots);
8581
} catch (Exception e) {
8682
_logger.log("got an error: ", e.getMessage());

app/src/main/java/com/frankenstein/screenx/SearchActivity.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
import com.frankenstein.screenx.helper.Logger;
1212
import com.frankenstein.screenx.models.Screenshot;
13+
import com.google.firebase.perf.FirebasePerformance;
14+
import com.google.firebase.perf.metrics.Trace;
1315

1416
import java.util.ArrayList;
1517

@@ -24,6 +26,7 @@ public class SearchActivity extends MultipleSelectActivity {
2426
private LiveData<ArrayList<String>> _mLiveMatches = new LiveData<ArrayList<String>>() {};
2527
private ArrayList<String> _mMatches;
2628
private ImageButton _mClearSearch;
29+
private Trace _mSearchTrace;
2730

2831
@Override
2932
public void onCreate(Bundle savedInstanceState) {
@@ -35,19 +38,18 @@ public void onCreate(Bundle savedInstanceState) {
3538
@Override
3639
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
3740
_mLiveMatches.removeObservers(SearchActivity.this);
38-
_mLogger.log("beforeTextChagned", s, start, count, after);
3941
}
4042

4143
@Override
4244
public void onTextChanged(CharSequence s, int start, int before, int count) {
43-
_mLogger.log("onTextChagned", s, start, before, count);
45+
_mSearchTrace = FirebasePerformance.getInstance().newTrace("search_time");
46+
_mSearchTrace.start();
4447
_mLiveMatches = ScreenXApplication.textHelper.searchScreenshots(s.toString());
4548
checkAndToggleClear(count);
4649
}
4750

4851
@Override
4952
public void afterTextChanged(Editable s) {
50-
_mLogger.log("afterTextChagned", s.toString());
5153
_mLiveMatches.observe(SearchActivity.this, SearchActivity.this::onLiveMatches);
5254
}
5355
});
@@ -66,6 +68,7 @@ public void checkAndToggleClear(int count) {
6668
}
6769

6870
public void onLiveMatches(ArrayList<String> matches) {
71+
_mSearchTrace.stop();
6972
_mLogger.log("number of matches", matches.size());
7073
updateAdapter(matches);
7174
}

app/src/main/java/com/frankenstein/screenx/helper/AppHelper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.frankenstein.screenx.interfaces.TimeSortable;
1010
import com.frankenstein.screenx.models.Screenshot;
1111
import com.frankenstein.screenx.helper.UsageStatsHelper.Companion.*;
12+
import com.google.firebase.perf.metrics.AddTrace;
1213

1314
import java.io.File;
1415
import java.util.ArrayList;
@@ -121,6 +122,7 @@ private static String getSourceApp(Context context, String filename) {
121122
return appName;
122123
}
123124

125+
@AddTrace(name="label_all_screens")
124126
public static ArrayList<Screenshot> LabelMultipleScreens(ArrayList<Screenshot> screens, Context context, ArrayList<File> files) {
125127
ArrayList <Screenshot> newlyLabelledScreens = new ArrayList<>();
126128
ArrayList <Screenshot> systemScreens = new ArrayList<>();

app/src/main/java/com/frankenstein/screenx/helper/FileHelper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.os.Environment;
44

55
import com.frankenstein.screenx.models.Screenshot;
6+
import com.google.firebase.perf.metrics.AddTrace;
67

78
import java.io.File;
89
import java.util.ArrayList;
@@ -51,6 +52,7 @@ public static void createIfNot(File dir) {
5152
}
5253
}
5354

55+
@AddTrace(name = "files_get_all")
5456
public static ArrayList<File> getAllScreenshotFiles() {
5557
_mLogger.log("Permissions for File Read", SYSTEM_SCREENSHOT_DIR1.canRead(), SYSTEM_SCREENSHOT_DIR2.canRead(), CUSTOM_SCREENSHOT_DIR.canRead());
5658

app/src/main/java/com/frankenstein/screenx/helper/TextHelper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.google.android.gms.tasks.OnFailureListener;
1515
import com.google.android.gms.tasks.OnSuccessListener;
1616
import com.google.android.gms.tasks.Task;
17+
import com.google.firebase.perf.metrics.AddTrace;
1718
import com.google.mlkit.vision.common.InputImage;
1819
import com.google.mlkit.vision.text.Text;
1920
import com.google.mlkit.vision.text.TextRecognition;
@@ -153,6 +154,7 @@ public String textByFilenameDB(String filename) {
153154
}
154155

155156
// TO BE INVOKED ONLY ON A BACKGROUND THREAD
157+
@AddTrace(name = "db_get_all_screens")
156158
public List<ScreenShotEntity> getAllScreenshotsInDatabase() {
157159
if (Looper.myLooper() == Looper.getMainLooper()) {
158160
_mLogger.log("This operation is not supported on main thread");

app/src/main/java/com/frankenstein/screenx/multithreading/GetScreensAsyncTask.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.frankenstein.screenx.helper.Logger;
1010
import com.frankenstein.screenx.helper.TimeLogger;
1111
import com.frankenstein.screenx.models.Screenshot;
12+
import com.google.firebase.perf.metrics.AddTrace;
1213

1314
import java.io.File;
1415
import java.util.ArrayList;
@@ -22,25 +23,21 @@
2223
public class GetScreensAsyncTask extends AsyncTask<Object, Void, ArrayList<Screenshot>> {
2324

2425
private Logger _mLogger = Logger.getInstance("GetScreensAsyncTask");;
25-
private static final Logger _mTimeLogger = TimeLogger.getInstance();
2626

2727
public GetScreensAsyncTask() {
2828
super();
2929
}
3030

3131
@Override
3232
protected ArrayList<Screenshot> doInBackground(Object ...objects) {
33-
Long start = System.currentTimeMillis();
34-
_mTimeLogger.log("GetScreensAsyncTask: doInBackground");
33+
_mLogger.log("GetScreensAsyncTask: doInBackground");
3534
final Context context = (Context) objects[0];
3635
ArrayList<Screenshot> screens = new ArrayList<>();
3736
try {
3837
ArrayList<File> files = getAllScreenshotFiles();
39-
_mTimeLogger.d("Scanned all screenshot files");
4038

4139
List<ScreenShotEntity> existingEntities = ScreenXApplication.textHelper.getAllScreenshotsInDatabase();
4240
Map<String, ScreenShotEntity> existingEntitiesMap = new HashMap<>();
43-
_mTimeLogger.d("Fetched all the existing screenshots from database");
4441
for (ScreenShotEntity entity: existingEntities)
4542
existingEntitiesMap.put(entity.filename, entity);
4643

@@ -55,15 +52,12 @@ protected ArrayList<Screenshot> doInBackground(Object ...objects) {
5552
screens.add(newSreen);
5653
}
5754
}
58-
_mTimeLogger.d("Sending unlabelled screens for labelling");
5955

6056
ArrayList<Screenshot> newlyLabelledscreens = LabelMultipleScreens(screens, context, filesToBeLabeled);
61-
_mTimeLogger.d("Finished labelling", Thread.currentThread().toString());
6257
Long end = System.currentTimeMillis();
63-
_mTimeLogger.log("Total Screens", screens.size(), "Existing Screens",
58+
_mLogger.log("Total Screens", screens.size(), "Existing Screens",
6459
screens.size() - newlyLabelledscreens.size(),
6560
"Newly Labelled Screens", newlyLabelledscreens.size());
66-
_mTimeLogger.log("Time taken for processing screenshot files in background =", (end-start));
6761
ScreenXApplication.screenFactory.analyzeScreens(screens);
6862
ScreenXApplication.textHelper.updateAppNames(newlyLabelledscreens);
6963
} catch (Exception e) {

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ buildscript {
1616
// for analytics
1717
classpath 'com.google.gms:google-services:4.3.5'
1818
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.1'
19+
classpath 'com.google.firebase:perf-plugin:1.3.5'
1920
// NOTE: Do not place your application dependencies here; they belong
2021
// in the individual module build.gradle files
2122
}

0 commit comments

Comments
 (0)