aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-11-24 00:28:28 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-11-24 00:28:28 +0000
commit74155c9cc3035d0cee2a79b464a9fca3d9047f78 (patch)
tree34af73598d769ed09921916c902881c517c09989
parent84a2fed63d01c676ccbd7f684463810c3cb4c20c (diff)
parent1950b88ffd1a8259af5e054a199aeee286d1cd73 (diff)
downloadCar-74155c9cc3035d0cee2a79b464a9fca3d9047f78.tar.gz
Snap for 9325733 from 1950b88ffd1a8259af5e054a199aeee286d1cd73 to tm-d4-release
Change-Id: Ie685a2ff2425ca19a3a4e52f3a29bf1848b8396c
-rw-r--r--service/src/com/android/car/telemetry/publisher/ConnectivityPublisher.java36
-rw-r--r--tests/CarEvsCameraPreviewApp/src/com/google/android/car/evs/CarEvsCameraPreviewActivity.java22
-rw-r--r--tests/carservice_unit_test/src/com/android/car/telemetry/publisher/ConnectivityPublisherTest.java27
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);
}