diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-11-24 00:28:28 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-11-24 00:28:28 +0000 |
commit | 74155c9cc3035d0cee2a79b464a9fca3d9047f78 (patch) | |
tree | 34af73598d769ed09921916c902881c517c09989 | |
parent | 84a2fed63d01c676ccbd7f684463810c3cb4c20c (diff) | |
parent | 1950b88ffd1a8259af5e054a199aeee286d1cd73 (diff) | |
download | Car-74155c9cc3035d0cee2a79b464a9fca3d9047f78.tar.gz |
Snap for 9325733 from 1950b88ffd1a8259af5e054a199aeee286d1cd73 to tm-d4-release
Change-Id: Ie685a2ff2425ca19a3a4e52f3a29bf1848b8396c
3 files changed, 75 insertions, 10 deletions
diff --git a/service/src/com/android/car/telemetry/publisher/ConnectivityPublisher.java b/service/src/com/android/car/telemetry/publisher/ConnectivityPublisher.java index ca4ef84280..2bc7a8c3ee 100644 --- a/service/src/com/android/car/telemetry/publisher/ConnectivityPublisher.java +++ b/service/src/com/android/car/telemetry/publisher/ConnectivityPublisher.java @@ -173,7 +173,11 @@ public class ConnectivityPublisher extends AbstractPublisher { } try { for (QueryParam param : mSubscribers.keySet()) { - mTransportPreviousNetstats.put(param, getSummaryForAllUid(param)); + RefinedStats summary = getSummaryForAllUid(param); + if (summary == null) { + continue; + } + mTransportPreviousNetstats.put(param, summary); } } catch (RemoteException e) { // Can't do much if the NetworkStatsService is not available. Next netstats pull @@ -233,13 +237,17 @@ public class ConnectivityPublisher extends AbstractPublisher { RefinedStats current; try { current = getSummaryForAllUid(param); - } catch (RemoteException | NullPointerException e) { + } catch (RemoteException e) { // If the NetworkStatsService is not available, it retries in the next pull. Slogf.w(CarLog.TAG_TELEMETRY, e); mTraceLog.traceEnd(); return null; } + if (current == null) { + mTraceLog.traceEnd(); + return null; + } // By subtracting, it calculates network usage since the last pull. RefinedStats diff = RefinedStats.subtract(current, previous); @@ -260,7 +268,7 @@ public class ConnectivityPublisher extends AbstractPublisher { * * <p>TODO(b/218529196): run this method on a separate thread for better performance. */ - @NonNull + @Nullable private RefinedStats getSummaryForAllUid(@NonNull QueryParam param) throws RemoteException { if (DEBUG) { Slogf.d(CarLog.TAG_TELEMETRY, "getSummaryForAllUid " + param); @@ -273,12 +281,22 @@ public class ConnectivityPublisher extends AbstractPublisher { - elapsedMillisSinceBoot - NETSTATS_UID_DEFAULT_BUCKET_DURATION_MILLIS; - NetworkStatsWrapper nonTaggedStats = - mNetworkStatsManager.querySummary( - param.buildNetworkTemplate(), startMillis, currentTimeInMillis); - NetworkStatsWrapper taggedStats = - mNetworkStatsManager.queryTaggedSummary( - param.buildNetworkTemplate(), startMillis, currentTimeInMillis); + NetworkStatsWrapper nonTaggedStats; + NetworkStatsWrapper taggedStats; + // querySummary and queryTaggedSummary may throw NPE propagated from NetworkStatsService + // when its NetworkStatsRecorder failed to initialize and + // NetworkStatsRecorder.getOrLoadCompleteLocked() is called. + try { + nonTaggedStats = + mNetworkStatsManager.querySummary( + param.buildNetworkTemplate(), startMillis, currentTimeInMillis); + taggedStats = + mNetworkStatsManager.queryTaggedSummary( + param.buildNetworkTemplate(), startMillis, currentTimeInMillis); + } catch (NullPointerException e) { + Slogf.w(CarLog.TAG_TELEMETRY, e); + return null; + } RefinedStats result = new RefinedStats(startMillis, currentTimeInMillis); result.addNetworkStats(nonTaggedStats); diff --git a/tests/CarEvsCameraPreviewApp/src/com/google/android/car/evs/CarEvsCameraPreviewActivity.java b/tests/CarEvsCameraPreviewApp/src/com/google/android/car/evs/CarEvsCameraPreviewActivity.java index f5c9337b2e..01c0667213 100644 --- a/tests/CarEvsCameraPreviewApp/src/com/google/android/car/evs/CarEvsCameraPreviewActivity.java +++ b/tests/CarEvsCameraPreviewApp/src/com/google/android/car/evs/CarEvsCameraPreviewActivity.java @@ -50,6 +50,15 @@ import java.util.concurrent.Executors; public class CarEvsCameraPreviewActivity extends Activity { private static final String TAG = CarEvsCameraPreviewActivity.class.getSimpleName(); + /** + * ActivityManagerService encodes the reason for a request to close system dialogs with this + * key. + */ + private final static String EXTRA_DIALOG_CLOSE_REASON = "reason"; + /** This string literal is from com.android.systemui.car.systembar.CarSystemBarButton class. */ + private final static String DIALOG_CLOSE_REASON_CAR_SYSTEMBAR_BUTTON = "carsystembarbutton"; + /** This string literal is from com.android.server.policy.PhoneWindowManager class. */ + private final static String DIALOG_CLOSE_REASON_HOME_KEY = "homekey"; /** * Defines internal states. @@ -199,6 +208,17 @@ public class CarEvsCameraPreviewActivity extends Activity { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) { + Bundle extras = intent.getExtras(); + if (extras != null) { + String reason = extras.getString(EXTRA_DIALOG_CLOSE_REASON); + if (!DIALOG_CLOSE_REASON_CAR_SYSTEMBAR_BUTTON.equals(reason) && + !DIALOG_CLOSE_REASON_HOME_KEY.equals(reason)) { + Log.i(TAG, "Ignore a request to close the system dialog with a reason = " + + reason); + return; + } + Log.d(TAG, "Requested to close the dialog, reason = " + reason); + } finish(); } else { Log.e(TAG, "Unexpected intent " + intent); @@ -213,7 +233,7 @@ public class CarEvsCameraPreviewActivity extends Activity { // Need to register the receiver for all users, because we want to receive the Intent after // the user is changed. registerReceiverForAllUsers(mBroadcastReceiver, filter, /* broadcastPermission= */ null, - /* scheduler= */ null, Context.RECEIVER_NOT_EXPORTED); + /* scheduler= */ null, Context.RECEIVER_EXPORTED); } @Override diff --git a/tests/carservice_unit_test/src/com/android/car/telemetry/publisher/ConnectivityPublisherTest.java b/tests/carservice_unit_test/src/com/android/car/telemetry/publisher/ConnectivityPublisherTest.java index 93ebc907cb..e10dd1a876 100644 --- a/tests/carservice_unit_test/src/com/android/car/telemetry/publisher/ConnectivityPublisherTest.java +++ b/tests/carservice_unit_test/src/com/android/car/telemetry/publisher/ConnectivityPublisherTest.java @@ -527,6 +527,21 @@ public class ConnectivityPublisherTest { .asList().containsExactly(1000L); } + @Test + public void testWhenQueryThrowsNullPointerExceptionIsCaught() { + mFakeManager.setSimulateFailedQuery(true); + mSessionControllerCallbackArgumentCaptor.getValue().onSessionStateChanged( + SESSION_ANNOTATION_BEGIN_1); + + // querySummary gets called for each QueryParam combination, but throws + // NullPointerException each time, which is caught + assertThat(mFakeManager.getMethodCallCount("querySummary")) + .isEqualTo(BASELINE_PULL_COUNT); + // queryTaggedSummary not reached because of previous NullPointerException in querySummary + assertThat(mFakeManager.getMethodCallCount("queryTaggedSummary")) + .isEqualTo(0); + } + private static class FakeDataSubscriber extends DataSubscriber { private final ArrayList<PushedData> mPushedData = new ArrayList<>(); @@ -569,6 +584,8 @@ public class ConnectivityPublisherTest { private final ArrayList<FakeNetworkStats.CustomBucket> mBuckets = new ArrayList<>(); private final HashMap<String, Integer> mMethodCallCount = new HashMap<>(); + private boolean mSimulateFailedQuery = false; + private FakeNetworkStatsManager() { super(/* networkStatsManager= */ null); } @@ -623,10 +640,17 @@ public class ConnectivityPublisherTest { return mMethodCallCount.getOrDefault(name, 0); } + public void setSimulateFailedQuery(boolean simulateFailedQuery) { + mSimulateFailedQuery = simulateFailedQuery; + } + @Override @NonNull public NetworkStatsWrapper querySummary(NetworkTemplate template, long start, long end) { increaseMethodCall("querySummary", 1); + if (mSimulateFailedQuery) { + throw new NullPointerException(); + } return commonQuerySummary(false, template, start, end); } @@ -635,6 +659,9 @@ public class ConnectivityPublisherTest { public NetworkStatsWrapper queryTaggedSummary( NetworkTemplate template, long start, long end) { increaseMethodCall("queryTaggedSummary", 1); + if (mSimulateFailedQuery) { + throw new NullPointerException(); + } return commonQuerySummary(true, template, start, end); } |