2f558d2659
When an app takes a long time to handle broadcasts, we start deferring further broadcasts to it to make sure that other broadcast traffic in the system can continue to make progress. Global delivery order is technically rearranged, but delivery order from the point of view of any given app remains consistent with issuance order. When alarm broadcasts are issued, we prioritize delivery of deferred alarms to the alarm recipients (i.e. we suspend the deferral policy and catch up as promptly as possible) in order to minimize wake time spent waiting for the alarm broadcast to be delivered. Once an app with a deferred broadcast backlog is no longer the target of an in-flight alarm, we re-impose deferral policy on it. This policy intentionally trades off increased broadcast delivery latency to apps that take a "long" time to handle broadcasts, in exchange for lowering delivery latency to all other apps in the system that would previously have had to wait behind the slow app. In addition, broadcast dispatch policy parameters can now be overlaid via the usual global Settings mechanism. In particular, configuring the "bcast_slow_time" parameter to a value in milliseconds higher than the queue's broadcast timeout period will disable the new slow-receiver policies. Bug: 111404343 Test: device boots & runs Test: tests/ActivityTests Change-Id: I76ac79bdf41ca3cfcc48515bca779ea0f5744c0b
101 lines
4.9 KiB
XML
101 lines
4.9 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- Copyright (C) 2008 The Android Open Source Project
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
package="com.google.android.test.activity">
|
|
<uses-permission android:name="android.permission.REAL_GET_TASKS" />
|
|
<uses-permission android:name="android.permission.REORDER_TASKS" />
|
|
<uses-permission android:name="android.permission.REMOVE_TASKS" />
|
|
<uses-permission android:name="android.permission.READ_FRAME_BUFFER" />
|
|
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
|
|
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
|
|
<uses-permission android:name="android.permission.MANAGE_USERS" />
|
|
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
|
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
|
<uses-sdk android:targetSdkVersion="22" />
|
|
<application android:label="ActivityTest">
|
|
<activity android:name="ActivityTestMain">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MAIN" />
|
|
<category android:name="android.intent.category.LAUNCHER" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
<data android:scheme="http" android:host="www.angryredplanet.com"
|
|
android:pathPrefix="" />
|
|
</intent-filter>
|
|
<preferred>
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
<data android:scheme="http" android:host="www.angryredplanet.com"
|
|
android:pathPrefix="" />
|
|
</preferred>
|
|
</activity>
|
|
<activity android:name="SpamActivity" android:label="Spam!"
|
|
android:documentLaunchMode="always">
|
|
</activity>
|
|
<activity android:name="DocActivity" android:label="Some doc">
|
|
</activity>
|
|
<service android:name="SingleUserService"
|
|
android:singleUser="true" android:exported="true">
|
|
</service>
|
|
<service android:name="ServiceUserTarget">
|
|
</service>
|
|
<receiver android:name="UserTarget">
|
|
</receiver>
|
|
<service android:name="IsolatedService" android:isolatedProcess="true">
|
|
</service>
|
|
<receiver android:name="StartEmpty" android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="com.example.START_EMPTY" />
|
|
</intent-filter>
|
|
</receiver>
|
|
<service android:name="EmptyService" android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="com.example.START_EMPTY" />
|
|
</intent-filter>
|
|
</service>
|
|
<receiver android:name="SingleUserReceiver"
|
|
android:singleUser="true" android:exported="true" >
|
|
</receiver>
|
|
<provider android:name="SingleUserProvider"
|
|
android:authorities="com.google.android.test.activity.single_user"
|
|
android:singleUser="true" android:exported="true" />
|
|
<receiver android:name="TrackTimeReceiver" />
|
|
<receiver android:name="AlarmSpamReceiver" />
|
|
<receiver android:name="SlowReceiver" />
|
|
<activity android:name="DisableScreenshotsActivity"
|
|
android:label="DisableScreenshots"
|
|
android:theme="@style/DisableScreenshots">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MAIN" />
|
|
<category android:name="android.intent.category.LAUNCHER" />
|
|
</intent-filter>
|
|
</activity>
|
|
<activity android:name="CustomSplashscreenActivity"
|
|
android:label="CustomSplashscreen"
|
|
android:theme="@style/CustomSplashscreen">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MAIN" />
|
|
<category android:name="android.intent.category.LAUNCHER" />
|
|
</intent-filter>
|
|
</activity>
|
|
</application>
|
|
</manifest>
|