OSDN Git Service

Add log for AnomalyDetectionJobService
authorLei Yu <jackqdyulei@google.com>
Tue, 20 Mar 2018 18:33:13 +0000 (11:33 -0700)
committerLei Yu <jackqdyulei@google.com>
Thu, 22 Mar 2018 00:44:02 +0000 (17:44 -0700)
When anomaly is detected, also log it in AnomalyDetectionJobService

Bug: 73888115
Test: RunSettingsRoboTests
Change-Id: I0a42f8935d9a83eb763dd1f9dedfb71301853104

src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java
tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java

index 619913d..a34bb90 100644 (file)
@@ -38,13 +38,16 @@ import android.os.UserManager;
 import android.provider.Settings;
 import android.support.annotation.VisibleForTesting;
 import android.util.Log;
+import android.util.Pair;
 
+import com.android.internal.logging.nano.MetricsProto;
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.internal.util.ArrayUtils;
 import com.android.settings.R;
 import com.android.settings.fuelgauge.BatteryUtils;
 import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
 import com.android.settingslib.utils.ThreadUtils;
 
@@ -78,6 +81,7 @@ public class AnomalyDetectionJobService extends JobService {
     @Override
     public boolean onStartJob(JobParameters params) {
         ThreadUtils.postOnBackgroundThread(() -> {
+            final Context context = AnomalyDetectionJobService.this;
             final BatteryDatabaseManager batteryDatabaseManager =
                     BatteryDatabaseManager.getInstance(this);
             final BatteryTipPolicy policy = new BatteryTipPolicy(this);
@@ -89,12 +93,14 @@ public class AnomalyDetectionJobService extends JobService {
             final PowerWhitelistBackend powerWhitelistBackend = PowerWhitelistBackend.getInstance();
             final PowerUsageFeatureProvider powerUsageFeatureProvider = FeatureFactory
                     .getFactory(this).getPowerUsageFeatureProvider(this);
+            final MetricsFeatureProvider metricsFeatureProvider = FeatureFactory
+                    .getFactory(this).getMetricsFeatureProvider();
 
             for (JobWorkItem item = params.dequeueWork(); item != null;
                     item = params.dequeueWork()) {
-                saveAnomalyToDatabase(batteryStatsHelper, userManager, batteryDatabaseManager,
-                        batteryUtils, policy, powerWhitelistBackend, contentResolver,
-                        powerUsageFeatureProvider,
+                saveAnomalyToDatabase(context, batteryStatsHelper, userManager,
+                        batteryDatabaseManager, batteryUtils, policy, powerWhitelistBackend,
+                        contentResolver, powerUsageFeatureProvider, metricsFeatureProvider,
                         item.getIntent().getExtras());
             }
             jobFinished(params, false /* wantsReschedule */);
@@ -109,11 +115,12 @@ public class AnomalyDetectionJobService extends JobService {
     }
 
     @VisibleForTesting
-    void saveAnomalyToDatabase(BatteryStatsHelper batteryStatsHelper, UserManager userManager,
+    void saveAnomalyToDatabase(Context context, BatteryStatsHelper batteryStatsHelper,
+            UserManager userManager,
             BatteryDatabaseManager databaseManager, BatteryUtils batteryUtils,
             BatteryTipPolicy policy, PowerWhitelistBackend powerWhitelistBackend,
             ContentResolver contentResolver, PowerUsageFeatureProvider powerUsageFeatureProvider,
-            Bundle bundle) {
+            MetricsFeatureProvider metricsFeatureProvider, Bundle bundle) {
         // The Example of intentDimsValue is: 35:{1:{1:{1:10013|}|}|}
         final StatsDimensionsValue intentDimsValue =
                 bundle.getParcelable(StatsManager.EXTRA_STATS_DIMENSIONS_VALUE);
@@ -158,6 +165,11 @@ public class AnomalyDetectionJobService extends JobService {
                                 AnomalyDatabaseHelper.State.NEW,
                                 timeMs);
                     }
+                    metricsFeatureProvider.action(context,
+                            MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
+                            packageName,
+                            Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT,
+                                    anomalyInfo.anomalyType));
                 }
             }
         } catch (NullPointerException | IndexOutOfBoundsException e) {
index d2b11fd..b5d764d 100644 (file)
@@ -38,7 +38,9 @@ import android.os.Bundle;
 import android.os.Process;
 import android.os.StatsDimensionsValue;
 import android.os.UserManager;
+import android.util.Pair;
 
+import com.android.internal.logging.nano.MetricsProto;
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.settings.R;
 import com.android.settings.fuelgauge.BatteryUtils;
@@ -67,6 +69,7 @@ public class AnomalyDetectionJobServiceTest {
             "anomaly_type=6,auto_restriction=true";
     private static final String SUBSCRIBER_COOKIES_NOT_AUTO_RESTRICTION =
             "anomaly_type=6,auto_restriction=false";
+    private static final int ANOMALY_TYPE = 6;
     @Mock
     private BatteryStatsHelper mBatteryStatsHelper;
     @Mock
@@ -119,9 +122,11 @@ public class AnomalyDetectionJobServiceTest {
         doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
         doReturn(true).when(mPowerWhitelistBackend).isSysWhitelisted(SYSTEM_PACKAGE);
 
-        mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
-                mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,
-                mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle);
+        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
+                mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
+                mPowerWhitelistBackend, mContext.getContentResolver(),
+                mFeatureFactory.powerUsageFeatureProvider,
+                mFeatureFactory.metricsFeatureProvider, mBundle);
 
         verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
                 anyInt(), anyLong());
@@ -132,9 +137,11 @@ public class AnomalyDetectionJobServiceTest {
         doReturn(Process.SYSTEM_UID).when(
                 mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
 
-        mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
-                mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,
-                mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle);
+        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
+                mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
+                mPowerWhitelistBackend, mContext.getContentResolver(),
+                mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
+                mBundle);
 
         verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
                 anyInt(), anyLong());
@@ -149,12 +156,18 @@ public class AnomalyDetectionJobServiceTest {
         doReturn(Process.FIRST_APPLICATION_UID).when(
                 mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
 
-        mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
-                mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,
-                mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle);
+        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
+                mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
+                mPowerWhitelistBackend, mContext.getContentResolver(),
+                mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
+                mBundle);
 
         verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6),
                 eq(AnomalyDatabaseHelper.State.AUTO_HANDLED), anyLong());
+        verify(mFeatureFactory.metricsFeatureProvider).action(mContext,
+                MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
+                SYSTEM_PACKAGE,
+                Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, ANOMALY_TYPE));
     }
 
 
@@ -167,11 +180,17 @@ public class AnomalyDetectionJobServiceTest {
         doReturn(Process.FIRST_APPLICATION_UID).when(
                 mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
 
-        mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
-                mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,
-                mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle);
+        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
+                mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
+                mPowerWhitelistBackend, mContext.getContentResolver(),
+                mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
+                mBundle);
 
         verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6),
                 eq(AnomalyDatabaseHelper.State.NEW), anyLong());
+        verify(mFeatureFactory.metricsFeatureProvider).action(mContext,
+                MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
+                SYSTEM_PACKAGE,
+                Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, ANOMALY_TYPE));
     }
 }