Merge "DO NOT MERGE Change batch finalization timeout mechanism from Handler#sendMessageDelayed() to a wakeful alarm" into nyc-mr2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c399e4d964
@@ -1466,6 +1466,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
|||||||
return (TrustManager) mContext.getSystemService(Context.TRUST_SERVICE);
|
return (TrustManager) mContext.getSystemService(Context.TRUST_SERVICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AlarmManager getAlarmManager() {
|
||||||
|
return (AlarmManager) mContext.getSystemService(AlarmManager.class);
|
||||||
|
}
|
||||||
|
|
||||||
IWindowManager getIWindowManager() {
|
IWindowManager getIWindowManager() {
|
||||||
return IWindowManager.Stub
|
return IWindowManager.Stub
|
||||||
.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE));
|
.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE));
|
||||||
@@ -1985,7 +1989,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
|||||||
long token = mInjector.binderClearCallingIdentity();
|
long token = mInjector.binderClearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
int affectedUserHandle = parent ? getProfileParentId(userHandle) : userHandle;
|
int affectedUserHandle = parent ? getProfileParentId(userHandle) : userHandle;
|
||||||
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
AlarmManager am = mInjector.getAlarmManager();
|
||||||
PendingIntent pi = PendingIntent.getBroadcastAsUser(context, REQUEST_EXPIRE_PASSWORD,
|
PendingIntent pi = PendingIntent.getBroadcastAsUser(context, REQUEST_EXPIRE_PASSWORD,
|
||||||
new Intent(ACTION_EXPIRED_PASSWORD_NOTIFICATION),
|
new Intent(ACTION_EXPIRED_PASSWORD_NOTIFICATION),
|
||||||
PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT,
|
PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT,
|
||||||
|
|||||||
@@ -16,12 +16,15 @@
|
|||||||
|
|
||||||
package com.android.server.devicepolicy;
|
package com.android.server.devicepolicy;
|
||||||
|
|
||||||
|
import android.app.AlarmManager;
|
||||||
|
import android.app.AlarmManager.OnAlarmListener;
|
||||||
import android.app.admin.DeviceAdminReceiver;
|
import android.app.admin.DeviceAdminReceiver;
|
||||||
import android.app.admin.NetworkEvent;
|
import android.app.admin.NetworkEvent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
|
import android.os.SystemClock;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.internal.annotations.GuardedBy;
|
import com.android.internal.annotations.GuardedBy;
|
||||||
@@ -42,11 +45,26 @@ final class NetworkLoggingHandler extends Handler {
|
|||||||
// If this value changes, update DevicePolicyManager#retrieveNetworkLogs() javadoc
|
// If this value changes, update DevicePolicyManager#retrieveNetworkLogs() javadoc
|
||||||
private static final int MAX_EVENTS_PER_BATCH = 1200;
|
private static final int MAX_EVENTS_PER_BATCH = 1200;
|
||||||
private static final long BATCH_FINALIZATION_TIMEOUT_MS = TimeUnit.MINUTES.toMillis(90);
|
private static final long BATCH_FINALIZATION_TIMEOUT_MS = TimeUnit.MINUTES.toMillis(90);
|
||||||
|
private static final long BATCH_FINALIZATION_TIMEOUT_ALARM_INTERVAL_MS =
|
||||||
|
TimeUnit.MINUTES.toMillis(30);
|
||||||
|
|
||||||
static final int LOG_NETWORK_EVENT_MSG = 1;
|
private static final String NETWORK_LOGGING_TIMEOUT_ALARM_TAG = "NetworkLogging.batchTimeout";
|
||||||
static final int FINALIZE_BATCH_MSG = 2;
|
|
||||||
|
|
||||||
private final DevicePolicyManagerService mDpm;
|
private final DevicePolicyManagerService mDpm;
|
||||||
|
private final AlarmManager mAlarmManager;
|
||||||
|
|
||||||
|
private final OnAlarmListener mBatchTimeoutAlarmListener = new OnAlarmListener() {
|
||||||
|
@Override
|
||||||
|
public void onAlarm() {
|
||||||
|
Log.d(TAG, "Received a batch finalization timeout alarm, finalizing "
|
||||||
|
+ mNetworkEvents.size() + " pending events.");
|
||||||
|
synchronized (NetworkLoggingHandler.this) {
|
||||||
|
finalizeBatchAndNotifyDeviceOwnerIfNotEmpty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static final int LOG_NETWORK_EVENT_MSG = 1;
|
||||||
|
|
||||||
// threadsafe as it's Handler's thread confined
|
// threadsafe as it's Handler's thread confined
|
||||||
@GuardedBy("this")
|
@GuardedBy("this")
|
||||||
@@ -62,6 +80,7 @@ final class NetworkLoggingHandler extends Handler {
|
|||||||
NetworkLoggingHandler(Looper looper, DevicePolicyManagerService dpm) {
|
NetworkLoggingHandler(Looper looper, DevicePolicyManagerService dpm) {
|
||||||
super(looper);
|
super(looper);
|
||||||
mDpm = dpm;
|
mDpm = dpm;
|
||||||
|
mAlarmManager = mDpm.mInjector.getAlarmManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -77,17 +96,19 @@ final class NetworkLoggingHandler extends Handler {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FINALIZE_BATCH_MSG: {
|
default: {
|
||||||
finalizeBatchAndNotifyDeviceOwnerIfNotEmpty();
|
Log.d(TAG, "NetworkLoggingHandler received an unknown of message.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void scheduleBatchFinalization() {
|
void scheduleBatchFinalization() {
|
||||||
removeMessages(FINALIZE_BATCH_MSG);
|
final long when = SystemClock.elapsedRealtime() + BATCH_FINALIZATION_TIMEOUT_MS;
|
||||||
sendMessageDelayed(obtainMessage(FINALIZE_BATCH_MSG), BATCH_FINALIZATION_TIMEOUT_MS);
|
mAlarmManager.setWindow(AlarmManager.ELAPSED_REALTIME_WAKEUP, when,
|
||||||
Log.d(TAG, "Scheduled new batch finalization " + BATCH_FINALIZATION_TIMEOUT_MS
|
BATCH_FINALIZATION_TIMEOUT_ALARM_INTERVAL_MS, NETWORK_LOGGING_TIMEOUT_ALARM_TAG,
|
||||||
|
mBatchTimeoutAlarmListener, this);
|
||||||
|
Log.d(TAG, "Scheduled a new batch finalization alarm " + BATCH_FINALIZATION_TIMEOUT_MS
|
||||||
+ "ms from now.");
|
+ "ms from now.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user