Skip to content

Instantly share code, notes, and snippets.

@antdking
Last active August 29, 2015 14:09
Show Gist options
  • Save antdking/c529b7363318f554ad24 to your computer and use it in GitHub Desktop.
Save antdking/c529b7363318f554ad24 to your computer and use it in GitHub Desktop.
#
##
# diffing platform/build
##
#
diff --git a/core/build_id.mk b/core/build_id.mk
index f404c81..73a3313 100644
--- a/core/build_id.mk
+++ b/core/build_id.mk
@@ -18,4 +18,4 @@
# (like "CRB01"). It must be a single word, and is
# capitalized by convention.
-export BUILD_ID=LRX21Q
+export BUILD_ID=LRX21T
#
##
# diffing platform/cts
##
#
diff --git a/apps/CtsVerifier/AndroidManifest.xml b/apps/CtsVerifier/AndroidManifest.xml
index a5c2a22..b6abe30 100644
--- a/apps/CtsVerifier/AndroidManifest.xml
+++ b/apps/CtsVerifier/AndroidManifest.xml
@@ -17,8 +17,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.cts.verifier"
- android:versionCode="3"
- android:versionName="5.0_r0.5">
+ android:versionCode="4"
+ android:versionName="5.0_r1">
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="21"/>
@@ -94,6 +94,8 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_device_admin" />
+ <meta-data android:name="test_required_features"
+ android:value="android.software.device_admin" />
</activity>
<!-- A generic activity for intent based tests -->
@@ -108,7 +110,7 @@
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_device_admin" />
<meta-data android:name="test_excluded_features"
- android:value="android.hardware.type.television:android.software.leanback" />
+ android:value="android.hardware.type.television:android.software.leanback:android.hardware.type.watch" />
</activity>
<receiver android:name=".admin.TestDeviceAdminReceiver"
@@ -125,6 +127,8 @@
<action android:name="android.intent.action.MAIN" />
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
+ <meta-data android:name="test_required_features"
+ android:value="android.software.backup" />
</activity>
<activity android:name=".bluetooth.BluetoothTestActivity"
@@ -147,6 +151,7 @@
</intent-filter>
<meta-data android:name="test_category" android:value="@string/bt_control" />
<meta-data android:name="test_parent" android:value="com.android.cts.verifier.bluetooth.BluetoothTestActivity" />
+ <meta-data android:name="test_excluded_features" android:value="android.software.leanback" />
</activity>
<activity android:name=".bluetooth.SecureServerActivity"
@@ -229,7 +234,8 @@
<service android:name=".bluetooth.BleScannerService"
android:label="@string/ble_scanner_service_name" />
- <activity android:name=".bluetooth.BleClientTestActivity"
+ <!-- TODO: Enable when test quality issues listed in b/18283088 is resolved -->
+ <!-- activity android:name=".bluetooth.BleClientTestActivity"
android:label="@string/ble_client_test_name"
android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
@@ -238,7 +244,9 @@
</intent-filter>
<meta-data android:name="test_category" android:value="@string/bt_le" />
<meta-data android:name="test_parent" android:value="com.android.cts.verifier.bluetooth.BluetoothTestActivity" />
- </activity>
+ <meta-data android:name="test_required_features"
+ android:value="android.hardware.bluetooth_le"/>
+ </activity -->
<activity android:name=".bluetooth.BleClientConnectActivity"
android:label="@string/ble_client_connect_name"
@@ -328,7 +336,8 @@
<meta-data android:name="test_parent" android:value="com.android.cts.verifier.bluetooth.BleClientTestActivity" />
</activity>
- <activity android:name=".bluetooth.BleServerStartActivity"
+ <!-- TODO: Enable when test quality issues listed in b/18283088 is resolved -->
+ <!-- activity android:name=".bluetooth.BleServerStartActivity"
android:label="@string/ble_server_start_name"
android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
@@ -337,9 +346,12 @@
</intent-filter>
<meta-data android:name="test_category" android:value="@string/bt_le" />
<meta-data android:name="test_parent" android:value="com.android.cts.verifier.bluetooth.BluetoothTestActivity" />
- </activity>
+ <meta-data android:name="test_required_features"
+ android:value="android.hardware.bluetooth_le"/>
+ </activity -->
- <activity android:name=".bluetooth.BleScannerTestActivity"
+ <!-- TODO: Enable when test quality issues listed in b/18282549 is resolved -->
+ <!-- activity android:name=".bluetooth.BleScannerTestActivity"
android:label="@string/ble_scanner_test_name"
android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
@@ -348,7 +360,9 @@
</intent-filter>
<meta-data android:name="test_category" android:value="@string/bt_le" />
<meta-data android:name="test_parent" android:value="com.android.cts.verifier.bluetooth.BluetoothTestActivity" />
- </activity>
+ <meta-data android:name="test_required_features"
+ android:value="android.hardware.bluetooth_le"/>
+ </activity -->
<activity android:name=".bluetooth.BleScannerPowerLevelActivity"
android:label="@string/ble_power_level_name"
@@ -372,7 +386,8 @@
<meta-data android:name="test_parent" android:value="com.android.cts.verifier.bluetooth.BleScannerTestActivity" />
</activity>
- <activity android:name=".bluetooth.BleAdvertiserTestActivity"
+ <!-- TODO: Enable when test quality issues listed in b/18282549 is resolved -->
+ <!-- activity android:name=".bluetooth.BleAdvertiserTestActivity"
android:label="@string/ble_advertiser_test_name"
android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
@@ -381,7 +396,9 @@
</intent-filter>
<meta-data android:name="test_category" android:value="@string/bt_le" />
<meta-data android:name="test_parent" android:value="com.android.cts.verifier.bluetooth.BluetoothTestActivity" />
- </activity>
+ <meta-data android:name="test_required_features"
+ android:value="android.hardware.bluetooth_le"/>
+ </activity -->
<activity android:name=".bluetooth.BleAdvertiserPowerLevelActivity"
android:label="@string/ble_power_level_name"
@@ -424,7 +441,7 @@
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_security" />
<meta-data android:name="test_excluded_features"
- android:value="android.hardware.type.television:android.software.leanback" />
+ android:value="android.hardware.type.television:android.software.leanback:android.hardware.type.watch" />
</activity>
<activity android:name=".streamquality.StreamingVideoActivity"
@@ -435,6 +452,8 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_streaming" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.hardware.type.watch" />
</activity>
<activity android:name=".streamquality.PlayVideoActivity"
@@ -779,8 +798,14 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_sensors" />
- <meta-data android:name="test_required_features"
- android:value="android.hardware.sensor.accelerometer" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.stepcounter" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.stepdetector" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.proximity" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.light" />
</activity>
<!-- TODO: enable when a more reliable way to identify time synchronization is available -->
@@ -804,6 +829,14 @@
<category android:name="android.cts.intent.category.MANUAL_TEST"/>
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_sensors"/>
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.accelerometer" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.compass" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.gyroscope" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.barometer" />
</activity>
<activity android:name=".sensors.SensorBatchingTestsActivity"
@@ -814,8 +847,14 @@
<category android:name="android.cts.intent.category.MANUAL_TEST"/>
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_sensors"/>
- <meta-data android:name="test_excluded_features"
- android:value="android.hardware.type.television:android.software.leanback" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.accelerometer" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.compass" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.gyroscope" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.barometer" />
</activity>
<activity android:name=".sensors.SensorIntegrationTestsActivity"
@@ -826,6 +865,12 @@
<category android:name="android.cts.intent.category.MANUAL_TEST"/>
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_sensors"/>
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.accelerometer" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.compass" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.gyroscope" />
</activity>
<activity android:name=".sensors.SensorTestActivity"
@@ -836,6 +881,18 @@
<category android:name="android.cts.intent.category.MANUAL_TEST"/>
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_sensors"/>
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.accelerometer" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.stepcounter" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.stepdetector" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.heartrate" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.compass" />
+ <meta-data android:name="test_applicable_features"
+ android:value="android.hardware.sensor.ambient_temperature" />
</activity>
<!-- End sensor tests definitions -->
@@ -847,6 +904,10 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_location" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.hardware.type.television" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.software.leanback" />
</activity>
<activity android:name=".location.LocationModeHighAccuracyTestActivity"
android:label="@string/location_mode_high_accuracy_test">
@@ -855,8 +916,12 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_location" />
+ <meta-data android:name="test_required_features"
+ android:value="android.hardware.location.network:android.hardware.location.gps" />
<meta-data android:name="test_excluded_features"
- android:value="android.hardware.type.television:android.software.leanback" />
+ android:value="android.hardware.type.television" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.software.leanback" />
</activity>
<activity android:name=".location.LocationModeBatterySavingTestActivity"
android:label="@string/location_mode_battery_saving_test">
@@ -865,6 +930,11 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_location" />
+ <meta-data android:name="test_required_features" android:value="android.hardware.location.network" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.hardware.type.television" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.software.leanback" />
</activity>
<activity android:name=".location.LocationModeDeviceOnlyTestActivity"
android:label="@string/location_mode_device_only_test">
@@ -873,8 +943,11 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_location" />
+ <meta-data android:name="test_required_features" android:value="android.hardware.location.gps" />
<meta-data android:name="test_excluded_features"
- android:value="android.hardware.type.television:android.software.leanback" />
+ android:value="android.hardware.type.television" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.software.leanback" />
</activity>
<activity android:name=".camera.formats.CameraFormatsActivity"
@@ -976,6 +1049,8 @@
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_hardware" />
<meta-data android:name="test_required_features" android:value="android.hardware.usb.accessory" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.hardware.type.watch" />
</activity>
<!-- Turned off Sensor Power Test in initial L release
<activity android:name=".sensors.SensorPowerTestActivity"
@@ -1036,6 +1111,12 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_notifications" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.hardware.type.watch" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.hardware.type.television" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.software.leanback" />
</activity>
<activity android:name=".security.CANotifyOnBootActivity"
android:label="@string/caboot_test">
@@ -1044,6 +1125,12 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_notifications" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.hardware.type.watch" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.hardware.type.television" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.software.leanback" />
</activity>
<activity android:name=".p2p.GoNegRequesterTestListActivity"
@@ -1091,14 +1178,15 @@
</intent-filter>
</activity-alias>
- <activity android:name=".sample.SampleTestActivity"
+ <!-- remove comment from the next activity to see the sample test surfacing in the app -->
+ <!-- activity android:name=".sample.SampleTestActivity"
android:label="@string/sample_framework_test">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_other" />
- </activity>
+ </activity -->
<activity android:name=".widget.WidgetTestActivity"
android:label="@string/widget_framework_test">
@@ -1107,6 +1195,8 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_other" />
+ <meta-data android:name="test_required_features"
+ android:value="android.software.app_widgets" />
</activity>
<activity android:name=".deskclock.DeskClockTestsActivity"
@@ -1116,6 +1206,10 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_deskclock" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.hardware.type.television" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.software.leanback" />
</activity>
<!-- TODO: enable when not requiring to tap the screen and timeouts are tuned -->
@@ -1147,8 +1241,8 @@
<meta-data
android:name="test_category"
android:value="@string/test_category_sensors" />
- <meta-data android:name="test_excluded_features"
- android:value="android.hardware.type.television:android.software.leanback" />
+ <meta-data android:name="test_required_features"
+ android:value="android.hardware.sensor.accelerometer" />
</activity>
<receiver android:name=".widget.WidgetCtsProvider">
@@ -1203,6 +1297,8 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_projection" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.hardware.type.watch" />
</activity>
<activity android:name=".projection.touch.ProjectionTouchActivity"
@@ -1242,7 +1338,8 @@
</activity>
- <activity android:name=".managedprovisioning.ByodFlowTestActivity"
+ <!-- TODO: enable when the test can be executed without leaving marks -->
+ <!-- activity android:name=".managedprovisioning.ByodFlowTestActivity"
android:launchMode="singleTask"
android:label="@string/provisioning_byod">
<intent-filter>
@@ -1255,7 +1352,7 @@
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_managed_provisioning" />
<meta-data android:name="test_required_features" android:value="android.software.managed_users:android.software.device_admin" />
- </activity>
+ </activity-->
<activity android:name=".managedprovisioning.ByodHelperActivity">
<intent-filter>
@@ -1289,6 +1386,10 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_jobscheduler" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.hardware.type.television" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.software.leanback" />
</activity>
<activity android:name=".jobscheduler.ChargingConstraintTestActivity" android:label="@string/js_charging_test">
@@ -1297,6 +1398,10 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_jobscheduler" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.hardware.type.television" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.software.leanback" />
</activity>
<activity android:name=".jobscheduler.ConnectivityConstraintTestActivity" android:label="@string/js_connectivity_test">
@@ -1305,6 +1410,10 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_jobscheduler" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.hardware.type.television" />
+ <meta-data android:name="test_excluded_features"
+ android:value="android.software.leanback" />
</activity>
<service android:name=".jobscheduler.MockJobService"
diff --git a/apps/CtsVerifier/res/values-television/strings.xml b/apps/CtsVerifier/res/values-television/strings.xml
new file mode 100644
index 0000000..1042fa8
--- /dev/null
+++ b/apps/CtsVerifier/res/values-television/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+<resources>
+ <!-- Don't test these features on televisions. -->
+ <string-array name="disabled_tests">
+ <item>com.android.cts.verifier.notifications.NotificationAttentionManagementVerifierActivity</item>
+ <item>com.android.cts.verifier.notifications.NotificationListenerVerifierActivity</item>
+ </string-array>
+</resources>
\ No newline at end of file
diff --git a/apps/CtsVerifier/res/values-watch/strings.xml b/apps/CtsVerifier/res/values-watch/strings.xml
new file mode 100644
index 0000000..1f25b04
--- /dev/null
+++ b/apps/CtsVerifier/res/values-watch/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+<resources>
+ <!-- Don't test these features on watches. -->
+ <string-array name="disabled_tests">
+ <item>com.android.cts.verifier.notifications.NotificationAttentionManagementVerifierActivity</item>
+ <item>com.android.cts.verifier.notifications.NotificationListenerVerifierActivity</item>
+ </string-array>
+</resources>
\ No newline at end of file
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index fa86474..cb35c3d 100644
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -260,7 +260,7 @@
<string name="ble_scanner_power_level_instruction">Count: Ultra low &lt; low &lt; medium &lt; high\nRssi: Ultra low &lt; low &lt; medium &lt; high\nDistance to see count freezing: Ultra low &lt; low &lt; medium &lt; high\nA common error is ultra low, low and medium behave similarly, with similar rssi, freeze at similar distance.\n\n All power level receive a different mac address. After 15 mins, a green text "Get a new Mac address" will show up.</string>
<string name="ble_scanner_scan_filter_name">BLE Hardware Scan Filter</string>
<string name="ble_scanner_scan_filter_info">Lock the screen of scanner, and connect to monsoon. It will not wake up when advertiser is advertising unscannable, and scanner is scanning with filter.</string>
- <string name="ble_scanner_scan_filter_instruction">For monsoon test:\n\tClick scan with filter, lock the screen, connect to monsoon. It will not wake up when advertiser is advertising unscannable data packets, but will show a peak in power usage when advertiser is advertising scannable data.\nFor logcat test:\n\tClick scan with filter, logcat the scanner. No data will be received by GattService when advertiser is advertising unscannable data.</string>
+ <string name="ble_scanner_scan_filter_instruction">Scan filter is to scan data with service UUID = 0x6666 only. If you scan without scan filter, data with service UUID = 0x5555 and 0x6666 will show up on screen.\nFor monsoon test:\n\tClick scan with filter, lock the screen, connect to monsoon. It will not wake up when advertiser is advertising unscannable data packets, but will show a peak in power usage when advertiser is advertising scannable data.\nFor logcat test:\n\tClick scan with filter, logcat the scanner. No data will be received by GattService when advertiser is advertising unscannable data.</string>
<string name="ble_scan_with_filter">Scan with filter</string>
<string name="ble_scan_without_filter">Scan without filter</string>
@@ -1264,7 +1264,7 @@
<string name="device_owner_provisioning_tests_info">The device owner provisioning tests verify that setting up a corporate owned device can only be done on a factory reset device.</string>
<string name="device_owner_provisioning_category">Device Owner Provisioning</string>
<string name="device_owner_negative_test">Device owner negative test</string>
- <string name="device_owner_negative_test_info">Device owner provisioning should only work on new or factory reset devices. Please click on the "Start provisioning" button and verify that you get a warning dialog telling you that the device is already set up. If that is the case, this test has passed.</string>
+ <string name="device_owner_negative_test_info">Please click the "Start provisioning" button, and when you see a warning dialog telling the device is already set up, select "pass". Otherwise, select "fail".</string>
<string name="start_device_owner_provisioning_button">Start provisioning</string>
<!-- Strings for JobScheduler Tests -->
@@ -1290,4 +1290,8 @@
<string name="js_unmetered_connectivity_test">Device with no connectivity will not execute a job with an unmetered connectivity constraint.</string>
<string name="js_any_connectivity_test">Device with no connectivity will not execute a job with an unmetered connectivity constraint.</string>
<string name="js_no_connectivity_test">Device with no connectivity will still execute a job with no connectivity constraints.</string>
+
+ <!-- A list of fully-qualified test classes that should not be run. -->
+ <string-array name="disabled_tests" />
+
</resources>
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/ManifestTestListAdapter.java b/apps/CtsVerifier/src/com/android/cts/verifier/ManifestTestListAdapter.java
index 2f42e81..0b73642 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/ManifestTestListAdapter.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/ManifestTestListAdapter.java
@@ -22,12 +22,14 @@ import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.util.Log;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -75,6 +77,13 @@ import java.util.Map;
* <meta-data android:name="test_excluded_features" android:value="android.hardware.type.television" />
* </pre>
* </li>
+ * <li>OPTIONAL: Add a meta data attribute to indicate features such that, if any present,
+ * the test is applicable to run. If the device has any of the applicable features then
+ * the test will appear in the test list. Use a colon (:) to specify multiple features
+ * <pre>
+ * <meta-data android:name="test_applicable_features" android:value="android.hardware.sensor.compass" />
+ * </pre>
+ * </li>
*
* </ol>
*/
@@ -88,6 +97,10 @@ public class ManifestTestListAdapter extends TestListAdapter {
private static final String TEST_EXCLUDED_FEATURES_META_DATA = "test_excluded_features";
+ private static final String TEST_APPLICABLE_FEATURES_META_DATA = "test_applicable_features";
+
+ private final HashSet<String> mDisabledTests;
+
private Context mContext;
private String mTestParent;
@@ -96,6 +109,12 @@ public class ManifestTestListAdapter extends TestListAdapter {
super(context);
mContext = context;
mTestParent = testParent;
+
+ String[] disabledTestArray = context.getResources().getStringArray(R.array.disabled_tests);
+ mDisabledTests = new HashSet<>(disabledTestArray.length);
+ for (int i = 0; i < disabledTestArray.length; i++) {
+ mDisabledTests.add(disabledTestArray[i]);
+ }
}
@Override
@@ -158,13 +177,18 @@ public class ManifestTestListAdapter extends TestListAdapter {
int size = list.size();
for (int i = 0; i < size; i++) {
ResolveInfo info = list.get(i);
+ if (info.activityInfo == null || mDisabledTests.contains(info.activityInfo.name)) {
+ Log.w("CtsVerifier", "ignoring disabled test: " + info.activityInfo.name);
+ continue;
+ }
String title = getTitle(mContext, info.activityInfo);
String testName = info.activityInfo.name;
Intent intent = getActivityIntent(info.activityInfo);
String[] requiredFeatures = getRequiredFeatures(info.activityInfo.metaData);
String[] excludedFeatures = getExcludedFeatures(info.activityInfo.metaData);
- TestListItem item = TestListItem.newTest(title, testName, intent,
- requiredFeatures, excludedFeatures);
+ String[] applicableFeatures = getApplicableFeatures(info.activityInfo.metaData);
+ TestListItem item = TestListItem.newTest(title, testName, intent, requiredFeatures,
+ excludedFeatures, applicableFeatures);
String testCategory = getTestCategory(mContext, info.activityInfo.metaData);
addTestToCategory(testsByCategory, testCategory, item);
@@ -215,6 +239,19 @@ public class ManifestTestListAdapter extends TestListAdapter {
}
}
+ static String[] getApplicableFeatures(Bundle metaData) {
+ if (metaData == null) {
+ return null;
+ } else {
+ String value = metaData.getString(TEST_APPLICABLE_FEATURES_META_DATA);
+ if (value == null) {
+ return null;
+ } else {
+ return value.split(":");
+ }
+ }
+ }
+
static String getTitle(Context context, ActivityInfo activityInfo) {
if (activityInfo.labelRes != 0) {
return context.getString(activityInfo.labelRes);
@@ -270,8 +307,11 @@ public class ManifestTestListAdapter extends TestListAdapter {
for (TestListItem test : tests) {
String[] excludedFeatures = test.excludedFeatures;
String[] requiredFeatures = test.requiredFeatures;
+ String[] applicableFeatures = test.applicableFeatures;
if (!hasAnyFeature(excludedFeatures) && hasAllFeatures(requiredFeatures)) {
- filteredTests.add(test);
+ if (hasAnyFeature(applicableFeatures) || hasAllFeatures(applicableFeatures)) {
+ filteredTests.add(test);
+ }
}
}
return filteredTests;
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/TestListAdapter.java b/apps/CtsVerifier/src/com/android/cts/verifier/TestListAdapter.java
index 0d9985c..afe3a73 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/TestListAdapter.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/TestListAdapter.java
@@ -86,26 +86,43 @@ public abstract class TestListAdapter extends BaseAdapter {
/** Features such that, if any present, the test gets excluded from being shown. */
final String[] excludedFeatures;
+ /** If any of of the features are present the test is meaningful to run. */
+ final String[] applicableFeatures;
+
+ public static TestListItem newTest(Context context, int titleResId, String testName,
+ Intent intent, String[] requiredFeatures, String[] excludedFeatures,
+ String[] applicableFeatures) {
+ return newTest(context.getString(titleResId), testName, intent, requiredFeatures,
+ excludedFeatures, applicableFeatures);
+ }
+
public static TestListItem newTest(Context context, int titleResId, String testName,
Intent intent, String[] requiredFeatures, String[] excludedFeatures) {
- return newTest(context.getString(titleResId), testName, intent,
- requiredFeatures, excludedFeatures);
+ return newTest(context.getString(titleResId), testName, intent, requiredFeatures,
+ excludedFeatures, null);
}
public static TestListItem newTest(Context context, int titleResId, String testName,
Intent intent, String[] requiredFeatures) {
- return newTest(context.getString(titleResId), testName, intent,
- requiredFeatures, null);
+ return newTest(context.getString(titleResId), testName, intent, requiredFeatures, null,
+ null);
+ }
+
+ public static TestListItem newTest(String title, String testName, Intent intent,
+ String[] requiredFeatures, String[] excludedFeatures, String[] applicableFeatures) {
+ return new TestListItem(title, testName, intent, requiredFeatures, excludedFeatures,
+ applicableFeatures);
}
public static TestListItem newTest(String title, String testName, Intent intent,
String[] requiredFeatures, String[] excludedFeatures) {
- return new TestListItem(title, testName, intent, requiredFeatures, excludedFeatures);
+ return new TestListItem(title, testName, intent, requiredFeatures, excludedFeatures,
+ null);
}
public static TestListItem newTest(String title, String testName, Intent intent,
String[] requiredFeatures) {
- return new TestListItem(title, testName, intent, requiredFeatures, null);
+ return new TestListItem(title, testName, intent, requiredFeatures, null, null);
}
public static TestListItem newCategory(Context context, int titleResId) {
@@ -113,16 +130,17 @@ public abstract class TestListAdapter extends BaseAdapter {
}
public static TestListItem newCategory(String title) {
- return new TestListItem(title, null, null, null, null);
+ return new TestListItem(title, null, null, null, null, null);
}
private TestListItem(String title, String testName, Intent intent,
- String[] requiredFeatures, String[] excludedFeatures) {
+ String[] requiredFeatures, String[] excludedFeatures, String[] applicableFeatures) {
this.title = title;
this.testName = testName;
this.intent = intent;
this.requiredFeatures = requiredFeatures;
this.excludedFeatures = excludedFeatures;
+ this.applicableFeatures = applicableFeatures;
}
boolean isTest() {
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleAdvertiserHardwareScanFilterActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleAdvertiserHardwareScanFilterActivity.java
index 242bb08..be2fef9 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleAdvertiserHardwareScanFilterActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleAdvertiserHardwareScanFilterActivity.java
@@ -83,6 +83,7 @@ public class BleAdvertiserHardwareScanFilterActivity extends PassFailButtons.Act
public void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
+ filter.addAction(BleAdvertiserService.BLE_ADV_NOT_SUPPORT);
filter.addAction(BleAdvertiserService.BLE_START_SCANNABLE);
filter.addAction(BleAdvertiserService.BLE_START_UNSCANNABLE);
filter.addAction(BleAdvertiserService.BLE_STOP_SCANNABLE);
@@ -106,6 +107,10 @@ public class BleAdvertiserHardwareScanFilterActivity extends PassFailButtons.Act
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
+ private void pass() {
+ this.setTestResultAndFinish(true);
+ }
+
private void stopAdvertising() {
Intent intent = new Intent(BleAdvertiserHardwareScanFilterActivity.this,
BleAdvertiserService.class);
@@ -130,6 +135,9 @@ public class BleAdvertiserHardwareScanFilterActivity extends PassFailButtons.Act
case BleAdvertiserService.BLE_STOP_UNSCANNABLE:
showMessage("Stop advertising");
break;
+ case BleAdvertiserService.BLE_ADV_NOT_SUPPORT:
+ pass();
+ break;
}
}
};
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleAdvertiserPowerLevelActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleAdvertiserPowerLevelActivity.java
index 3568002..1cc9206 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleAdvertiserPowerLevelActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleAdvertiserPowerLevelActivity.java
@@ -67,6 +67,7 @@ public class BleAdvertiserPowerLevelActivity extends PassFailButtons.Activity {
IntentFilter filter = new IntentFilter();
filter.addAction(BleAdvertiserService.BLE_START_POWER_LEVEL);
filter.addAction(BleAdvertiserService.BLE_STOP_POWER_LEVEL);
+ filter.addAction(BleAdvertiserService.BLE_ADV_NOT_SUPPORT);
registerReceiver(onBroadcast, filter);
}
@@ -94,6 +95,10 @@ public class BleAdvertiserPowerLevelActivity extends PassFailButtons.Activity {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
+ private void pass() {
+ this.setTestResultAndFinish(true);
+ }
+
private BroadcastReceiver onBroadcast = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -104,6 +109,9 @@ public class BleAdvertiserPowerLevelActivity extends PassFailButtons.Activity {
case BleAdvertiserService.BLE_STOP_POWER_LEVEL:
showMessage("Stop advertising");
break;
+ case BleAdvertiserService.BLE_ADV_NOT_SUPPORT:
+ pass();
+ break;
}
}
};
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleAdvertiserService.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleAdvertiserService.java
index 7b4235b..281b2e8 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleAdvertiserService.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleAdvertiserService.java
@@ -53,6 +53,8 @@ public class BleAdvertiserService extends Service {
public static final int COMMAND_START_UNSCANNABLE = 6;
public static final int COMMAND_STOP_UNSCANNABLE = 7;
+ public static final String BLE_ADV_NOT_SUPPORT =
+ "com.android.cts.verifier.bluetooth.BLE_ADV_NOT_SUPPORT";
public static final String BLE_START_ADVERTISE =
"com.android.cts.verifier.bluetooth.BLE_START_ADVERTISE";
public static final String BLE_STOP_ADVERTISE =
@@ -147,11 +149,15 @@ public class BleAdvertiserService extends Service {
public void onDestroy() {
super.onDestroy();
if (mAdvertiser != null) {
- mAdvertiser.stopAdvertising(mCallback);
+ stopAdvertiser();
}
}
private void stopAdvertiser() {
+ if (mAdvertiser == null) {
+ mAdvertiserStatus = 0;
+ return;
+ }
if ((mAdvertiserStatus & (1 << COMMAND_START_ADVERTISE)) > 0) {
mAdvertiser.stopAdvertising(mCallback);
}
@@ -186,8 +192,12 @@ public class BleAdvertiserService extends Service {
}
private void handleIntent(Intent intent) {
- if (mAdvertiser == null) {
- showMessage("Multi advertising not supported on this device");
+ if (mBluetoothAdapter != null && !mBluetoothAdapter.isMultipleAdvertisementSupported()) {
+ showMessage("Multiple advertisement is not supported.");
+ sendBroadcast(new Intent(BLE_ADV_NOT_SUPPORT));
+ return;
+ } else if (mAdvertiser == null) {
+ showMessage("Cannot start advertising on this device.");
return;
}
int command = intent.getIntExtra(EXTRA_COMMAND, -1);
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleClientConnectActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleClientConnectActivity.java
old mode 100644
new mode 100755
index a3a9830..fb351b1
--- a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleClientConnectActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleClientConnectActivity.java
@@ -63,19 +63,15 @@ public class BleClientConnectActivity extends PassFailButtons.Activity {
}
}
});
- }
- @Override
- public void onResume() {
- super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction(BleClientService.BLE_BLUETOOTH_CONNECTED);
registerReceiver(onBroadcast, filter);
}
@Override
- public void onPause() {
- super.onPause();
+ protected void onDestroy(){
+ super.onDestroy();
unregisterReceiver(onBroadcast);
}
@@ -90,4 +86,4 @@ public class BleClientConnectActivity extends PassFailButtons.Activity {
getPassButton().setEnabled(true);
}
};
-}
\ No newline at end of file
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/camera/fov/PhotoCaptureActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/camera/fov/PhotoCaptureActivity.java
index eea1b76..e5af6ba 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/camera/fov/PhotoCaptureActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/camera/fov/PhotoCaptureActivity.java
@@ -77,6 +77,8 @@ public class PhotoCaptureActivity extends Activity
private int mResolutionSpinnerIndex = -1;
private WakeLock mWakeLock;
private long shutterStartTime;
+ private int mPreviewOrientation;
+ private int mJpegOrientation;
private ArrayList<Integer> mPreviewSizeCamerasToProcess = new ArrayList<Integer>();
@@ -410,6 +412,8 @@ public class PhotoCaptureActivity extends Activity
Toast.makeText(this, t.getMessage(), Toast.LENGTH_LONG).show();
return;
}
+
+ calculateOrientations(this, mSelectedResolution.cameraId, mCamera);
Camera.Parameters params = setCameraParams(mCamera);
// Either use chosen preview size for current camera or automatically
@@ -429,7 +433,7 @@ public class PhotoCaptureActivity extends Activity
private void startPreview() {
if (mCameraInitialized && mCamera != null) {
- setCameraDisplayOrientation(this, mSelectedResolution.cameraId, mCamera);
+ mCamera.setDisplayOrientation(mPreviewOrientation);
mCamera.startPreview();
mPreviewActive = true;
}
@@ -479,6 +483,7 @@ public class PhotoCaptureActivity extends Activity
Camera.Parameters params = camera.getParameters();
params.setJpegThumbnailSize(0, 0);
params.setJpegQuality(100);
+ params.setRotation(mJpegOrientation);
params.setFocusMode(getFocusMode(camera));
params.setZoom(0);
params.setPictureSize(mSelectedResolution.width, mSelectedResolution.height);
@@ -506,7 +511,7 @@ public class PhotoCaptureActivity extends Activity
return result;
}
- public static void setCameraDisplayOrientation(Activity activity,
+ private void calculateOrientations(Activity activity,
int cameraId, android.hardware.Camera camera) {
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
@@ -521,13 +526,12 @@ public class PhotoCaptureActivity extends Activity
case Surface.ROTATION_270: degrees = 270; break;
}
- int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
- result = (info.orientation + degrees) % 360;
- result = (360 - result) % 360; // compensate the mirror
+ mJpegOrientation = (info.orientation + degrees) % 360;
+ mPreviewOrientation = (360 - mJpegOrientation) % 360; // compensate the mirror
} else { // back-facing
- result = (info.orientation - degrees + 360) % 360;
+ mJpegOrientation = (info.orientation - degrees + 360) % 360;
+ mPreviewOrientation = mJpegOrientation;
}
- camera.setDisplayOrientation(result);
}
}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/camera/video/CameraVideoActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/camera/video/CameraVideoActivity.java
index 97c0521..0a0e830 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/camera/video/CameraVideoActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/camera/video/CameraVideoActivity.java
@@ -70,6 +70,7 @@ public class CameraVideoActivity extends PassFailButtons.Activity
private int mPreviewTexWidth;
private int mPreviewTexHeight;
private int mPreviewRotation;
+ private int mVideoRotation;
private VideoView mPlaybackView;
@@ -162,7 +163,10 @@ public class CameraVideoActivity extends PassFailButtons.Activity
// Step 5: set preview output
// This is not necessary since preview has been taken care of
- // Step 6: prepare configured MediaRecorder
+ // Step 6: set orientation hint
+ mMediaRecorder.setOrientationHint(mVideoRotation);
+
+ // Step 7: prepare configured MediaRecorder
try {
mMediaRecorder.prepare();
} catch (IOException e) {
@@ -644,10 +648,11 @@ public class CameraVideoActivity extends PassFailButtons.Activity
}
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
- mPreviewRotation = (info.orientation + degrees) % 360;
- mPreviewRotation = (360 - mPreviewRotation) % 360; // compensate the mirror
+ mVideoRotation = (info.orientation + degrees) % 360;
+ mPreviewRotation = (360 - mVideoRotation) % 360; // compensate the mirror
} else { // back-facing
- mPreviewRotation = (info.orientation - degrees + 360) % 360;
+ mVideoRotation = (info.orientation - degrees + 360) % 360;
+ mPreviewRotation = mVideoRotation;
}
if (mPreviewRotation != 0 && mPreviewRotation != 180) {
Log.w(TAG,
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/features/FeatureSummaryActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/features/FeatureSummaryActivity.java
index 032442b..74a5317 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/features/FeatureSummaryActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/features/FeatureSummaryActivity.java
@@ -169,6 +169,10 @@ public class FeatureSummaryActivity extends PassFailButtons.ListActivity {
};
public static final Feature[] ALL_JELLY_BEAN_FEATURES = {
+ // Required features in prior releases that became optional
+ new Feature(PackageManager.FEATURE_FAKETOUCH, false),
+
+ //new feature in JB
new Feature(PackageManager.FEATURE_TELEVISION, false),
};
@@ -190,13 +194,37 @@ public class FeatureSummaryActivity extends PassFailButtons.ListActivity {
public static final Feature[] ALL_KITKAT_WATCH_FEATURES = {
new Feature(PackageManager.FEATURE_SENSOR_HEART_RATE, false),
+ new Feature(PackageManager.FEATURE_BACKUP, false),
+ new Feature(PackageManager.FEATURE_PRINTING, false),
+ new Feature(PackageManager.FEATURE_WATCH, false),
+ new Feature(PackageManager.FEATURE_WEBVIEW, false),
+ new Feature(PackageManager.FEATURE_CAMERA_EXTERNAL, false),
};
- public static final Feature[] ALL_LMP_FEATURES = {
+ public static final Feature[] ALL_LOLLIPOP_FEATURES = {
+ // New features in L
+ new Feature(PackageManager.FEATURE_AUDIO_OUTPUT, false),
+ new Feature(PackageManager.FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING, false),
+ new Feature(PackageManager.FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR, false),
+ new Feature(PackageManager.FEATURE_CAMERA_CAPABILITY_RAW, false),
+ new Feature(PackageManager.FEATURE_CAMERA_LEVEL_FULL, false),
+ new Feature(PackageManager.FEATURE_CONNECTION_SERVICE, false),
+ new Feature(PackageManager.FEATURE_GAMEPAD, false),
+ new Feature(PackageManager.FEATURE_LEANBACK, false),
+ new Feature(PackageManager.FEATURE_LIVE_TV, false),
+ new Feature(PackageManager.FEATURE_MANAGED_USERS, false),
+ new Feature(PackageManager.FEATURE_OPENGLES_EXTENSION_PACK, false),
+ new Feature(PackageManager.FEATURE_SECURELY_REMOVES_USERS, false),
+ new Feature(PackageManager.FEATURE_SENSOR_AMBIENT_TEMPERATURE, false),
new Feature(PackageManager.FEATURE_SENSOR_HEART_RATE_ECG, false),
+ new Feature(PackageManager.FEATURE_SENSOR_RELATIVE_HUMIDITY, false),
+ new Feature(PackageManager.FEATURE_VERIFIED_BOOT, false),
+
+ // New hidden features in L
new Feature("android.hardware.ethernet", false),
- new Feature("android.software.backup", false),
- new Feature("android.software.print", false),
+ new Feature("android.hardware.hdmi.cec", false),
+ new Feature("android.software.leanback_only", false),
+ new Feature("android.software.voice_recognizers", false),
};
@Override
@@ -230,7 +258,7 @@ public class FeatureSummaryActivity extends PassFailButtons.ListActivity {
// add features from latest to last so that the latest requirements are put in the set first
int apiVersion = Build.VERSION.SDK_INT;
if (apiVersion >= Build.VERSION_CODES.LOLLIPOP) {
- Collections.addAll(features, ALL_LMP_FEATURES);
+ Collections.addAll(features, ALL_LOLLIPOP_FEATURES);
}
if (apiVersion >= Build.VERSION_CODES.KITKAT_WATCH) {
Collections.addAll(features, ALL_KITKAT_WATCH_FEATURES);
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/notifications/NotificationAttentionManagementVerifierActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/notifications/NotificationAttentionManagementVerifierActivity.java
index e355b07..b4e348f 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/notifications/NotificationAttentionManagementVerifierActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/notifications/NotificationAttentionManagementVerifierActivity.java
@@ -82,6 +82,7 @@ public class NotificationAttentionManagementVerifierActivity
createAutoItem(R.string.nls_service_started);
createAutoItem(R.string.attention_create_contacts);
createRetryItem(R.string.attention_filter_none);
+ createAutoItem(R.string.attention_all_are_filtered);
createRetryItem(R.string.attention_filter_all);
createAutoItem(R.string.attention_none_are_filtered);
createAutoItem(R.string.attention_default_order);
@@ -114,42 +115,45 @@ public class NotificationAttentionManagementVerifierActivity
testModeNone(mState);
break;
case 4:
- testModeAll(mState);
+ testNoneInterceptsAll(mState);
break;
case 5:
- testALLInterceptsNothing(mState);
+ testModeAll(mState);
break;
case 6:
- testDefaultOrder(mState);
+ testAllInterceptsNothing(mState);
break;
case 7:
- testInterruptionOrder(mState);
+ testDefaultOrder(mState);
break;
case 8:
- testPrioritytOrder(mState);
+ testInterruptionOrder(mState);
break;
case 9:
- testAmbientBits(mState);
+ testPrioritytOrder(mState);
break;
case 10:
- testLookupUriOrder(mState);
+ testAmbientBits(mState);
break;
case 11:
- testEmailOrder(mState);
+ testLookupUriOrder(mState);
break;
case 12:
- testPhoneOrder(mState);
+ testEmailOrder(mState);
break;
case 13:
- testModePriority(mState);
+ testPhoneOrder(mState);
break;
case 14:
- testPriorityInterceptsSome(mState);
+ testModePriority(mState);
break;
case 15:
- testDeleteContacts(mState);
+ testPriorityInterceptsSome(mState);
break;
case 16:
+ testDeleteContacts(mState);
+ break;
+ case 17:
getPassButton().setEnabled(true);
mNm.cancelAll();
break;
@@ -678,7 +682,7 @@ public class NotificationAttentionManagementVerifierActivity
}
// Nothing should be filtered when mode is ALL
- private void testALLInterceptsNothing(final int i) {
+ private void testAllInterceptsNothing(final int i) {
if (mStatus[i] == SETUP) {
mNm.cancelAll();
MockListener.resetListenerData(this);
@@ -783,6 +787,59 @@ public class NotificationAttentionManagementVerifierActivity
}
}
+ // Nothing should get through when mode is None.
+ private void testNoneInterceptsAll(final int i) {
+ if (mStatus[i] == SETUP) {
+ mNm.cancelAll();
+ MockListener.resetListenerData(this);
+ mStatus[i] = CLEARED;
+ // wait for intent to move through the system
+ delay();
+ } else if (mStatus[i] == CLEARED) {
+ sendNotifications(MODE_URI, false, false);
+ mStatus[i] = READY;
+ // wait for notifications to move through the system
+ delay();
+ } else {
+ MockListener.probeListenerPayloads(mContext,
+ new MockListener.StringListResultCatcher() {
+ @Override
+ public void accept(List<String> result) {
+ boolean pass = false;
+ Set<String> found = new HashSet<String>();
+ if (result != null && result.size() > 0) {
+ pass = true;
+ for (String payloadData : result) {
+ try {
+ JSONObject payload = new JSONObject(payloadData);
+ String tag = payload.getString(JSON_TAG);
+ if (found.contains(tag)) {
+ // multiple entries for same notification!
+ pass = false;
+ } else if (ALICE.equals(tag)) {
+ found.add(ALICE);
+ pass &= !payload.getBoolean(JSON_MATCHES_ZEN_FILTER);
+ } else if (BOB.equals(tag)) {
+ found.add(BOB);
+ pass &= !payload.getBoolean(JSON_MATCHES_ZEN_FILTER);
+ } else if (CHARLIE.equals(tag)) {
+ found.add(CHARLIE);
+ pass &= !payload.getBoolean(JSON_MATCHES_ZEN_FILTER);
+ }
+ } catch (JSONException e) {
+ pass = false;
+ Log.e(TAG, "failed to unpack data from mocklistener", e);
+ }
+ }
+ }
+ pass &= found.size() == 3;
+ mStatus[i] = pass ? PASS : FAIL;
+ next();
+ }
+ });
+ }
+ }
+
/** Search a list of notification keys for a givcen tag. */
private int findTagInKeys(String tag, List<String> orderedKeys) {
for (int i = 0; i < orderedKeys.size(); i++) {
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/projection/list/ListPresentation.java b/apps/CtsVerifier/src/com/android/cts/verifier/projection/list/ListPresentation.java
index dad4945..5dddf5c 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/projection/list/ListPresentation.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/projection/list/ListPresentation.java
@@ -50,7 +50,7 @@ public class ListPresentation extends ProjectedPresentation {
setContentView(view);
for (int i = 0; i < NUM_ITEMS; ++i) {
- mItemList.add("Item #" + i);
+ mItemList.add("Item #" + 1 + i);
}
ListView listView = (ListView) view.findViewById(R.id.pla_list);
diff --git a/libs/commonutil/src/com/android/cts/util/AbiUtils.java b/libs/commonutil/src/com/android/cts/util/AbiUtils.java
index 6f47d52..42336f3 100644
--- a/libs/commonutil/src/com/android/cts/util/AbiUtils.java
+++ b/libs/commonutil/src/com/android/cts/util/AbiUtils.java
@@ -157,6 +157,22 @@ public class AbiUtils {
}
/**
+ * @return the test name portion of the test id.
+ * e.g. armeabi-v7a android.mytest = android.mytest
+ */
+ public static String parseTestName(String id) {
+ return parseId(id)[1];
+ }
+
+ /**
+ * @return the abi portion of the test id.
+ * e.g. armeabi-v7a android.mytest = armeabi-v7a
+ */
+ public static String parseAbi(String id) {
+ return parseId(id)[0];
+ }
+
+ /**
* @param name The name of the ABI.
* @return The bitness of the ABI with the given name
*/
diff --git a/tests/expectations/knownfailures.txt b/tests/expectations/knownfailures.txt
index ff3f921..dd8660f 100644
--- a/tests/expectations/knownfailures.txt
+++ b/tests/expectations/knownfailures.txt
@@ -1,5 +1,19 @@
[
{
+ description: "the UsageStats is not yet stable enough",
+ names: [
+ "android.app.usage.cts.UsageStatsTest"
+ ],
+ bug: 17536113
+},
+{
+ description: "the ConnectivityConstraintTest are not yet stable",
+ names: [
+ "android.jobscheduler.cts.ConnectivityConstraintTest"
+ ],
+ bug: 18117279
+},
+{
description: "tests a fragile by nature as they rely on hardcoded behavior",
names: [
"android.accessibilityservice.cts.AccessibilityTextTraversalTest#testActionNextAndPreviousAtGranularityPageOverText",
diff --git a/tests/expectations/unsupportedabis.txt b/tests/expectations/unsupportedabis.txt
index 817179b..7ad3682 100644
--- a/tests/expectations/unsupportedabis.txt
+++ b/tests/expectations/unsupportedabis.txt
@@ -9,11 +9,7 @@
"android.renderscriptlegacy.cts.LeakTest",
"android.renderscriptlegacy.cts.RSBase",
"android.renderscriptlegacy.cts.RSBaseCompute",
- "android.renderscriptlegacy.cts.VersionTest",
- "android.sample.cts.SampleDeviceResultTest",
- "android.sample.cts.SampleDeviceTest",
- "android.sample.cts.SampleHostResultTest",
- "android.sample.cts.SampleHostTest"
+ "android.renderscriptlegacy.cts.VersionTest"
]
}
]
diff --git a/tests/tests/hardware/src/android/hardware/camera2/cts/helpers/StaticMetadata.java b/tests/tests/hardware/src/android/hardware/camera2/cts/helpers/StaticMetadata.java
index fb2001f..a5c7083 100644
--- a/tests/tests/hardware/src/android/hardware/camera2/cts/helpers/StaticMetadata.java
+++ b/tests/tests/hardware/src/android/hardware/camera2/cts/helpers/StaticMetadata.java
@@ -57,7 +57,7 @@ public class StaticMetadata {
private static final long SENSOR_INFO_EXPOSURE_TIME_RANGE_MIN_AT_MOST = 100000L; // 100us
private static final long SENSOR_INFO_EXPOSURE_TIME_RANGE_MAX_AT_LEAST = 100000000; // 100ms
private static final int SENSOR_INFO_SENSITIVITY_RANGE_MIN_AT_MOST = 100;
- private static final int SENSOR_INFO_SENSITIVITY_RANGE_MAX_AT_LEAST = 1600;
+ private static final int SENSOR_INFO_SENSITIVITY_RANGE_MAX_AT_LEAST = 800;
private static final int STATISTICS_INFO_MAX_FACE_COUNT_MIN_AT_LEAST = 4;
private static final int TONEMAP_MAX_CURVE_POINTS_AT_LEAST = 64;
private static final int CONTROL_AE_COMPENSATION_RANGE_DEFAULT_MIN = -2;
diff --git a/tests/tests/rscpp/src/android/cts/rscpp/RSCppTest.java b/tests/tests/rscpp/src/android/cts/rscpp/RSCppTest.java
index 6cbb9bc..9b09cc7 100644
--- a/tests/tests/rscpp/src/android/cts/rscpp/RSCppTest.java
+++ b/tests/tests/rscpp/src/android/cts/rscpp/RSCppTest.java
@@ -91,6 +91,7 @@ public class RSCppTest extends AndroidTestCase {
mRS = RenderScript.create(mCtx);
mRS.setMessageHandler(mRsMessage);
mVerify = new ScriptC_verify(mRS);
+ mVerify.set_gAllowedIntError(3);
}
@Override
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java b/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java
index 27f9135..e0cfee1 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java
@@ -31,7 +31,7 @@ public class CtsBuildProvider implements IBuildProvider {
@Option(name="cts-install-path", description="the path to the cts installation to use")
private String mCtsRootDirPath = System.getProperty("CTS_ROOT");
- public static final String CTS_BUILD_VERSION = "5.0_r0.5";
+ public static final String CTS_BUILD_VERSION = "5.0_r1";
/**
* {@inheritDoc}
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/command/CtsConsole.java b/tools/tradefed-host/src/com/android/cts/tradefed/command/CtsConsole.java
index 7333de2..ca4e050 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/command/CtsConsole.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/command/CtsConsole.java
@@ -80,7 +80,7 @@ public class CtsConsole extends Console {
public void run() {
CtsBuildHelper ctsBuild = getCtsBuild();
if (ctsBuild != null) {
- listPackages(ctsBuild, AbiUtils.getAbisSupportedByCts());
+ listPackages(ctsBuild);
}
}
}, LIST_PATTERN, "packages");
@@ -193,8 +193,8 @@ public class CtsConsole extends Console {
}
}
- private void listPackages(CtsBuildHelper ctsBuild, Set<String> abis) {
- ITestPackageRepo testCaseRepo = new TestPackageRepo(ctsBuild.getTestCasesDir(), abis, false);
+ private void listPackages(CtsBuildHelper ctsBuild) {
+ ITestPackageRepo testCaseRepo = new TestPackageRepo(ctsBuild.getTestCasesDir(), false);
for (String packageName : testCaseRepo.getPackageNames()) {
printLine(packageName);
}
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/result/PlanCreator.java b/tools/tradefed-host/src/com/android/cts/tradefed/result/PlanCreator.java
index 713e8fa..3881c0e 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/result/PlanCreator.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/result/PlanCreator.java
@@ -116,8 +116,8 @@ public class PlanCreator {
public ITestPlan createDerivedPlan(CtsBuildHelper build, Set<String> abis)
throws ConfigurationException {
checkFields(build);
- ITestPackageRepo pkgDefRepo = new TestPackageRepo(build.getTestCasesDir(),
- abis, mIncludeKnownFailures);
+ ITestPackageRepo pkgDefRepo =
+ new TestPackageRepo(build.getTestCasesDir(), mIncludeKnownFailures);
ITestPlan derivedPlan = new TestPlan(mPlanName, abis);
for (TestPackageResult pkg : mResult.getPackages()) {
Collection<TestIdentifier> filteredTests = pkg.getTestsWithStatus(mResultFilter);
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/CtsTest.java b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/CtsTest.java
index a16e1c4..ce48664 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/CtsTest.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/CtsTest.java
@@ -57,13 +57,13 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import java.util.Queue;
import java.util.Set;
@@ -87,8 +87,6 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
public static final String PACKAGE_ABI_METRIC = "packageAbi";
public static final String PACKAGE_DIGEST_METRIC = "packageDigest";
- private ITestDevice mDevice;
-
@Option(name = PLAN_OPTION, description = "the test plan to run.",
importance = Importance.IF_UNSET)
private String mPlanName = null;
@@ -182,19 +180,34 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
"Collect dEQP logs from the device.")
private boolean mCollectDeqpLogs = false;
- private long mPrevRebootTime; // last reboot time
+ @Option(name = "min-pre-reboot-package-count", description =
+ "The minimum number of packages to require a pre test reboot")
+
+ private int mMinPreRebootPackageCount = 2;
+ private final int mShardAssignment;
+ private final int mTotalShards;
+ private ITestDevice mDevice = null;
+ private CtsBuildHelper mCtsBuild = null;
+ private IBuildInfo mBuildInfo = null;
+ // last reboot time
+ private long mPrevRebootTime;
+ // The list of packages to run. populated in {@code setupTestPackageList}
+ // This is a member variable so that run can be called more than once
+ // and the test run is resumed.
+ private List<TestPackage> mTestPackageList = new ArrayList<>();
+ // The index in the pacakge list of the last test to complete
+ private int mLastTestPackageIndex = 0;
/** data structure for a {@link IRemoteTest} and its known tests */
- class TestPackage {
+ static class TestPackage {
private final IRemoteTest mTestForPackage;
private final ITestPackageDef mPackageDef;
private final Collection<TestIdentifier> mKnownTests;
- TestPackage(ITestPackageDef packageDef, IRemoteTest testForPackage,
- Collection<TestIdentifier> knownTests) {
+ TestPackage(ITestPackageDef packageDef, IRemoteTest testForPackage) {
mPackageDef = packageDef;
mTestForPackage = testForPackage;
- mKnownTests = knownTests;
+ mKnownTests = packageDef.getTests();
}
IRemoteTest getTestForPackage() {
@@ -301,11 +314,28 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
}
}
- /** list of remaining tests to execute */
- private List<TestPackage> mRemainingTestPkgs = null;
+ /**
+ * Create a new {@link CtsTest} that will run the default list of {@link TestPackage}s.
+ */
+ public CtsTest() {
+ this(0 /*shardAssignment*/, 1 /*totalShards*/);
+ }
- private CtsBuildHelper mCtsBuild = null;
- private IBuildInfo mBuildInfo = null;
+ /**
+ * Create a new {@link CtsTest} that will run the given {@link List} of {@link TestPackage}s.
+ */
+ public CtsTest(int shardAssignment, int totalShards) {
+ if (shardAssignment < 0) {
+ throw new IllegalArgumentException(
+ "shardAssignment cannot be negative. found:" + shardAssignment);
+ }
+ if (totalShards < 1) {
+ throw new IllegalArgumentException(
+ "shardAssignment must be at least 1. found:" + totalShards);
+ }
+ this.mShardAssignment = shardAssignment;
+ this.mTotalShards = totalShards;
+ }
/**
* {@inheritDoc}
@@ -416,8 +446,6 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
* Set the CTS build container.
* <p/>
* Exposed so unit tests can mock the provided build.
- *
- * @param buildHelper
*/
void setBuildHelper(CtsBuildHelper buildHelper) {
mCtsBuild = buildHelper;
@@ -432,57 +460,62 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
throw new IllegalArgumentException("missing device");
}
- if (mRemainingTestPkgs == null) {
- checkFields();
- mRemainingTestPkgs = buildTestsToRun();
+ Set<String> abiSet = getAbis();
+ if (abiSet == null || abiSet.isEmpty()) {
+ throw new IllegalArgumentException("could not get device's ABIs");
}
+ Log.logAndDisplay(LogLevel.INFO, LOG_TAG, "ABIs: " + abiSet);
+
+ checkFields();
+ setupTestPackageList(abiSet);
if (mBugreport) {
- FailedTestBugreportGenerator bugListener = new FailedTestBugreportGenerator(listener,
- getDevice());
- listener = bugListener;
+ listener = new FailedTestBugreportGenerator(listener, getDevice());
}
if (mScreenshotOnFailures) {
- FailedTestScreenshotGenerator screenListener = new FailedTestScreenshotGenerator(
- listener, getDevice());
- listener = screenListener;
+ listener = new FailedTestScreenshotGenerator(listener, getDevice());
}
if (mLogcatOnFailures) {
- FailedTestLogcatGenerator logcatListener = new FailedTestLogcatGenerator(
- listener, getDevice(), mMaxLogcatBytes);
- listener = logcatListener;
+ listener = new FailedTestLogcatGenerator(listener, getDevice(), mMaxLogcatBytes);
}
- // Only run test packages on ABIs which this device supports.
- Set<String> abis = getAbis();
- if (abis == null || abis.isEmpty()) {
- throw new IllegalArgumentException("could not get device's ABIs");
+ // Setup the a map of Test id to ResultFilter
+ Map<String, ResultFilter> filterMap = new HashMap<>();
+ int totalTestCount = 0;
+ for (TestPackage testPackage : mTestPackageList) {
+ ResultFilter resultFilter = new ResultFilter(listener, testPackage);
+ totalTestCount += resultFilter.getKnownTestCount();
+ filterMap.put(testPackage.getPackageDef().getId(), resultFilter);
}
- List<TestPackage> packages = filterTestPackagesByAbi(mRemainingTestPkgs, abis);
// collect and install the prerequisiteApks first, to save time when multiple test
- // packages are using the same prerequisite apk (I'm looking at you, CtsTestStubs!)
- Collection<String> prerequisiteApks = getPrerequisiteApks(packages);
- Collection<String> uninstallPackages = getPrerequisitePackageNames(packages);
- List<ResultFilter> filters = new ArrayList<ResultFilter>(packages.size());
+ // packages are using the same prerequisite apk
+ Map<String, Set<String>> prerequisiteApks = getPrerequisiteApks(mTestPackageList, abiSet);
+ Collection<String> uninstallPackages = getPrerequisitePackageNames(mTestPackageList);
try {
- installPrerequisiteApks(prerequisiteApks);
-
// always collect the device info, even for resumed runs, since test will likely be
// running on a different device
collectDeviceInfo(getDevice(), mCtsBuild, listener);
- if (packages.size() > 1 && !mDisableReboot) {
- Log.i(LOG_TAG, "Initial reboot for multiple packages");
- rebootDevice();
- }
- mPrevRebootTime = System.currentTimeMillis();
+ preRebootIfNecessary(mTestPackageList);
- while (!packages.isEmpty()) {
- TestPackage knownTests = packages.get(0);
- ResultFilter filter = new ResultFilter(listener, knownTests);
- filters.add(filter);
+ mPrevRebootTime = System.currentTimeMillis();
+ int remainingPackageCount = mTestPackageList.size();
+ Log.logAndDisplay(LogLevel.INFO, LOG_TAG,
+ String.format("Start test run of %,d packages, containing %,d tests",
+ remainingPackageCount, totalTestCount));
+ IAbi currentAbi = null;
+
+ for (int i = mLastTestPackageIndex; i < mTestPackageList.size(); i++) {
+ TestPackage testPackage = mTestPackageList.get(i);
+
+ if (currentAbi == null ||
+ !currentAbi.getName().equals(testPackage.getAbi().getName())) {
+ currentAbi = testPackage.getAbi();
+ installPrerequisiteApks(
+ prerequisiteApks.get(currentAbi.getName()), currentAbi);
+ }
- IRemoteTest test = knownTests.getTestForPackage();
+ IRemoteTest test = testPackage.getTestForPackage();
if (test instanceof IBuildReceiver) {
((IBuildReceiver) test).setBuild(mBuildInfo);
}
@@ -493,15 +526,15 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
((DeqpTestRunner)test).setCollectLogs(mCollectDeqpLogs);
}
- forwardPackageDetails(knownTests.getPackageDef(), listener);
- test.run(filter);
- packages.remove(0);
- if (packages.size() > 0) {
- rebootIfNecessary(knownTests, packages.get(0));
- // remove artifacts like status bar from the previous test.
- // But this cannot dismiss dialog popped-up.
+ forwardPackageDetails(testPackage.getPackageDef(), listener);
+ test.run(filterMap.get(testPackage.getPackageDef().getId()));
+ if (i < mTestPackageList.size() - 1) {
+ TestPackage nextPackage = mTestPackageList.get(i + 1);
+ rebootIfNecessary(testPackage, nextPackage);
changeToHomeScreen();
}
+ // Track of the last complete test package index for resume
+ mLastTestPackageIndex = i;
}
if (mScreenshot) {
@@ -522,26 +555,52 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
CLog.e(e);
throw e;
} finally {
- for (ResultFilter filter : filters) {
+ for (ResultFilter filter : filterMap.values()) {
filter.reportUnexecutedTests();
}
}
}
/**
- * @param packages The package list to filter
- * @param abis The ABIs to test on
- * @return A list of {@link TestPackage} which test one of the given ABIs
+ * @param allTestPackageDefList The package list to filter
+ * @param deviceAbiSet The ABIs supported by the device being tested
+ * @return A {@link List} of {@link ITestPackageDef}s that should be tested
*/
- private static List<TestPackage> filterTestPackagesByAbi(
- List<TestPackage> packages, Set<String> abis){
- List<TestPackage> testPackages = new LinkedList<>();
- for (TestPackage test : packages) {
- if (abis.contains(test.getAbi().getName())) {
- testPackages.add(test);
+ private static List<ITestPackageDef> filterByAbi(
+ List<ITestPackageDef> allTestPackageDefList, Set<String> deviceAbiSet) {
+ List<ITestPackageDef> filteredTestPackageDefList = new LinkedList<>();
+ for (ITestPackageDef testPackageDef : allTestPackageDefList) {
+ if (deviceAbiSet.contains(testPackageDef.getAbi().getName())) {
+ // We only need test packages that are not empty and of matching ABIs
+ filteredTestPackageDefList.add(testPackageDef);
}
}
- return testPackages;
+ return filteredTestPackageDefList;
+ }
+
+ /** Reboot then the device iff the list of packages exceeds the minimum */
+ private void preRebootIfNecessary(List<TestPackage> testPackageList)
+ throws DeviceNotAvailableException {
+ if (mDisableReboot) {
+ return;
+ }
+
+ Set<String> packageNameSet = new HashSet<>();
+ for (TestPackage testPackage : testPackageList) {
+ // Parse the package name
+ packageNameSet.add(AbiUtils.parseTestName(testPackage.getPackageDef().getId()));
+ }
+ if (packageNameSet.size() < mMinPreRebootPackageCount) {
+ // There is actually only one unique package name. No need to reboot.
+ return;
+ }
+
+ // Reboot is needed
+ Log.logAndDisplay(LogLevel.INFO, LOG_TAG,
+ String.format("Pre-test reboot (%,d packages). Use --disable-reboot to skip",
+ packageNameSet.size()));
+
+ rebootDevice();
}
private void rebootIfNecessary(TestPackage testFinished, TestPackage testToRun)
@@ -598,6 +657,10 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
}
}
+ /**
+ * Remove artifacts like status bar from the previous test.
+ * But this cannot dismiss dialog popped-up.
+ */
private void changeToHomeScreen() throws DeviceNotAvailableException {
final String homeCmd = "input keyevent 3";
@@ -608,84 +671,94 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
//ignore
}
}
+
/**
- * Build the list of test packages to run
+ * Set {@code mTestPackageList} to the list of test packages to run filtered by ABI.
*/
- private List<TestPackage> buildTestsToRun() {
- List<TestPackage> testPkgList = new LinkedList<TestPackage>();
+ private void setupTestPackageList(Set<String> abis) throws DeviceNotAvailableException {
+ if (!mTestPackageList.isEmpty()) {
+ Log.logAndDisplay(LogLevel.INFO, LOG_TAG, "Resume tests using existing package list");
+ return;
+ }
try {
+ // Collect ALL tests
ITestPackageRepo testRepo = createTestCaseRepo();
- Collection<ITestPackageDef> testPkgDefs = getTestPackagesToRun(testRepo);
- for (ITestPackageDef testPkgDef : testPkgDefs) {
- addTestPackage(testPkgList, testPkgDef);
+ List<ITestPackageDef> testPkgDefs = new ArrayList<>(getAvailableTestPackages(testRepo));
+ testPkgDefs = filterByAbi(testPkgDefs, abis);
+ // Note: run() relies on the fact that the list is reliably sorted for sharding purposes
+ Collections.sort(testPkgDefs);
+ // Create test package list.
+ List<TestPackage> testPackageList = new ArrayList<>();
+ for (ITestPackageDef testPackageDef : testPkgDefs) {
+ // Note: createTest filters the test list inside of testPackageDef by exclusion list
+ IRemoteTest testForPackage = testPackageDef.createTest(mCtsBuild.getTestCasesDir());
+ if (testPackageDef.getTests().size() > 0) {
+ testPackageList.add(new TestPackage(testPackageDef, testForPackage));
+ }
}
- if (testPkgList.isEmpty()) {
- Log.logAndDisplay(LogLevel.WARN, LOG_TAG, "No tests to run");
+
+ // Filter by shard
+ int numTestPackages = testPackageList.size();
+ int totalShards = Math.min(mTotalShards, numTestPackages);
+
+ List<TestPackage> shardTestPackageList = new ArrayList<>();
+ for (int i = mShardAssignment; i < numTestPackages; i += totalShards) {
+ shardTestPackageList.add(testPackageList.get(i));
}
+ mTestPackageList.addAll(shardTestPackageList);
} catch (FileNotFoundException e) {
- throw new IllegalArgumentException("failed to find CTS plan file", e);
+ throw new IllegalArgumentException("failed to find XTS plan file", e);
} catch (ParseException e) {
- throw new IllegalArgumentException("failed to parse CTS plan file", e);
+ throw new IllegalArgumentException("failed to parse XTS plan file", e);
} catch (ConfigurationException e) {
throw new IllegalArgumentException("failed to process arguments", e);
}
- return testPkgList;
- }
-
- /**
- * Adds a test package to the list of packages to test
- *
- * @param testList
- * @param testPkgDef
- */
- private void addTestPackage(List<TestPackage> testList, ITestPackageDef testPkgDef) {
- IRemoteTest testForPackage = testPkgDef.createTest(mCtsBuild.getTestCasesDir());
- if (testForPackage != null) {
- Collection<TestIdentifier> knownTests = testPkgDef.getTests();
- testList.add(new TestPackage(testPkgDef, testForPackage, knownTests));
- }
}
/**
- * Return the list of test package defs to run
+ * Return the {@link Set} of {@link ITestPackageDef}s to run unfiltered by ABI
*
- * @return the list of test package defs to run
+ * @return the {@link Set} of {@link ITestPackageDef}s to run
* @throws ParseException
* @throws FileNotFoundException
* @throws ConfigurationException
*/
- private Collection<ITestPackageDef> getTestPackagesToRun(ITestPackageRepo testRepo)
- throws ParseException, FileNotFoundException, ConfigurationException {
+ private Set<ITestPackageDef> getAvailableTestPackages(ITestPackageRepo testRepo)
+ throws ParseException, FileNotFoundException, ConfigurationException {
// use LinkedHashSet to have predictable iteration order
- Set<ITestPackageDef> testPkgDefs = new LinkedHashSet<ITestPackageDef>();
+ Set<ITestPackageDef> testPkgDefs = new LinkedHashSet<>();
if (mPlanName != null) {
Log.i(LOG_TAG, String.format("Executing CTS test plan %s", mPlanName));
File ctsPlanFile = mCtsBuild.getTestPlanFile(mPlanName);
ITestPlan plan = createPlan(mPlanName);
plan.parse(createXmlStream(ctsPlanFile));
- for (String id : plan.getTestIds()) {
- if (!mExcludedPackageNames.contains(AbiUtils.parseId(id)[1])) {
- ITestPackageDef testPackageDef = testRepo.getTestPackage(id);
- if (testPackageDef != null) {
- testPackageDef.setTestFilter(plan.getTestFilter(id));
- testPkgDefs.add(testPackageDef);
- } else {
- CLog.e("Could not find test package id %s referenced in plan %s", id,
- mPlanName);
- }
+
+ for (String testId : plan.getTestIds()) {
+ if (mExcludedPackageNames.contains(AbiUtils.parseTestName(testId))) {
+ continue;
}
+ ITestPackageDef testPackageDef = testRepo.getTestPackage(testId);
+ if (testPackageDef == null) {
+ CLog.e("Could not find test id %s referenced in plan %s", testId, mPlanName);
+ continue;
+ }
+
+ testPackageDef.setTestFilter(plan.getTestFilter(testId));
+ testPkgDefs.add(testPackageDef);
}
} else if (mPackageNames.size() > 0){
- Log.i(LOG_TAG, String.format("Executing CTS test packages %s", mPackageNames));
+ Log.i(LOG_TAG, String.format("Executing XTS test packages %s", mPackageNames));
+
+ Map<String, List<ITestPackageDef>> testPackageDefMap =
+ testRepo.getTestPackageDefsByName();
+
for (String name : mPackageNames) {
- Set<ITestPackageDef> testPackages = testRepo.getTestPackages(name);
- if (!testPackages.isEmpty()) {
- testPkgDefs.addAll(testPackages);
- } else {
+ if (!testPackageDefMap.containsKey(name)) {
throw new IllegalArgumentException(String.format(
"Could not find test package %s. " +
- "Use 'list packages' to see available packages." , name));
+ "Use 'list packages' to see available packages.", name));
}
+ testPkgDefs.addAll(testPackageDefMap.get(name));
}
} else if (mClassName != null) {
Log.i(LOG_TAG, String.format("Executing CTS test class %s", mClassName));
@@ -708,14 +781,18 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
PlanCreator planCreator = new PlanCreator(uniquePlanName, mContinueSessionId,
CtsTestStatus.NOT_EXECUTED);
ITestPlan plan = createPlan(planCreator);
- for (String id : plan.getTestIds()) {
- if (!mExcludedPackageNames.contains(AbiUtils.parseId(id)[1])) {
- ITestPackageDef testPackageDef = testRepo.getTestPackage(id);
- if (testPackageDef != null) {
- testPackageDef.setTestFilter(plan.getTestFilter(id));
- testPkgDefs.add(testPackageDef);
- }
+ for (String testId : plan.getTestIds()) {
+ if (mExcludedPackageNames.contains(AbiUtils.parseTestName(testId))) {
+ continue;
+ }
+ ITestPackageDef testPackageDef = testRepo.getTestPackage(testId);
+ if (testPackageDef == null) {
+ CLog.e("Could not find test id %s referenced in plan %s", testId, mPlanName);
+ continue;
}
+
+ testPackageDef.setTestFilter(plan.getTestFilter(testId));
+ testPkgDefs.add(testPackageDef);
}
} else {
// should never get here - was checkFields() not called?
@@ -726,10 +803,11 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
/**
* Return the list of unique prerequisite Android package names
- * @param testPackages
+ *
+ * @param testPackages The {@link TestPackage}s that contain prerequisites
*/
private Collection<String> getPrerequisitePackageNames(List<TestPackage> testPackages) {
- Set<String> pkgNames = new HashSet<String>();
+ Set<String> pkgNames = new HashSet<>();
for (TestPackage testPkg : testPackages) {
String pkgName = testPkg.mPackageDef.getTargetPackageName();
if (pkgName != null) {
@@ -740,12 +818,12 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
}
/**
- * @return a {@link Set} containing {@ITestPackageDef}s pertaining to the given
+ * @return a {@link Set} containing {@link ITestPackageDef}s pertaining to the given
* {@code className} and {@code methodName}.
*/
private static Set<ITestPackageDef> buildTestPackageDefSet(
ITestPackageRepo testRepo, String className, String methodName) {
- Set<ITestPackageDef> testPkgDefs = new LinkedHashSet<ITestPackageDef>();
+ Set<ITestPackageDef> testPkgDefs = new LinkedHashSet<>();
// try to find packages to run from class name
List<String> packageIds = testRepo.findPackageIdsForTest(className);
if (packageIds.isEmpty()) {
@@ -763,18 +841,33 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
}
/**
- * Return the list of unique prerequisite apks to install
- * @param testPackages
+ * Return the list (by abi) of unique prerequisite apks to install
+ *
+ * @param testPackages The {@link List} of {@link TestPackage} that contain prerequisite APKs
*/
- private Collection<String> getPrerequisiteApks(List<TestPackage> testPackages) {
- Set<String> apkNames = new HashSet<String>();
+ private Map<String, Set<String>> getPrerequisiteApks(
+ List<TestPackage> testPackages, Set<String> abiSet) {
+ Map<String, Set<String>> abiToApkMap = new HashMap<>();
for (TestPackage testPkg : testPackages) {
+ if (testPkg.getKnownTests().size() == 0) {
+ // No tests, no point in installing pre-reqs
+ continue;
+ }
String apkName = testPkg.mPackageDef.getTargetApkName();
- if (apkName != null) {
- apkNames.add(apkName);
+ if (apkName == null) {
+ continue;
}
+ String abiName = testPkg.getAbi().getName();
+ if (!abiSet.contains(abiName)) {
+ continue;
+ }
+
+ if (!abiToApkMap.containsKey(abiName)) {
+ abiToApkMap.put(abiName, new HashSet<String>());
+ }
+ abiToApkMap.get(abiName).add(apkName);
}
- return apkNames;
+ return abiToApkMap;
}
/**
@@ -783,31 +876,22 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
*
* Install the collection of test apk file names
*
- * @param prerequisiteApks
+ * @param prerequisiteApks The APKs that must be installed
* @throws DeviceNotAvailableException
*/
- private void installPrerequisiteApks(Collection<String> prerequisiteApks)
+ private void installPrerequisiteApks(Collection<String> prerequisiteApks, IAbi abi)
throws DeviceNotAvailableException {
+ if (prerequisiteApks == null) {
+ return;
+ }
Log.logAndDisplay(LogLevel.INFO, LOG_TAG, "Installing prerequisites");
- Set<String> supportedAbiSet = getAbis();
for (String apkName : prerequisiteApks) {
try {
File apkFile = mCtsBuild.getTestApp(apkName);
- // As a workaround for multi arch support, try to install the APK
- // for all device supported ABIs. This will generate warning messages
- // until the above FIXME is resolved.
- int installFailCount = 0;
- for (String abi : supportedAbiSet) {
- String[] options = {AbiUtils.createAbiFlag(abi)};
- String errorCode = getDevice().installPackage(apkFile, true, options);
- if (errorCode != null) {
- installFailCount++;
- CLog.w("Failed to install %s. Reason: %s", apkName, errorCode);
- }
-
- }
- if (installFailCount >= supportedAbiSet.size()) {
- CLog.e("Failed to install %s. See warning messages.", apkName);
+ String[] options = {AbiUtils.createAbiFlag(abi.getName())};
+ String errorCode = getDevice().installPackage(apkFile, true, options);
+ if (errorCode != null) {
+ CLog.e("Failed to install %s. Reason: %s", apkName, errorCode);
}
} catch (FileNotFoundException e) {
CLog.e("Could not find test apk %s", apkName);
@@ -818,7 +902,7 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
/**
* Uninstalls the collection of android package names from device.
*
- * @param uninstallPackages
+ * @param uninstallPackages The packages that must be uninstalled
*/
private void uninstallPrequisiteApks(Collection<String> uninstallPackages)
throws DeviceNotAvailableException {
@@ -836,29 +920,17 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
return null;
}
checkFields();
- List<TestPackage> allTests = buildTestsToRun();
- if (allTests == null || allTests.size() <= 1) {
- Log.w(LOG_TAG, "no tests to shard!");
- return null;
+ List<IRemoteTest> shardQueue = new LinkedList<>();
+ for (int shardAssignment = 0; shardAssignment < mShards; shardAssignment++) {
+ CtsTest ctsTest = new CtsTest(shardAssignment, mShards /* totalShards */);
+ OptionCopier.copyOptionsNoThrow(this, ctsTest);
+ // Set the shard count because the copy option on the previous line copies
+ // over the mShard value
+ ctsTest.mShards = 0;
+ shardQueue.add(ctsTest);
}
- // treat shardQueue as a circular queue, to sequentially distribute tests among shards
- Queue<IRemoteTest> shardQueue = new LinkedList<IRemoteTest>();
- // don't create more shards than the number of tests we have!
- for (int i = 0; i < mShards && i < allTests.size(); i++) {
- CtsTest shard = new CtsTest();
- OptionCopier.copyOptionsNoThrow(this, shard);
- shard.mShards = 0;
- shard.mRemainingTestPkgs = new LinkedList<TestPackage>();
- shardQueue.add(shard);
- }
- while (!allTests.isEmpty()) {
- TestPackage testPair = allTests.remove(0);
- CtsTest shard = (CtsTest)shardQueue.poll();
- shard.mRemainingTestPkgs.add(testPair);
- shardQueue.add(shard);
- }
return shardQueue;
}
@@ -884,8 +956,7 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
* Exposed for unit testing
*/
ITestPackageRepo createTestCaseRepo() {
- return new TestPackageRepo(mCtsBuild.getTestCasesDir(), AbiUtils.getAbisSupportedByCts(),
- mIncludeKnownFailures);
+ return new TestPackageRepo(mCtsBuild.getTestCasesDir(), mIncludeKnownFailures);
}
/**
@@ -906,13 +977,12 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
*/
Set<String> getAbis() throws DeviceNotAvailableException {
String bitness = (mForceAbi == null) ? "" : mForceAbi;
- Set<String> abis = new HashSet<String>();
+ Set<String> abis = new HashSet<>();
for (String abi : AbiFormatter.getSupportedAbis(mDevice, bitness)) {
if (AbiUtils.isAbiSupportedByCts(abi)) {
abis.add(abi);
}
}
- Log.logAndDisplay(LogLevel.INFO, LOG_TAG, "ABIs: " + abis);
return abis;
}
@@ -964,7 +1034,7 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
* @return <code>true</code> if one and only one of <var>args</code> is <code>true</code>.
* Otherwise return <code>false</code>.
*/
- private boolean xor(boolean... args) {
+ private static boolean xor(boolean... args) {
boolean currentVal = args[0];
for (int i=1; i < args.length; i++) {
if (currentVal && args[i]) {
@@ -978,10 +1048,10 @@ public class CtsTest implements IDeviceTest, IResumableTest, IShardableTest, IBu
/**
* Forward the digest and package name to the listener as a metric
*
- * @param listener
+ * @param listener Handles test results
*/
- private void forwardPackageDetails(ITestPackageDef def, ITestInvocationListener listener) {
- Map<String, String> metrics = new HashMap<String, String>(3);
+ private static void forwardPackageDetails(ITestPackageDef def, ITestInvocationListener listener) {
+ Map<String, String> metrics = new HashMap<>(3);
metrics.put(PACKAGE_NAME_METRIC, def.getName());
metrics.put(PACKAGE_ABI_METRIC, def.getAbi().getName());
metrics.put(PACKAGE_DIGEST_METRIC, def.getDigest());
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ITestPackageDef.java b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ITestPackageDef.java
index ea01535..8a5c822 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ITestPackageDef.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ITestPackageDef.java
@@ -28,7 +28,7 @@ import java.util.Collection;
* <p/>
* Knows how to translate this info into a runnable {@link IRemoteTest}.
*/
-public interface ITestPackageDef {
+public interface ITestPackageDef extends Comparable<ITestPackageDef> {
/**
* Get the id of the test package.
@@ -37,12 +37,6 @@ public interface ITestPackageDef {
public String getId();
/**
- * Get the appPackageName of the test package.
- * @return the {@link String} appPackageName
- */
- public String getAppPackageName();
-
- /**
* Creates a runnable {@link IRemoteTest} from info stored in this definition.
*
* @param testCaseDir {@link File} representing directory of test case data
@@ -52,22 +46,6 @@ public interface ITestPackageDef {
public IRemoteTest createTest(File testCaseDir);
/**
- * Determine if given test is defined in this package.
- *
- * @param testDef the {@link TestIdentifier}
- * @return <code>true</code> if test is defined
- */
- public boolean isKnownTest(TestIdentifier testDef);
-
- /**
- * Determine if given test class is defined in this package.
- *
- * @param testClassName the fully qualified test class name
- * @return <code>true</code> if test class is defined
- */
- public boolean isKnownTestClass(String testClassName);
-
- /**
* Get the collection of tests in this test package.
*/
public Collection<TestIdentifier> getTests();
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ITestPackageRepo.java b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ITestPackageRepo.java
index d1d4111..234f437 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ITestPackageRepo.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ITestPackageRepo.java
@@ -19,7 +19,7 @@ package com.android.cts.tradefed.testtype;
import com.android.cts.util.AbiUtils;
import java.util.List;
-import java.util.Set;
+import java.util.Map;
/**
* Interface for accessing tests from the CTS repository.
@@ -36,29 +36,25 @@ public interface ITestPackageRepo {
public ITestPackageDef getTestPackage(String id);
/**
- * Get a {@link Set} of {@link TestPackageDef} given a name
- *
- * @param name the string package name
- * @return a {@link Set} of {@link TestPackageDef}
+ * @return a sorted {@link List} of all package ids found in repo.
*/
- public Set<ITestPackageDef> getTestPackages(String name);
+ public List<String> getPackageIds();
/**
- * Attempt to find the package ids for a given test class name
- *
- * @param testClassName the test class name
- * @return a {@link List} of package ids.
+ * @return a sorted {@link List} of test package names
*/
- public List<String> findPackageIdsForTest(String testClassName);
+ public List<String> getPackageNames();
/**
- * @return a sorted {@link List} of all package ids found in repo.
+ * @return A {@link Map} of test package name to a {@link List} of {@link ITestPackageDef}s.
*/
- public List<String> getPackageIds();
+ public Map<String, List<ITestPackageDef>> getTestPackageDefsByName();
/**
- * @return a sorted {@link List} of all package names found in repo.
+ * Attempt to find the package ids for a given test class name
+ *
+ * @param testClassName the test class name
+ * @return a {@link List} of package ids.
*/
- public List<String> getPackageNames();
-
+ public List<String> findPackageIdsForTest(String testClassName);
}
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ITestPlan.java b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ITestPlan.java
index 21b2d0a..2d5f4a7 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ITestPlan.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ITestPlan.java
@@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collection;
+import java.util.List;
/**
* Interface for accessing test plan data.
@@ -42,6 +43,11 @@ public interface ITestPlan {
public Collection<String> getTestIds();
/**
+ * Gets a sorted {@link List} of test names contained in this plan.
+ */
+ public List<String> getTestNames();
+
+ /**
* Gets the {@link TestFilter} that should be used to filter tests from given package.
*/
public TestFilter getTestFilter(String id);
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ResultFilter.java b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ResultFilter.java
index 7931660..f4f2f5d 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ResultFilter.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/ResultFilter.java
@@ -24,9 +24,7 @@ import com.android.tradefed.result.ResultForwarder;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -135,4 +133,9 @@ class ResultFilter extends ResultForwarder {
}
super.testRunEnded(0, new HashMap<String, String>());
}
+
+ /** @return the number of known tests */
+ public int getKnownTestCount() {
+ return mKnownTests.size();
+ }
}
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageDef.java b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageDef.java
index 2eccb50..9ef6257 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageDef.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageDef.java
@@ -112,11 +112,7 @@ class TestPackageDef implements ITestPackageDef {
mAppPackageName = appPackageName;
}
- /**
- * {@inheritDoc}
- */
- @Override
- public String getAppPackageName() {
+ String getAppPackageName() {
return mAppPackageName;
}
@@ -124,10 +120,6 @@ class TestPackageDef implements ITestPackageDef {
mRunTimeArgs = runTimeArgs;
}
- String getRunTimeArgs() {
- return mRunTimeArgs;
- }
-
void setAppNameSpace(String appNameSpace) {
mAppNameSpace = appNameSpace;
}
@@ -374,19 +366,7 @@ class TestPackageDef implements ITestPackageDef {
return mTestFilter.filter(mTests);
}
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean isKnownTest(TestIdentifier testDef) {
- return mTests.contains(testDef);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean isKnownTestClass(String className) {
+ boolean isKnownTestClass(String className) {
return mTestClasses.contains(className);
}
@@ -471,10 +451,15 @@ class TestPackageDef implements ITestPackageDef {
* @return The hex encoded string.
*/
private String toHexString(byte[] arr) {
- StringBuffer buf = new StringBuffer(arr.length * 2);
+ StringBuilder buf = new StringBuilder(arr.length * 2);
for (byte b : arr) {
buf.append(String.format("%02x", b & 0xFF));
}
return buf.toString();
}
+
+ @Override
+ public int compareTo(ITestPackageDef testPackageDef) {
+ return getId().compareTo(testPackageDef.getId());
+ }
}
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageRepo.java b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageRepo.java
index c1f168d..aea6613 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageRepo.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageRepo.java
@@ -40,31 +40,21 @@ public class TestPackageRepo implements ITestPackageRepo {
private static final String LOG_TAG = "TestCaseRepo";
- private final File mTestCaseDir;
-
/** mapping of ABI to a mapping of appPackageName to test definition */
private final Map<String, Map<String, TestPackageDef>> mTestMap;
- /** set of ABIs */
- private final Set<String> mAbis;
private final boolean mIncludeKnownFailures;
/**
* Creates a {@link TestPackageRepo}, initialized from provided repo files
*
* @param testCaseDir directory containing all test case definition xml and build files
- * @param abis Holds the ABIs which the test must be run against. This must be a subset of the
* ABIs supported by the device under test.
* @param includeKnownFailures Whether to run tests which are known to fail.
*/
- public TestPackageRepo(File testCaseDir, Set<String> abis, boolean includeKnownFailures) {
- mTestCaseDir = testCaseDir;
- mTestMap = new HashMap<String, Map<String, TestPackageDef>>();
- mAbis = abis;
- for (String abi : abis) {
- mTestMap.put(abi, new HashMap<String, TestPackageDef>());
- }
+ public TestPackageRepo(File testCaseDir, boolean includeKnownFailures) {
+ mTestMap = new HashMap<>();
mIncludeKnownFailures = includeKnownFailures;
- parse(mTestCaseDir);
+ parse(testCaseDir);
}
/**
@@ -78,25 +68,22 @@ public class TestPackageRepo implements ITestPackageRepo {
}
private void parseTestFromXml(File xmlFile) {
- TestPackageXmlParser parser = new TestPackageXmlParser(mAbis, mIncludeKnownFailures);
+ TestPackageXmlParser parser = new TestPackageXmlParser(mIncludeKnownFailures);
try {
parser.parse(createStreamFromFile(xmlFile));
Set<TestPackageDef> defs = parser.getTestPackageDefs();
- if (!defs.isEmpty()) {
- for (TestPackageDef def : defs) {
- String name = def.getAppPackageName();
- String abi = def.getAbi().getName();
- if (def.getTests().size() > 0) {
- mTestMap.get(abi).put(name, def);
- } else {
- Log.d(LOG_TAG, String.format("No tests in %s for %s, skipping",
- name, abi));
- }
- }
- } else {
+ if (defs.isEmpty()) {
Log.w(LOG_TAG, String.format("Could not find test package info in xml file %s",
xmlFile.getAbsolutePath()));
}
+ for (TestPackageDef def : defs) {
+ String name = def.getAppPackageName();
+ String abi = def.getAbi().getName();
+ if (!mTestMap.containsKey(abi)) {
+ mTestMap.put(abi, new HashMap<String, TestPackageDef>());
+ }
+ mTestMap.get(abi).put(name, def);
+ }
} catch (FileNotFoundException e) {
Log.e(LOG_TAG, String.format("Could not find test case xml file %s",
xmlFile.getAbsolutePath()));
@@ -113,7 +100,7 @@ public class TestPackageRepo implements ITestPackageRepo {
* <p/>
* Exposed for unit testing
*
- * @param xmlFile
+ * @param xmlFile The file containing the xml description of the package
* @return stream to read data
*
*/
@@ -150,61 +137,71 @@ public class TestPackageRepo implements ITestPackageRepo {
* {@inheritDoc}
*/
@Override
- public Set<ITestPackageDef> getTestPackages(String appPackageName) {
- Set<ITestPackageDef> defs = new HashSet<ITestPackageDef>();
- for (String abi : mAbis) {
- if (mTestMap.get(abi).containsKey(appPackageName)) {
- defs.add(mTestMap.get(abi).get(appPackageName));
+ public List<String> getPackageIds() {
+ Set<String> ids = new HashSet<>();
+ for (String abi : mTestMap.keySet()) {
+ Map<String, TestPackageDef> testNameMap = mTestMap.get(abi);
+ for (TestPackageDef testPackageDef : testNameMap.values()) {
+ ids.add(testPackageDef.getId());
}
}
- return defs;
+ List<String> idList = new ArrayList<>(ids);
+ Collections.sort(idList);
+ return idList;
}
/**
* {@inheritDoc}
*/
@Override
- public List<String> findPackageIdsForTest(String testClassName) {
- Set<String> ids = new HashSet<String>();
+ public List<String> getPackageNames() {
+ Set<String> nameSet = new HashSet<String>();
for (String abi : mTestMap.keySet()) {
- for (String name : mTestMap.get(abi).keySet()) {
- if (mTestMap.get(abi).get(name).isKnownTestClass(testClassName)) {
- ids.add(AbiUtils.createId(abi, name));
- }
+ Map<String, TestPackageDef> testNameMap = mTestMap.get(abi);
+ for (TestPackageDef testPackageDef : testNameMap.values()) {
+ nameSet.add(AbiUtils.parseTestName(testPackageDef.getId()));
}
}
- List<String> idList = new ArrayList<String>(ids);
- Collections.sort(idList);
- return idList;
+ List<String> nameList = new ArrayList<>(nameSet);
+ Collections.sort(nameList);
+ return nameList;
}
/**
* {@inheritDoc}
*/
@Override
- public List<String> getPackageIds() {
- Set<String> ids = new HashSet<String>();
- for (String abi : mAbis) {
- for (String name : mTestMap.get(abi).keySet()) {
- ids.add(AbiUtils.createId(abi, name));
+ public Map<String, List<ITestPackageDef>> getTestPackageDefsByName() {
+ Map<String, List<ITestPackageDef>> packageDefMap =
+ new HashMap<String, List<ITestPackageDef>>();
+
+ for (String abi : mTestMap.keySet()) {
+ Map<String, TestPackageDef> testNameMap = mTestMap.get(abi);
+ for (String packageName : testNameMap.keySet()) {
+ if (!packageDefMap.containsKey(packageName)) {
+ packageDefMap.put(packageName, new ArrayList<ITestPackageDef>());
+ }
+ packageDefMap.get(packageName).add(testNameMap.get(packageName));
}
}
- List<String> idList = new ArrayList<String>(ids);
- Collections.sort(idList);
- return idList;
+ return packageDefMap;
}
/**
* {@inheritDoc}
*/
@Override
- public List<String> getPackageNames() {
- Set<String> names = new HashSet<String>();
- for (String abi : mAbis) {
- names.addAll(mTestMap.get(abi).keySet());
+ public List<String> findPackageIdsForTest(String testClassName) {
+ Set<String> ids = new HashSet<String>();
+ for (String abi : mTestMap.keySet()) {
+ for (String name : mTestMap.get(abi).keySet()) {
+ if (mTestMap.get(abi).get(name).isKnownTestClass(testClassName)) {
+ ids.add(AbiUtils.createId(abi, name));
+ }
+ }
}
- List<String> packageNames = new ArrayList<String>(names);
- Collections.sort(packageNames);
- return packageNames;
+ List<String> idList = new ArrayList<String>(ids);
+ Collections.sort(idList);
+ return idList;
}
}
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageXmlParser.java b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageXmlParser.java
index 8f4f1b0..baceb8b 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageXmlParser.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageXmlParser.java
@@ -40,18 +40,14 @@ public class TestPackageXmlParser extends AbstractXmlParser {
private static final String LOG_TAG = "TestPackageXmlParser";
- private final Set<String> mAbis;
private final boolean mIncludeKnownFailures;
private Map<String, TestPackageDef> mPackageDefs = new HashMap<String, TestPackageDef>();
/**
- * @param abis Holds the ABIs which the test must be run against. This must be a subset of the
- * ABIs supported by the device under test.
* @param includeKnownFailures Whether to run tests which are known to fail.
*/
- public TestPackageXmlParser(Set<String> abis, boolean includeKnownFailures) {
- mAbis = abis;
+ public TestPackageXmlParser(boolean includeKnownFailures) {
mIncludeKnownFailures = includeKnownFailures;
}
@@ -88,7 +84,7 @@ public class TestPackageXmlParser extends AbstractXmlParser {
final String runTimeArgs = attributes.getValue("runtimeArgs");
final String testType = getTestType(attributes);
- for (String abiName : mAbis) {
+ for (String abiName : AbiUtils.getAbisSupportedByCts()) {
Abi abi = new Abi(abiName, AbiUtils.getBitness(abiName));
TestPackageDef packageDef = new TestPackageDef();
packageDef.setAppPackageName(appPackageName);
@@ -154,13 +150,11 @@ public class TestPackageXmlParser extends AbstractXmlParser {
Set<String> abis = new HashSet<String>();
if (abiList == null) {
// If no specification, add all supported abis
- abis.addAll(mAbis);
+ abis.addAll(AbiUtils.getAbisSupportedByCts());
} else {
- for (String abi : abiList.split(", ")) {
- if (mAbis.contains(abi)) {
- // Else only add the abi which are supported
- abis.add(abi);
- }
+ for (String abi : abiList.split(",")) {
+ // Else only add the abi which are supported
+ abis.add(abi.trim());
}
}
for (String abi : abis) {
@@ -206,9 +200,9 @@ public class TestPackageXmlParser extends AbstractXmlParser {
}
/**
- * @returns the set of {@link TestPackageDef} containing data parsed from xml
+ * @return the set of {@link TestPackageDef} containing data parsed from xml
*/
public Set<TestPackageDef> getTestPackageDefs() {
- return new HashSet<TestPackageDef>(mPackageDefs.values());
+ return new HashSet<>(mPackageDefs.values());
}
}
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPlan.java b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPlan.java
index 8737db6..2419784 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPlan.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPlan.java
@@ -35,6 +35,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.TreeSet;
/**
* Implementation of {@link TestPlan}.
@@ -150,6 +151,18 @@ public class TestPlan extends AbstractXmlParser implements ITestPlan {
* {@inheritDoc}
*/
@Override
+ public List<String> getTestNames() {
+ TreeSet<String> testNameSet = new TreeSet<>();
+ for (String id : mIdFilterMap.keySet()) {
+ testNameSet.add(AbiUtils.parseTestName(id));
+ }
+ return new ArrayList<>(testNameSet);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public TestFilter getTestFilter(String id) {
return mIdFilterMap.get(id);
}
diff --git a/tools/tradefed-host/tests/src/com/android/cts/tradefed/testtype/CtsTestTest.java b/tools/tradefed-host/tests/src/com/android/cts/tradefed/testtype/CtsTestTest.java
index 9915309..30e2ba8 100644
--- a/tools/tradefed-host/tests/src/com/android/cts/tradefed/testtype/CtsTestTest.java
+++ b/tools/tradefed-host/tests/src/com/android/cts/tradefed/testtype/CtsTestTest.java
@@ -35,8 +35,10 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
@@ -47,11 +49,16 @@ public class CtsTestTest extends TestCase {
private static final String PLAN_NAME = "CTS";
private static final String PACKAGE_NAME = "test-name";
private static final String ID = AbiUtils.createId(UnitTests.ABI.getName(), PACKAGE_NAME);
+ private static final TestIdentifier TEST_IDENTIFIER =
+ new TestIdentifier("CLASS_NAME", "TEST_NAME");
private static final List<String> NAMES = new ArrayList<>();
private static final List<String> IDS = new ArrayList<>();
+ private static final List<TestIdentifier> TEST_IDENTIFIER_LIST = new ArrayList<>();
+
static {
NAMES.add(PACKAGE_NAME);
IDS.add(ID);
+ TEST_IDENTIFIER_LIST.add(TEST_IDENTIFIER);
}
/** the test fixture under test, with all external dependencies mocked out */
@@ -76,7 +83,7 @@ public class CtsTestTest extends TestCase {
mMockDevice = EasyMock.createMock(ITestDevice.class);
mMockListener = EasyMock.createNiceMock(ITestInvocationListener.class);
mStubBuildHelper = new StubCtsBuildHelper();
- mMockPackageDefs = new HashSet<ITestPackageDef>();
+ mMockPackageDefs = new HashSet<>();
mMockPackageDef = EasyMock.createMock(ITestPackageDef.class);
mMockPackageDefs.add(mMockPackageDef);
EasyMock.expect(mMockPackageDef.getTargetApkName()).andStubReturn(null);
@@ -110,8 +117,8 @@ public class CtsTestTest extends TestCase {
// turn off device collection for simplicity
mCtsTest.setSkipDeviceInfo(true);
// only run tests on one ABI
- EasyMock.expect(mMockDevice.getProperty("ro.product.cpu.abilist")).andReturn(
- UnitTests.ABI.getName()).anyTimes();
+ EasyMock.expect(mMockDevice.getProperty("ro.product.cpu.abilist"))
+ .andReturn(UnitTests.ABI.getName()).anyTimes();
}
/**
@@ -119,7 +126,7 @@ public class CtsTestTest extends TestCase {
*/
@SuppressWarnings("unchecked")
public void testRun_plan() throws DeviceNotAvailableException, ParseException {
- setParsePlanExceptations();
+ setParsePlanExpectations();
setCreateAndRunTestExpectations();
@@ -134,6 +141,12 @@ public class CtsTestTest extends TestCase {
@SuppressWarnings("unchecked")
public void testRun_package() throws DeviceNotAvailableException {
mCtsTest.addPackageName(PACKAGE_NAME);
+ Map<String, List<ITestPackageDef>> nameMap = new HashMap<>();
+ List<ITestPackageDef> testPackageDefList = new ArrayList<>();
+ testPackageDefList.add(mMockPackageDef);
+ nameMap.put(PACKAGE_NAME, testPackageDefList);
+
+ EasyMock.expect(mMockRepo.getTestPackageDefsByName()).andReturn(nameMap);
setCreateAndRunTestExpectations();
@@ -148,7 +161,12 @@ public class CtsTestTest extends TestCase {
@SuppressWarnings("unchecked")
public void testRun_resume() throws DeviceNotAvailableException {
mCtsTest.addPackageName(PACKAGE_NAME);
+ Map<String, List<ITestPackageDef>> nameMap = new HashMap<>();
+ List<ITestPackageDef> testPackageDefList = new ArrayList<>();
+ testPackageDefList.add(mMockPackageDef);
+ nameMap.put(PACKAGE_NAME, testPackageDefList);
+ EasyMock.expect(mMockRepo.getTestPackageDefsByName()).andReturn(nameMap);
setCreateAndRunTestExpectations();
// abort the first run
EasyMock.expectLastCall().andThrow(new DeviceNotAvailableException());
@@ -245,7 +263,7 @@ public class CtsTestTest extends TestCase {
/**
* Set EasyMock expectations for parsing {@link #PLAN_NAME}
*/
- private void setParsePlanExceptations() throws ParseException {
+ private void setParsePlanExpectations() throws ParseException {
mCtsTest.setPlanName(PLAN_NAME);
mMockPlan.parse((InputStream) EasyMock.anyObject());
EasyMock.expect(mMockPlan.getTestIds()).andReturn(IDS);
@@ -260,10 +278,9 @@ public class CtsTestTest extends TestCase {
private void setCreateAndRunTestExpectations() throws DeviceNotAvailableException {
EasyMock.expect(mMockRepo.getPackageNames()).andReturn(NAMES).anyTimes();
EasyMock.expect(mMockRepo.getPackageIds()).andReturn(IDS).anyTimes();
- EasyMock.expect(mMockRepo.getTestPackages(PACKAGE_NAME)).andReturn(mMockPackageDefs).anyTimes();
EasyMock.expect(mMockRepo.getTestPackage(ID)).andReturn(mMockPackageDef).anyTimes();
EasyMock.expect(mMockPackageDef.createTest((File) EasyMock.anyObject())).andReturn(mMockTest);
- EasyMock.expect(mMockPackageDef.getTests()).andReturn(new ArrayList<TestIdentifier>());
+ EasyMock.expect(mMockPackageDef.getTests()).andReturn(TEST_IDENTIFIER_LIST).times(2);
EasyMock.expect(mMockPackageDef.getName()).andReturn(PACKAGE_NAME).atLeastOnce();
EasyMock.expect(mMockPackageDef.getAbi()).andReturn(UnitTests.ABI).atLeastOnce();
EasyMock.expect(mMockPackageDef.getId()).andReturn(ID).atLeastOnce();
diff --git a/tools/tradefed-host/tests/src/com/android/cts/tradefed/testtype/TestPackageXmlParserTest.java b/tools/tradefed-host/tests/src/com/android/cts/tradefed/testtype/TestPackageXmlParserTest.java
index 5591b65..6d87a61 100644
--- a/tools/tradefed-host/tests/src/com/android/cts/tradefed/testtype/TestPackageXmlParserTest.java
+++ b/tools/tradefed-host/tests/src/com/android/cts/tradefed/testtype/TestPackageXmlParserTest.java
@@ -16,29 +16,28 @@
package com.android.cts.tradefed.testtype;
-import com.android.cts.tradefed.command.CtsConsole;
import com.android.cts.util.AbiUtils;
import com.android.ddmlib.testrunner.TestIdentifier;
import com.android.tradefed.util.xml.AbstractXmlParser.ParseException;
+import junit.framework.TestCase;
+
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Iterator;
-import junit.framework.TestCase;
-
/**
* Unit tests for {@link TestPackageXmlParser}.
*/
public class TestPackageXmlParserTest extends TestCase {
- private static String INSTR_TEST_DATA =
+ private static final String INSTR_TEST_DATA =
"<TestPackage AndroidFramework=\"Android 1.0\" appNameSpace=\"com.example\" " +
"appPackageName=\"android.example\" name=\"CtsExampleTestCases\" " +
"runner=\"android.test.InstrumentationTestRunner\" version=\"1.0\">" +
"</TestPackage>";
- private static String HOST_TEST_DATA =
+ private static final String HOST_TEST_DATA =
"<TestPackage hostSideOnly=\"true\" >\n" +
" <TestSuite name=\"com\" >\n" +
" <TestSuite name=\"example\" >\n" +
@@ -55,23 +54,22 @@ public class TestPackageXmlParserTest extends TestCase {
" </TestSuite>\n" +
"</TestPackage>";
- private static String BAD_HOST_TEST_DATA =
+ private static final String BAD_HOST_TEST_DATA =
"<TestPackage hostSideOnly=\"blah\" >" +
"</TestPackage>";
- private static String VM_HOST_TEST_XML = "<TestPackage vmHostTest=\"true\"></TestPackage>";
+ private static final String VM_HOST_TEST_XML =
+ "<TestPackage vmHostTest=\"true\"></TestPackage>";
- private static String NATIVE_TEST_XML = "<TestPackage testType=\"native\"></TestPackage>";
+ private static final String NATIVE_TEST_XML = "<TestPackage testType=\"native\"></TestPackage>";
- private static String NO_TEST_DATA =
- "<invalid />";
+ private static final String NO_TEST_DATA = "<invalid />";
/**
* Test parsing test case xml containing an instrumentation test definition.
*/
public void testParse_instrPackage() throws ParseException {
- TestPackageXmlParser parser = new TestPackageXmlParser(AbiUtils.getAbisSupportedByCts(),
- true);
+ TestPackageXmlParser parser = new TestPackageXmlParser(true);
parser.parse(getStringAsStream(INSTR_TEST_DATA));
for (TestPackageDef def : parser.getTestPackageDefs()) {
assertEquals("com.example", def.getAppNameSpace());
@@ -85,8 +83,7 @@ public class TestPackageXmlParserTest extends TestCase {
* Test parsing test case xml containing an host test attribute and test data.
*/
public void testParse_hostTest() throws ParseException {
- TestPackageXmlParser parser = new TestPackageXmlParser(AbiUtils.getAbisSupportedByCts(),
- true);
+ TestPackageXmlParser parser = new TestPackageXmlParser(true);
parser.parse(getStringAsStream(HOST_TEST_DATA));
for (TestPackageDef def : parser.getTestPackageDefs()) {
assertEquals(TestPackageDef.HOST_SIDE_ONLY_TEST, def.getTestType());
@@ -110,8 +107,7 @@ public class TestPackageXmlParserTest extends TestCase {
}
public void testParse_hostTest_noKnownFailures() throws ParseException {
- TestPackageXmlParser parser = new TestPackageXmlParser(AbiUtils.getAbisSupportedByCts(),
- false);
+ TestPackageXmlParser parser = new TestPackageXmlParser(false);
parser.parse(getStringAsStream(HOST_TEST_DATA));
for (TestPackageDef def : parser.getTestPackageDefs()) {
assertEquals(TestPackageDef.HOST_SIDE_ONLY_TEST, def.getTestType());
@@ -134,8 +130,7 @@ public class TestPackageXmlParserTest extends TestCase {
* Test parsing test case xml containing an invalid host test attribute.
*/
public void testParse_badHostTest() throws ParseException {
- TestPackageXmlParser parser = new TestPackageXmlParser(AbiUtils.getAbisSupportedByCts(),
- true);
+ TestPackageXmlParser parser = new TestPackageXmlParser(true);
parser.parse(getStringAsStream(BAD_HOST_TEST_DATA));
for (TestPackageDef def : parser.getTestPackageDefs()) {
assertFalse(TestPackageDef.HOST_SIDE_ONLY_TEST.equals(def.getTestType()));
@@ -151,8 +146,7 @@ public class TestPackageXmlParserTest extends TestCase {
}
private void assertTestType(String expectedType, String xml) throws ParseException {
- TestPackageXmlParser parser = new TestPackageXmlParser(AbiUtils.getAbisSupportedByCts(),
- true);
+ TestPackageXmlParser parser = new TestPackageXmlParser(true);
parser.parse(getStringAsStream(xml));
for (TestPackageDef def : parser.getTestPackageDefs()) {
assertEquals(expectedType, def.getTestType());
@@ -163,8 +157,7 @@ public class TestPackageXmlParserTest extends TestCase {
* Test parsing a test case xml with no test package data.
*/
public void testParse_noData() throws ParseException {
- TestPackageXmlParser parser = new TestPackageXmlParser(AbiUtils.getAbisSupportedByCts(),
- true);
+ TestPackageXmlParser parser = new TestPackageXmlParser(true);
parser.parse(getStringAsStream(NO_TEST_DATA));
assertTrue(parser.getTestPackageDefs().isEmpty());
}
diff --git a/tools/utils/buildCts.py b/tools/utils/buildCts.py
index 9d0a5ff..486a494 100755
--- a/tools/utils/buildCts.py
+++ b/tools/utils/buildCts.py
@@ -357,6 +357,7 @@ def BuildAospSmallSizeTestList():
def BuildCtsVettedNewPackagesList():
""" Construct a defaultdict that maps package names that is vetted for L. """
return {
+ 'android.JobScheduler' : [],
'android.core.tests.libcore.package.harmony_annotation' : [],
'android.core.tests.libcore.package.harmony_beans' : [],
'android.core.tests.libcore.package.harmony_java_io' : [],
@@ -383,6 +384,7 @@ def BuildCtsVettedNewPackagesList():
'android.uiautomation' : [],
'android.uirendering' : [],
'android.webgl' : [],
+ 'com.drawelements.deqp.gles3' : [],
'com.drawelements.deqp.gles31' : []}
def BuildCtsFlakyTestList():
#
##
# diffing device/lge/mako
##
#
diff --git a/init.mako.rc b/init.mako.rc
index f84c0a9..73edc13 100644
--- a/init.mako.rc
+++ b/init.mako.rc
@@ -395,7 +395,7 @@ service qcamerasvr /system/bin/mm-qcamera-daemon
group camera system inet input
service wcnss_init /system/bin/sh /system/etc/init.mako.wifi.sh
- class main
+ class late_start
user system
group system wifi
seclabel u:r:conn_init:s0
#
##
# diffing platform/external/deqp
##
#
diff --git a/android/cts/com.drawelements.deqp.gles3.xml b/android/cts/com.drawelements.deqp.gles3.xml
index 6af073a..abf40d1 100644
--- a/android/cts/com.drawelements.deqp.gles3.xml
+++ b/android/cts/com.drawelements.deqp.gles3.xml
@@ -17066,7 +17066,6 @@
</TestCase>
<TestCase name="highp_vertex">
<Test name="vec3" />
-<Test name="vec4" />
</TestCase>
<TestCase name="highp_fragment">
<Test name="vec3" />
@@ -27838,7 +27837,6 @@
<Test name="rgba16f" />
<Test name="depth24_stencil8" />
<Test name="r11f_g11f_b10f" />
-<Test name="srgb_unsigned_byte" />
<Test name="srgb_alpha_unsigned_byte" />
<Test name="srgb8_alpha8" />
<Test name="depth_component32f" />
diff --git a/doc/testspecs/GLES31/functional.blend_equation_advanced.txt b/doc/testspecs/GLES31/functional.blend_equation_advanced.txt
index 72d06ff..cc7822d 100644
--- a/doc/testspecs/GLES31/functional.blend_equation_advanced.txt
+++ b/doc/testspecs/GLES31/functional.blend_equation_advanced.txt
@@ -32,6 +32,7 @@ Includes:
Excludes (will be added later):
+ Use of blend_support_all qualifier
+ Interaction with other per-fragment operations
+ + Non-premultiplied / invalid color inputs
+ Negative tests
Description:
diff --git a/framework/platform/android/tcuAndroidRenderActivity.cpp b/framework/platform/android/tcuAndroidRenderActivity.cpp
index 142435e..ddbf40e 100644
--- a/framework/platform/android/tcuAndroidRenderActivity.cpp
+++ b/framework/platform/android/tcuAndroidRenderActivity.cpp
@@ -291,7 +291,6 @@ RenderActivity::~RenderActivity (void)
void RenderActivity::setThread (RenderThread* thread)
{
- DE_ASSERT(!m_thread && thread);
m_thread = thread;
}
diff --git a/framework/platform/android/tcuTestLogParserJNI.cpp b/framework/platform/android/tcuTestLogParserJNI.cpp
index 59a4edb..e436b97 100644
--- a/framework/platform/android/tcuTestLogParserJNI.cpp
+++ b/framework/platform/android/tcuTestLogParserJNI.cpp
@@ -107,12 +107,12 @@ TestLogListener::~TestLogListener (void)
void TestLogListener::beginSession (void)
{
- m_env->CallObjectMethod(m_object, m_beginSessionID);
+ m_env->CallVoidMethod(m_object, m_beginSessionID);
}
void TestLogListener::endSession (void)
{
- m_env->CallObjectMethod(m_object, m_endSessionID);
+ m_env->CallVoidMethod(m_object, m_endSessionID);
}
void TestLogListener::sessionInfo (const char* name, const char* value)
@@ -120,26 +120,30 @@ void TestLogListener::sessionInfo (const char* name, const char* value)
jstring jName = m_env->NewStringUTF(name);
jstring jValue = m_env->NewStringUTF(value);
- m_env->CallObjectMethod(m_object, m_sessionInfoID, jName, jValue);
+ m_env->CallVoidMethod(m_object, m_sessionInfoID, jName, jValue);
+ m_env->DeleteLocalRef(jName);
+ m_env->DeleteLocalRef(jValue);
}
void TestLogListener::beginTestCase (const char* testCasePath)
{
jstring jTestCasePath = m_env->NewStringUTF(testCasePath);
- m_env->CallObjectMethod(m_object, m_beginTestCaseID, jTestCasePath);
+ m_env->CallVoidMethod(m_object, m_beginTestCaseID, jTestCasePath);
+ m_env->DeleteLocalRef(jTestCasePath);
}
void TestLogListener::endTestCase (void)
{
- m_env->CallObjectMethod(m_object, m_endTestCaseID);
+ m_env->CallVoidMethod(m_object, m_endTestCaseID);
}
void TestLogListener::terminateTestCase (const char* reason)
{
jstring jReason = m_env->NewStringUTF(reason);
- m_env->CallObjectMethod(m_object, m_terminateTestCaseID, jReason);
+ m_env->CallVoidMethod(m_object, m_terminateTestCaseID, jReason);
+ m_env->DeleteLocalRef(jReason);
}
void TestLogListener::testCaseResult (const char* statusCode, const char* details)
@@ -147,14 +151,17 @@ void TestLogListener::testCaseResult (const char* statusCode, const char* detail
jstring jStatusCode = m_env->NewStringUTF(statusCode);
jstring jDetails = m_env->NewStringUTF(details);
- m_env->CallObjectMethod(m_object, m_testCaseResultID, jStatusCode, jDetails);
+ m_env->CallVoidMethod(m_object, m_testCaseResultID, jStatusCode, jDetails);
+ m_env->DeleteLocalRef(jStatusCode);
+ m_env->DeleteLocalRef(jDetails);
}
void TestLogListener::testLogData (const char* data)
{
jstring logData = m_env->NewStringUTF(data);
- m_env->CallObjectMethod(m_object, m_testLogData, logData);
+ m_env->CallVoidMethod(m_object, m_testLogData, logData);
+ m_env->DeleteLocalRef(logData);
}
class TestLogParser
diff --git a/modules/gles2/functional/es2fFboCompletenessTests.cpp b/modules/gles2/functional/es2fFboCompletenessTests.cpp
index 24882aa..5a67f8d 100644
--- a/modules/gles2/functional/es2fFboCompletenessTests.cpp
+++ b/modules/gles2/functional/es2fFboCompletenessTests.cpp
@@ -96,6 +96,12 @@ static const FormatKey s_oesTextureHalfFloatFormats[] =
GLS_UNSIZED_FORMATKEY(GL_RGB, GL_HALF_FLOAT_OES),
};
+// GL_EXT_sRGB_write_control
+static const FormatKey s_extSrgbWriteControlFormats[] =
+{
+ GL_SRGB8_ALPHA8
+};
+
static const FormatExtEntry s_es2ExtFormats[] =
{
// The extension does not specify these to be color-renderable.
@@ -109,6 +115,13 @@ static const FormatExtEntry s_es2ExtFormats[] =
TEXTURE_VALID,
GLS_ARRAY_RANGE(s_oesTextureHalfFloatFormats)
},
+
+ // GL_EXT_sRGB_write_control makes SRGB8_ALPHA8 color-renderable
+ {
+ "GL_EXT_sRGB_write_control",
+ REQUIRED_RENDERABLE | TEXTURE_VALID | COLOR_RENDERABLE | RENDERBUFFER_VALID,
+ GLS_ARRAY_RANGE(s_extSrgbWriteControlFormats)
+ },
};
class ES2Checker : public Checker
diff --git a/modules/gles3/functional/es3fFboCompletenessTests.cpp b/modules/gles3/functional/es3fFboCompletenessTests.cpp
index c594e4c..b392f51 100644
--- a/modules/gles3/functional/es3fFboCompletenessTests.cpp
+++ b/modules/gles3/functional/es3fFboCompletenessTests.cpp
@@ -93,6 +93,14 @@ static const FormatKey s_es3TextureFloatFormats[] =
GL_RGBA16F, GL_RGB16F, GL_RG16F, GL_R16F,
};
+static const FormatKey s_es3NotRenderableTextureFormats[] =
+{
+ GL_R8_SNORM, GL_RG8_SNORM, GL_RGB8_SNORM, GL_RGBA8_SNORM,
+ GL_RGB9_E5, GL_SRGB8,
+ GL_RGB8I, GL_RGB16I, GL_RGB32I,
+ GL_RGB8UI, GL_RGB16UI,GL_RGB32UI,
+};
+
static const FormatEntry s_es3Formats[] =
{
// Renderbuffers don't support unsized formats
@@ -106,6 +114,8 @@ static const FormatEntry s_es3Formats[] =
GLS_ARRAY_RANGE(s_es3StencilRboRenderables) },
{ REQUIRED_RENDERABLE | STENCIL_RENDERABLE | RENDERBUFFER_VALID | TEXTURE_VALID,
GLS_ARRAY_RANGE(s_es3StencilRenderables) },
+ { TEXTURE_VALID,
+ GLS_ARRAY_RANGE(s_es3NotRenderableTextureFormats) },
// These are not color-renderable in vanilla ES3, but we need to mark them
// as valid for textures, since EXT_color_buffer_(half_)float brings in
diff --git a/modules/gles31/functional/es31fAdvancedBlendTests.cpp b/modules/gles31/functional/es31fAdvancedBlendTests.cpp
index dcde00f..aed9395 100644
--- a/modules/gles31/functional/es31fAdvancedBlendTests.cpp
+++ b/modules/gles31/functional/es31fAdvancedBlendTests.cpp
@@ -419,10 +419,15 @@ AdvancedBlendCase::IterateResult AdvancedBlendCase::iterate (void)
GLU_EXPECT_NO_ERROR(gl.getError(), "Failed to set render state");
+ gl.clear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
+
gl.disable(GL_BLEND);
gl.drawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, DE_NULL);
gl.enable(GL_BLEND);
+ if (!m_coherentBlending)
+ gl.blendBarrierKHR();
+
if (m_coherentBlending)
{
gl.drawElements(GL_TRIANGLES, 6*(numQuads-1), GL_UNSIGNED_SHORT, (const void*)(deUintptr)(6*sizeof(deUint16)));
diff --git a/modules/gles31/functional/es31fNegativeBufferApiTests.cpp b/modules/gles31/functional/es31fNegativeBufferApiTests.cpp
index 3c9e27b..9f63623 100644
--- a/modules/gles31/functional/es31fNegativeBufferApiTests.cpp
+++ b/modules/gles31/functional/es31fNegativeBufferApiTests.cpp
@@ -1396,8 +1396,11 @@ void renderbuffer_storage_multisample (NegativeTestContext& ctx)
{
deUint32 rbo = 0x1234;
int maxSamplesSupportedRGBA4 = -1;
+ int maxSamplesSupportedRGBA8UI = -1;
ctx.glGetInternalformativ (GL_RENDERBUFFER, GL_RGBA4, GL_SAMPLES, 1, &maxSamplesSupportedRGBA4);
+ ctx.glGetInternalformativ (GL_RENDERBUFFER, GL_RGBA8UI, GL_SAMPLES, 1, &maxSamplesSupportedRGBA8UI);
+
ctx.glGenRenderbuffers (1, &rbo);
ctx.glBindRenderbuffer (GL_RENDERBUFFER, rbo);
@@ -1427,8 +1430,8 @@ void renderbuffer_storage_multisample (NegativeTestContext& ctx)
ctx.expectError (GL_INVALID_ENUM);
ctx.endSection();
- ctx.beginSection("GL_INVALID_OPERATION is generated if internalformat is a signed or unsigned integer format and samples is greater than 0.");
- ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 1, GL_RGBA8UI, 1, 1);
+ ctx.beginSection("GL_INVALID_OPERATION is generated if samples is greater than the maximum number of samples supported for internalformat. (Unsigned integer format)");
+ ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, maxSamplesSupportedRGBA8UI+1, GL_RGBA8UI, 1, 1);
ctx.expectError (GL_INVALID_OPERATION);
ctx.endSection();
diff --git a/modules/gles31/functional/es31fProgramInterfaceDefinitionUtil.cpp b/modules/gles31/functional/es31fProgramInterfaceDefinitionUtil.cpp
index ccc0d80..5dca33b 100644
--- a/modules/gles31/functional/es31fProgramInterfaceDefinitionUtil.cpp
+++ b/modules/gles31/functional/es31fProgramInterfaceDefinitionUtil.cpp
@@ -893,6 +893,35 @@ static int getNumMaxXFBOutputComponents (const ProgramInterfaceDefinition::Progr
return numComponents;
}
+static int getFragmentOutputMaxLocation (const ProgramInterfaceDefinition::Shader* shader)
+{
+ DE_ASSERT(shader->getType() == glu::SHADERTYPE_FRAGMENT);
+
+ int maxOutputLocation = -1;
+
+ for (int ndx = 0; ndx < (int)shader->getDefaultBlock().variables.size(); ++ndx)
+ {
+ if (shader->getDefaultBlock().variables[ndx].storage == glu::STORAGE_OUT)
+ {
+ // missing location qualifier means location == 0
+ const int outputLocation = (shader->getDefaultBlock().variables[ndx].layout.location == -1)
+ ? (0)
+ : (shader->getDefaultBlock().variables[ndx].layout.location);
+
+ // only basic types or arrays of basic types possible
+ DE_ASSERT(!shader->getDefaultBlock().variables[ndx].varType.isStructType());
+
+ const int locationSlotsTaken = (shader->getDefaultBlock().variables[ndx].varType.isArrayType())
+ ? (shader->getDefaultBlock().variables[ndx].varType.getArraySize())
+ : (1);
+
+ maxOutputLocation = de::max(maxOutputLocation, outputLocation + locationSlotsTaken - 1);
+ }
+ }
+
+ return maxOutputLocation;
+}
+
} // anonymous
std::vector<std::string> getProgramInterfaceBlockMemberResourceList (const glu::InterfaceBlock& interfaceBlock)
@@ -1315,27 +1344,28 @@ ProgramInterfaceDefinition::ProgramResourceUsage getCombinedProgramResourceUsage
{
ProgramInterfaceDefinition::ProgramResourceUsage retVal;
- retVal.uniformBufferMaxBinding = 0;
+ retVal.uniformBufferMaxBinding = -1; // max binding is inclusive upper bound. Allow 0 bindings by using negative value
retVal.uniformBufferMaxSize = 0;
retVal.numUniformBlocks = 0;
retVal.numCombinedVertexUniformComponents = 0;
retVal.numCombinedFragmentUniformComponents = 0;
- retVal.shaderStorageBufferMaxBinding = 0;
+ retVal.shaderStorageBufferMaxBinding = -1; // see above
retVal.shaderStorageBufferMaxSize = 0;
retVal.numShaderStorageBlocks = 0;
retVal.numVaryingComponents = 0;
retVal.numVaryingVectors = 0;
retVal.numCombinedSamplers = 0;
- retVal.atomicCounterBufferMaxBinding = 0;
+ retVal.atomicCounterBufferMaxBinding = -1; // see above
retVal.atomicCounterBufferMaxSize = 0;
retVal.numAtomicCounterBuffers = 0;
retVal.numAtomicCounters = 0;
- retVal.maxImageBinding = 0;
+ retVal.maxImageBinding = -1; // see above
retVal.numCombinedImages = 0;
retVal.numCombinedOutputResources = 0;
retVal.numXFBInterleavedComponents = 0;
retVal.numXFBSeparateAttribs = 0;
retVal.numXFBSeparateComponents = 0;
+ retVal.fragmentOutputMaxBinding = -1; // see above
for (int shaderNdx = 0; shaderNdx < (int)program->getShaders().size(); ++shaderNdx)
{
@@ -1372,8 +1402,12 @@ ProgramInterfaceDefinition::ProgramResourceUsage getCombinedProgramResourceUsage
retVal.numCombinedOutputResources += getNumTypeInstances(shader, glu::STORAGE_UNIFORM, glu::isDataTypeImage);
retVal.numCombinedOutputResources += getNumShaderBlocks(shader, glu::STORAGE_BUFFER);
+
if (shader->getType() == glu::SHADERTYPE_FRAGMENT)
+ {
retVal.numCombinedOutputResources += getNumVectors(shader, glu::STORAGE_OUT);
+ retVal.fragmentOutputMaxBinding = de::max(retVal.fragmentOutputMaxBinding, getFragmentOutputMaxLocation(shader));
+ }
}
if (program->getTransformFeedbackMode() == GL_INTERLEAVED_ATTRIBS)
diff --git a/modules/gles31/functional/es31fProgramInterfaceDefinitionUtil.hpp b/modules/gles31/functional/es31fProgramInterfaceDefinitionUtil.hpp
index 0117013..ac24fce 100644
--- a/modules/gles31/functional/es31fProgramInterfaceDefinitionUtil.hpp
+++ b/modules/gles31/functional/es31fProgramInterfaceDefinitionUtil.hpp
@@ -147,6 +147,7 @@ struct ProgramResourceUsage
int numXFBInterleavedComponents;
int numXFBSeparateAttribs;
int numXFBSeparateComponents;
+ int fragmentOutputMaxBinding;
};
} // ProgramInterfaceDefinition
diff --git a/modules/gles31/functional/es31fProgramInterfaceQueryTestCase.cpp b/modules/gles31/functional/es31fProgramInterfaceQueryTestCase.cpp
index 728d13a..a8a86e9 100644
--- a/modules/gles31/functional/es31fProgramInterfaceQueryTestCase.cpp
+++ b/modules/gles31/functional/es31fProgramInterfaceQueryTestCase.cpp
@@ -2117,7 +2117,7 @@ static bool checkProgramCombinedResourceUsage (const ProgramInterfaceDefinition:
{ GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE, usage.atomicCounterBufferMaxSize },
{ GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS, usage.numAtomicCounterBuffers },
{ GL_MAX_COMBINED_ATOMIC_COUNTERS, usage.numAtomicCounters },
- { GL_MAX_IMAGE_UNITS, usage.maxImageBinding },
+ { GL_MAX_IMAGE_UNITS, usage.maxImageBinding+1 },
{ GL_MAX_COMBINED_IMAGE_UNIFORMS, usage.numCombinedImages },
{ GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, usage.shaderStorageBufferMaxBinding+1 },
{ GL_MAX_SHADER_STORAGE_BLOCK_SIZE, usage.shaderStorageBufferMaxSize },
@@ -2125,6 +2125,7 @@ static bool checkProgramCombinedResourceUsage (const ProgramInterfaceDefinition:
{ GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, usage.numXFBInterleavedComponents },
{ GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, usage.numXFBSeparateAttribs },
{ GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, usage.numXFBSeparateComponents },
+ { GL_MAX_DRAW_BUFFERS, usage.fragmentOutputMaxBinding+1 },
};
bool allOk = true;
diff --git a/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp b/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp
index cf22cb1..1df5f89 100644
--- a/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp
+++ b/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp
@@ -4839,7 +4839,7 @@ static void generateProgramOutputLocationBlockContents (Context& context, const
}
// .var_array_explicit_location
{
- const ResourceDefinition::Node::SharedPtr layout (new ResourceDefinition::LayoutQualifier(output, glu::Layout(2)));
+ const ResourceDefinition::Node::SharedPtr layout (new ResourceDefinition::LayoutQualifier(output, glu::Layout(1)));
const ResourceDefinition::Node::SharedPtr arrayElem (new ResourceDefinition::ArrayElement(layout));
const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
targetGroup->addChild(new ResourceTestCase(context, variable, ProgramResourceQueryTestTarget(PROGRAMINTERFACE_PROGRAM_OUTPUT, PROGRAMRESOURCEPROP_LOCATION), "var_array_explicit_location"));
diff --git a/modules/gles31/functional/es31fShaderImageLoadStoreTests.cpp b/modules/gles31/functional/es31fShaderImageLoadStoreTests.cpp
index ea23ab2..f993654 100644
--- a/modules/gles31/functional/es31fShaderImageLoadStoreTests.cpp
+++ b/modules/gles31/functional/es31fShaderImageLoadStoreTests.cpp
@@ -2874,10 +2874,21 @@ public:
TESTTYPE_LAST
};
- EarlyFragmentTestsCase (Context& context, const char* name, const char* description, TestType type, bool useEarlyTests)
+ enum RenderTargetType
+ {
+ RENDERTARGET_DEFAULT = 0,
+ RENDERTARGET_FBO,
+ RENDERTARGET_FBO_WITHOUT_TEST_ATTACHMENT,
+
+ RENDERTARGET_LAST
+ };
+
+
+ EarlyFragmentTestsCase (Context& context, const char* name, const char* description, TestType type, bool useEarlyTests, RenderTargetType renderTarget)
: TestCase (context, name, description)
, m_type (type)
, m_useEarlyTests (useEarlyTests)
+ , m_renderTarget (renderTarget)
{
}
@@ -2889,33 +2900,53 @@ public:
if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_image_atomic"))
throw tcu::NotSupportedError("Test requires OES_shader_image_atomic extension");
- if (m_context.getRenderTarget().getWidth() < RENDER_SIZE || m_context.getRenderTarget().getHeight() < RENDER_SIZE)
+ if (m_type == TESTTYPE_DEPTH &&
+ m_renderTarget == RENDERTARGET_DEFAULT &&
+ m_context.getRenderTarget().getDepthBits() == 0)
+ {
+ throw tcu::NotSupportedError("Test requires depth buffer");
+ }
+
+ if (m_type == TESTTYPE_STENCIL &&
+ m_renderTarget == RENDERTARGET_DEFAULT &&
+ m_context.getRenderTarget().getStencilBits() == 0)
+ {
+ throw tcu::NotSupportedError("Test requires stencil buffer");
+ }
+
+ if (m_renderTarget == RENDERTARGET_DEFAULT &&
+ (m_context.getRenderTarget().getWidth() < RENDER_SIZE || m_context.getRenderTarget().getHeight() < RENDER_SIZE))
throw tcu::NotSupportedError("Render target must have at least " + toString(RENDER_SIZE) + " width and height");
}
IterateResult iterate (void);
private:
- static const int RENDER_SIZE;
+ static const int RENDER_SIZE;
- const TestType m_type;
- const bool m_useEarlyTests;
+ const TestType m_type;
+ const bool m_useEarlyTests;
+ const RenderTargetType m_renderTarget;
};
const int EarlyFragmentTestsCase::RENDER_SIZE = 32;
EarlyFragmentTestsCase::IterateResult EarlyFragmentTestsCase::iterate (void)
{
- const RenderContext& renderCtx = m_context.getRenderContext();
- TestLog& log (m_testCtx.getLog());
- glu::CallLogWrapper glLog (renderCtx.getFunctions(), log);
- de::Random rnd (deStringHash(getName()));
- const int viewportWidth = RENDER_SIZE;
- const int viewportHeight = RENDER_SIZE;
- const int viewportX = rnd.getInt(0, renderCtx.getRenderTarget().getWidth() - viewportWidth);
- const int viewportY = rnd.getInt(0, renderCtx.getRenderTarget().getHeight() - viewportHeight);
- const IVec3 imageSize = defaultImageSize(TEXTURETYPE_2D);
- const glu::Texture texture (renderCtx);
+ const RenderContext& renderCtx = m_context.getRenderContext();
+ TestLog& log (m_testCtx.getLog());
+ glu::CallLogWrapper glLog (renderCtx.getFunctions(), log);
+ de::Random rnd (deStringHash(getName()));
+ const bool expectPartialResult = m_useEarlyTests && m_renderTarget != RENDERTARGET_FBO_WITHOUT_TEST_ATTACHMENT;
+ const int viewportWidth = RENDER_SIZE;
+ const int viewportHeight = RENDER_SIZE;
+ const int viewportX = (m_renderTarget == RENDERTARGET_DEFAULT) ? (rnd.getInt(0, renderCtx.getRenderTarget().getWidth() - viewportWidth)) : (0);
+ const int viewportY = (m_renderTarget == RENDERTARGET_DEFAULT) ? (rnd.getInt(0, renderCtx.getRenderTarget().getHeight() - viewportHeight)) : (0);
+ const IVec3 imageSize = defaultImageSize(TEXTURETYPE_2D);
+ const glu::Texture texture (renderCtx);
+ de::MovePtr<glu::Framebuffer> fbo;
+ de::MovePtr<glu::Renderbuffer> colorAttachment;
+ de::MovePtr<glu::Renderbuffer> testAttachment;
glLog.enableLogging(true);
@@ -2934,6 +2965,46 @@ EarlyFragmentTestsCase::IterateResult EarlyFragmentTestsCase::iterate (void)
glLog.glBindImageTexture(0, *texture, 0, GL_TRUE, 0, GL_READ_WRITE, GL_R32UI);
GLU_EXPECT_NO_ERROR(renderCtx.getFunctions().getError(), "glBindImageTexture");
+ // Set up framebuffer
+ if (m_renderTarget == RENDERTARGET_FBO ||
+ m_renderTarget == RENDERTARGET_FBO_WITHOUT_TEST_ATTACHMENT)
+ {
+ fbo = de::MovePtr<glu::Framebuffer>(new glu::Framebuffer(renderCtx));
+ colorAttachment = de::MovePtr<glu::Renderbuffer>(new glu::Renderbuffer(renderCtx));
+ testAttachment = de::MovePtr<glu::Renderbuffer>(new glu::Renderbuffer(renderCtx));
+
+ glLog.glBindRenderbuffer(GL_RENDERBUFFER, **colorAttachment);
+ glLog.glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, RENDER_SIZE, RENDER_SIZE);
+ GLU_EXPECT_NO_ERROR(renderCtx.getFunctions().getError(), "gen color attachment rb");
+
+ glLog.glBindFramebuffer(GL_FRAMEBUFFER, **fbo);
+ glLog.glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, **colorAttachment);
+ GLU_EXPECT_NO_ERROR(renderCtx.getFunctions().getError(), "set fbo color attachment");
+
+ if (m_renderTarget == RENDERTARGET_FBO && m_type == TESTTYPE_DEPTH)
+ {
+ glLog.glBindRenderbuffer(GL_RENDERBUFFER, **testAttachment);
+ glLog.glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, RENDER_SIZE, RENDER_SIZE);
+ GLU_EXPECT_NO_ERROR(renderCtx.getFunctions().getError(), "gen depth attachment rb");
+
+ glLog.glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, **testAttachment);
+ GLU_EXPECT_NO_ERROR(renderCtx.getFunctions().getError(), "set fbo depth attachment");
+ }
+ else if (m_renderTarget == RENDERTARGET_FBO && m_type == TESTTYPE_STENCIL)
+ {
+ glLog.glBindRenderbuffer(GL_RENDERBUFFER, **testAttachment);
+ glLog.glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, RENDER_SIZE, RENDER_SIZE);
+ GLU_EXPECT_NO_ERROR(renderCtx.getFunctions().getError(), "gen stencil attachment rb");
+
+ glLog.glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, **testAttachment);
+ GLU_EXPECT_NO_ERROR(renderCtx.getFunctions().getError(), "set fbo stencil attachment");
+ }
+
+ glLog.glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, **colorAttachment);
+ GLU_EXPECT_NO_ERROR(renderCtx.getFunctions().getError(), "setup fbo");
+ TCU_CHECK(glLog.glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);
+ }
+
// Set up appropriate conditions for the test.
glLog.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
@@ -3040,8 +3111,8 @@ EarlyFragmentTestsCase::IterateResult EarlyFragmentTestsCase::iterate (void)
// Read counter value and check.
{
const int numSamples = de::max(1, renderCtx.getRenderTarget().getNumSamples());
- const int expectedCounter = m_useEarlyTests ? viewportWidth*viewportHeight/2 : viewportWidth*viewportHeight;
- const int tolerance = m_useEarlyTests ? de::max(viewportWidth, viewportHeight)*3 : 0;
+ const int expectedCounter = expectPartialResult ? viewportWidth*viewportHeight/2 : viewportWidth*viewportHeight;
+ const int tolerance = expectPartialResult ? de::max(viewportWidth, viewportHeight)*3 : 0;
const int expectedMin = de::max(0, expectedCounter - tolerance);
const int expectedMax = (expectedCounter + tolerance) * numSamples;
@@ -3252,25 +3323,31 @@ void ShaderImageLoadStoreTests::init (void)
TestCaseGroup* const earlyTestsGroup = new TestCaseGroup(m_context, "early_fragment_tests", "");
addChild(earlyTestsGroup);
+ for (int testRenderTargetI = 0; testRenderTargetI < EarlyFragmentTestsCase::RENDERTARGET_LAST; testRenderTargetI++)
for (int useEarlyTestsI = 0; useEarlyTestsI <= 1; useEarlyTestsI++)
+ for (int testTypeI = 0; testTypeI < EarlyFragmentTestsCase::TESTTYPE_LAST; testTypeI++)
{
- const bool useEarlyTests = useEarlyTestsI != 0;
+ const EarlyFragmentTestsCase::RenderTargetType targetType = (EarlyFragmentTestsCase::RenderTargetType)testRenderTargetI;
+ const bool useEarlyTests = useEarlyTestsI != 0;
+ const EarlyFragmentTestsCase::TestType testType = (EarlyFragmentTestsCase::TestType)testTypeI;
- for (int testTypeI = 0; testTypeI < EarlyFragmentTestsCase::TESTTYPE_LAST; testTypeI++)
- {
- const EarlyFragmentTestsCase::TestType testType = (EarlyFragmentTestsCase::TestType)testTypeI;
+ const string testTypeName = testType == EarlyFragmentTestsCase::TESTTYPE_DEPTH ? "depth"
+ : testType == EarlyFragmentTestsCase::TESTTYPE_STENCIL ? "stencil"
+ : DE_NULL;
- const string testTypeName = testType == EarlyFragmentTestsCase::TESTTYPE_DEPTH ? "depth"
- : testType == EarlyFragmentTestsCase::TESTTYPE_STENCIL ? "stencil"
- : DE_NULL;
+ const string targetName = targetType == EarlyFragmentTestsCase::RENDERTARGET_FBO ? (std::string("_fbo"))
+ : targetType == EarlyFragmentTestsCase::RENDERTARGET_FBO_WITHOUT_TEST_ATTACHMENT ? (std::string("_fbo_with_no_") + testTypeName)
+ : std::string("");
- const string caseName = string(useEarlyTests ? "" : "no_") + "early_fragment_tests_" + testTypeName;
+ const string caseName = string(useEarlyTests ? "" : "no_") + "early_fragment_tests_" + testTypeName + targetName;
- const string caseDesc = string(useEarlyTests ? "Specify" : "Don't specify")
- + " early_fragment_tests, target the " + testTypeName + " test";
+ const string caseDesc = string(useEarlyTests ? "Specify" : "Don't specify")
+ + " early_fragment_tests, use the " + testTypeName + " test"
+ + ((targetType == EarlyFragmentTestsCase::RENDERTARGET_FBO) ? (", render to fbo")
+ : (targetType == EarlyFragmentTestsCase::RENDERTARGET_FBO_WITHOUT_TEST_ATTACHMENT) ? (", render to fbo without relevant buffer")
+ : (""));
- earlyTestsGroup->addChild(new EarlyFragmentTestsCase(m_context, caseName.c_str(), caseDesc.c_str(), testType, useEarlyTests));
- }
+ earlyTestsGroup->addChild(new EarlyFragmentTestsCase(m_context, caseName.c_str(), caseDesc.c_str(), testType, useEarlyTests, targetType));
}
}
}
diff --git a/modules/glshared/glsFboCompletenessTests.cpp b/modules/glshared/glsFboCompletenessTests.cpp
index 498f1fd..80d5e6c 100644
--- a/modules/glshared/glsFboCompletenessTests.cpp
+++ b/modules/glshared/glsFboCompletenessTests.cpp
@@ -175,12 +175,22 @@ static const FormatKey s_extSrgbRboFormats[] =
GL_SRGB8_ALPHA8,
};
-static const FormatKey s_extSrgbTexFormats[] =
+static const FormatKey s_extSrgbRenderableTexFormats[] =
{
- GLS_UNSIZED_FORMATKEY(GL_SRGB, GL_UNSIGNED_BYTE),
GLS_UNSIZED_FORMATKEY(GL_SRGB_ALPHA, GL_UNSIGNED_BYTE),
};
+static const FormatKey s_extSrgbNonRenderableTexFormats[] =
+{
+ GLS_UNSIZED_FORMATKEY(GL_SRGB, GL_UNSIGNED_BYTE),
+ GL_SRGB8,
+};
+
+static const FormatKey s_nvSrgbFormatsFormats[] =
+{
+ GL_SRGB8,
+};
+
static const FormatKey s_oesRgb8Rgba8TexFormats[] =
{
GLS_UNSIZED_FORMATKEY(GL_RGB, GL_UNSIGNED_BYTE),
@@ -282,13 +292,23 @@ static const FormatExtEntry s_esExtFormats[] =
{
"GL_EXT_sRGB",
COLOR_RENDERABLE | TEXTURE_VALID,
- GLS_ARRAY_RANGE(s_extSrgbTexFormats)
+ GLS_ARRAY_RANGE(s_extSrgbRenderableTexFormats)
+ },
+ {
+ "GL_EXT_sRGB",
+ TEXTURE_VALID,
+ GLS_ARRAY_RANGE(s_extSrgbNonRenderableTexFormats)
},
{
"GL_EXT_sRGB",
REQUIRED_RENDERABLE | COLOR_RENDERABLE | RENDERBUFFER_VALID,
GLS_ARRAY_RANGE(s_extSrgbRboFormats)
},
+ {
+ "GL_NV_sRGB_formats",
+ REQUIRED_RENDERABLE | COLOR_RENDERABLE | TEXTURE_VALID | RENDERBUFFER_VALID,
+ GLS_ARRAY_RANGE(s_nvSrgbFormatsFormats)
+ },
// In Khronos bug 7333 discussion, the consensus is that these texture
// formats, at least, should be color-renderable. Still, that cannot be
#
##
# diffing platform/frameworks/av
##
#
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index e443476..71a6a73 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -4660,7 +4660,11 @@ void AudioFlinger::DuplicatingThread::threadLoop_mix()
if (outputsReady(outputTracks)) {
mAudioMixer->process(AudioBufferProvider::kInvalidPTS);
} else {
- memset(mSinkBuffer, 0, mSinkBufferSize);
+ if (mMixerBufferValid) {
+ memset(mMixerBuffer, 0, mMixerBufferSize);
+ } else {
+ memset(mSinkBuffer, 0, mSinkBufferSize);
+ }
}
sleepTime = 0;
writeFrames = mNormalFrameCount;
#
##
# logging platform/build
##
#
commit 14bb1521d72eb543c81aa65d55b0504070959c4d
Author: The Android Automerger <[email protected]>
Date: Mon Nov 10 11:06:55 2014 -0800
"LRX21T"
commit 3676c2f1de679e753bb7e5fe28e359c6782df880
Author: The Android Automerger <[email protected]>
Date: Fri Nov 7 17:40:50 2014 -0800
"LRX21S"
commit 4b41e8db14b9049faa9ce189b73b7a5eeb3b6f4b
Author: The Android Automerger <[email protected]>
Date: Fri Nov 7 13:56:45 2014 -0800
"LRX21R"
#
##
# logging platform/cts
##
#
commit c472edb4b7573a45df97395cb3150c363672d9dc
Author: Unsuk Jung <[email protected]>
Date: Fri Nov 7 21:38:09 2014 +0000
Revert "CTS Verifier: hide AID prefix reader test if no support"
This reverts commit 965de72e268037b53930215c8413c912a921265e.
Change-Id: Ifd9ba30820c4b9c23300b3dff60e12ac2d541262
commit c1f2e70ea4c8d0d4f58067c45549c52fc5d68caf
Author: Unsuk Jung <[email protected]>
Date: Fri Nov 7 09:30:14 2014 -0800
Bump CTS verifier to 5.0_r1
Critical issues on CTS verifier resolved
BUg: 17927282
Change-Id: I112c68218a1c9647765fd2a981d7208b43a71840
commit 4c70656e3ed3363fa5836a631ee1749535eac7fd
Author: Unsuk Jung <[email protected]>
Date: Fri Nov 7 09:16:17 2014 -0800
CTS Verifier: hide AID prefix reader test if no support
The reader side of the AID prefix test works also on devices
without AID prefix registration support. However to some
it seems confusing as this makes them look for the emulator
side tests.
Hence removing also the test on the reader side when the
device denies the capability via supportsAidPrefixRegistration()
Bug: 18147492
Change-Id: I0da2ebd56045104d46b363c43b1d2397b472fb99
commit fcd236f1b2efc6c7cdd4323dbcd89590d4c15bf7
Author: Unsuk Jung <[email protected]>
Date: Fri Nov 7 09:09:53 2014 -0800
Hide sample test from the test list
For some people the Sample code was causing confusion, and
it was not that clear for them that the intent of the code
is to provide a sample for people writing the test
Bug: 18284123
Change-Id: I703f3ac4b019a7888abfee4618fc5a68c7addea9
commit 3594bd401570c4f7883aea0d9c9cdc23cd83b393
Author: Unsuk Jung <[email protected]>
Date: Fri Nov 7 08:57:41 2014 -0800
Cts Verifier: clarify item # projection scrolling list test
The list previously was from #0 to #49, whereas the test
asked the operator if 50 entries can be seen. This caused
some confusion to first time users - hence making a small
change to start the list number from #1
Bug: 18285916
Change-Id: I55462682f0d23b17d4a9daa1a14ebafb6abd48ee
commit 0a62e4a0a9910101ccf2ccc43f6d9203827638d8
Author: Unsuk Jung <[email protected]>
Date: Fri Nov 7 07:43:10 2014 -0800
CTSverifier BLE tests, feature flag added & test disabled
Added FEATURE_BLUETOOTH_LE as 'test_required_features', and
Disabled the test now as the quality of the test needs
improvement - as noted in the bugs
Bug: 18283088
Bug: 18282549
Change-Id: Id86950f15a77fb023b2e3e6adcbd90415eee10bd
commit 05175d1a5329c1f3cb858e26f86045c5603ba28e
Author: Unsuk Jung <[email protected]>
Date: Fri Nov 7 06:45:43 2014 -0800
Disable CTS verifier tests not relevant to televisions
Bug: 18288009 UI_MODE_TYPE_TV does not have notifications
Bug: 18283384 JobScheduler tests not yet ready or doesn't
make sense to run on televisions
Bug: 18283382 Televisions should support the intent partters
but might not have a full implementation of it
Bug: 18282390 Disable Location testing on TVs
Change-Id: I57917ca21f284637b3eceb156438569845205554
commit 61587dcf9a340e0d9ebae2f9c86fe13626fcd2f5
Author: Unsuk Jung <[email protected]>
Date: Fri Nov 7 04:22:56 2014 -0800
Run CTS verifier sensor tests only when there is a sensor
Add a new meta data attribute tests_applicable_features to
conditionally include tests when at least one of a list of
features are available.
Update sensor test to only show up when at least one of the
sensors being tested exists on the device
Bug: 18285373
Change-Id: I409d8605c6abc66d70d17afb36400e9d1ba2a813
commit 5c8df65cdbb062d8bf3b9983bb88bb92e08479d7
Author: Unsuk Jung <[email protected]>
Date: Thu Nov 6 23:16:42 2014 -0800
Clean up managed user tests
A) Hide the BYOD test cases, as now it would change the
state of the device (i.e. encrypt it).
B) Shorten the test instruction for the negative device
owner test
Bug: 17384646
Change-Id: I786ac6322bf80d60855810e41fa9180e9ac5e46c
commit 3bebadb7a85a65092dda987b1f54b37beaa7d7b2
Author: Unsuk Jung <[email protected]>
Date: Fri Nov 7 00:07:06 2014 -0800
Disable bluetooth toggle test for devices with leanback UX
Devices with leanback UX, often controlled via a remote,
typically connects to the device over a bluetooth or Wi-Fi
connection. Thus if bluetooth is disabled, the device might
loss it's control which makes it difficult to go to the next
step of the test - to enable bluetooth.
Bug: 18283388
Change-Id: Ic79cb754ec8947e798823422c650869e07bf0730
commit 9fbb75e83cf43ee1ce4a54712b66ef517d3723bf
Author: Unsuk Jung <[email protected]>
Date: Thu Nov 6 12:57:29 2014 -0800
Allow hidden features in L to not fail the features CTS verifier test
Following features was added as hidden
android.hardware.hdmi.cec
android.software.leanback_only
android.software.voice_recognizers
So while this is not meant to be used by 3rd-party apps, it could be declared by devices
Bug: 17579748
Change-Id: I0324ad8d59811a4569842fae712875176f71805c
commit ca51a018aa353ada8c1992dd2bc16128650ee5a4
Author: Nicholas Sauer <[email protected]>
Date: Wed Nov 5 20:10:21 2014 -0800
Fix derived plan.
-Remove all ABI based test filtering from TestPackageDef and TestPlan.
-TestPackageDef and TestPlan represent exactly what exists in the corresponding XML files
-All ABI filtering happens in CtsTest.
-Minor cleanup
Change-Id: If9bc2ef31d70409f01bb098f4a1642be490bcb4c
commit 4f07b55f996a7d0bdfec98686f6e7873aae0c5ec
Author: Michael Kwan <[email protected]>
Date: Tue Nov 4 16:11:35 2014 -0800
Added required features to location mode tests.
Change-Id: I23f63e6928f61b81e6dad9fa22f7b7c910879d04
(cherry picked from commit 120958630a9155b7bd965a9e6d4bdada5613c38c)
commit 3a64feec44fa3b977bb36265ca7d81dfb7a5b214
Author: Michael Kwan <[email protected]>
Date: Fri Oct 24 16:41:45 2014 -0700
Excluded irrelevant tests for Android Watch devices
Change-Id: I48391b62a6f993dea8d92f2c5fd5536da95cf817
(cherry picked from commit 1b67f6ee957cbda285b4e1f417e9e5e6ff9ca99c)
commit 6d60cec703af4f11dd322625ac450581d8e2a758
Author: Unsuk Jung <[email protected]>
Date: Tue Nov 4 16:59:14 2014 -0800
Add Features expected in Lolliop and Kitkat Watch platform versions
We're missing in CTS verifier a few newly added features in API level 20 and 21.
Also added a new hidden feature to the list so that it does not complain.
Also made faketouch optional, which should have been the case since Android 4.1
Bug: 17579748
Change-Id: I50c1a4cc227e5085b2cb8d193d3953ccc461da84
commit 35df9145261bc2a27306cda88c5a259bb674bd8e
Author: Junjie Hu <[email protected]>
Date: Fri Aug 29 11:20:28 2014 +0800
CTS Verifier:Fix timing issue for Ble Client Connect
Bug: 17449134
There's a timing issue to make the test case failure.
The pre-condition is:
1. First time to connect. (It means it never do pairing or it has been unpaired)
2. The GATT connection between the two phones is using BR/EDR and
using the the non-just work pairing approach.
(Sometime, it will popup a dialog to do pairing ...)
Scenario description:
1. Run the apk to let client to connect to server
2. Each side starts to pair (Due to use non-just work pairing approach)
3. Client side must pull the notification bar to focus the pairing dialog.
4. Both side click the yes button to pair.
5. The pass icon in the client side is not enabled.
Reason:
* Because the GATT connection callback is invoked when the client activity is paused,
the receiver is unregistered and lost the intent.
Solution:
* Move the registeration/unregisteration of the receiver
from onResume/onPause to onCreate/onDestroy
Note:
* Although MTK's BT stack changes the pairing approach to pass the CTS Verifier,
it's highly recommended to apply our patch to make the CTS Verifier to have better compatibility.
Change-Id: I462b268045dd7d84c989be62bb31f4adb1c5ae2e
Signed-off-by: Junjie Hu <[email protected]>
commit fa8bd10090e80c8f9a28ef552840135426742c17
Author: Unsuk Jung <[email protected]>
Date: Mon Nov 3 10:40:58 2014 -0800
Bump CTS tradefed version to 5.0_r1
All known issues resolved and ready for release, also cleaning up the sample code
Bug: 17927282
Change-Id: Ib4d4fcbb2af93de7f5668005102d88817ec62ce4
commit 35e4650ab27f60869c053fc568a4e47ff8817409
Author: Nicholas Sauer <[email protected]>
Date: Thu Oct 30 14:41:46 2014 -0700
Build and install the list of preqreqs by ABI.
Fix a bug where a test could be invoked with the incorrect prereqs.
Instead:
-prereqs are installed (and overwritten if needed) before
every test package invocation.
-as long as the abi doesn't change between test package invocations,
prereqs are not re-installed
-prereqs are only uninstalled after all tests are finished
bug:18176495
Change-Id: Ie19f6294d10b0c3484ef403c19f049eb71b6f050
commit 1054ec55c4d582a295faa6552973be5b497fa95d
Author: Unsuk Jung <[email protected]>
Date: Thu Oct 30 17:49:13 2014 -0700
Add DEQP3.0 tests to the sub-plans
Bug: 17481731
Change-Id: I0231f9e3e57acdc57241766562ec66227a6ec6c3
commit 41e3d15c674e026143840951f79a43b179e463cf
Author: Unsuk Jung <[email protected]>
Date: Thu Oct 30 16:43:15 2014 -0700
Add tests for UsageStats API to knownfailures.
The tests are not yet ready to be added to the offical test plan
bug: 17536113
Change-Id: I6bafcb47db3d00f4865495c97d7d0f177bd5a518
commit a80d87465cbd00e15711bb70632672acc7ff8a3e
Author: Unsuk Jung <[email protected]>
Date: Thu Oct 30 14:09:50 2014 -0700
Triage android.Jobscheduler tests
Add TimingConstraintsTest to the official suite,
and keep ConnectivityConstraintTest in knownfailures.txt
Bug: 18117279
Bug: 16407786
Change-Id: Iac329ac7fabe258cb39480f56f16d8ed7f144893
commit 274675fcb31ded0b3006dabdb950af89516a85df
Author: Zhijun He <[email protected]>
Date: Thu Oct 30 14:13:36 2014 -0700
Camera2: relax the sensitivity range max required value
Spec was updated from 1600 to 800, test also need to be updated.
Bug: 18189635
Change-Id: I3ee75d146756638237dc585ec264dc08a8e4f42c
commit 6aae6406e86bb15950c7619a884063f60d741422
Author: Nicholas Sauer <[email protected]>
Date: Thu Oct 23 15:36:49 2014 -0700
ABI Related bug fixes
-Fix continue-session.
-Fix add derivedplan regressions
-Fix CTS Error messages for missing abi packages for x86/arm combinations
bug:17926849
bug:18115716
Change-Id: Ib95da363dd153f157f3ca898155940792591a3ef
commit 1084ee5661d31f55637d04263ba52fb029e2b2e5
Author: Miao Wang <[email protected]>
Date: Mon Oct 27 14:32:40 2014 -0700
Set the max number of allowed errs to be 3. (fix bug in fugu)
bug 17765171
Change-Id: I6cb244f221397656f7ef61e85d8a57bd7cda2abc
(cherry picked from commit 452039d48569c7c69dfe77d552f6daa1e55994df)
commit 490ac2ccbe56ebff192d8612ac5cd4f936b1be3d
Author: Yicheng Fan <[email protected]>
Date: Mon Oct 27 11:26:28 2014 -0700
Auto-pass when device does not support multi-advertising.
Bug: 18108754
Change-Id: I7f9b97cef188d33b3d9bb6f210142fd0b9a0bc32
commit 1bcef59127147de30e80fddcfb23d23408e9afef
Author: Chien-Yu Chen <[email protected]>
Date: Tue Oct 28 10:42:51 2014 -0700
CtsVerifier: fix orientations in camera tests
Fix the jpeg orientation in the FOV calibration test and the video
orientation in the video test.
bug 17468230
Change-Id: If49f97f5e479c67c586c6ba3c61f5fa47bd370c3
commit e31e505414a104f9d6d4a9d17352f0eec6751d5b
Author: Chris Wren <[email protected]>
Date: Tue Oct 28 14:32:45 2014 -0400
Disable notification tests on watches and TVs.
These platforms lack the Notification Listener Settings UI,
so it is impossible to test them.
Bug: 18149810
Change-Id: Ifaa9925469a7fdf15e02ccd703ddfb904fc7b743
commit f7b6f2106f73a093ce80314cb41fb01124a99b16
Author: Chris Wren <[email protected]>
Date: Thu Oct 2 10:27:05 2014 -0400
Add a test for none-mode filtering.
Bug: 17639798
Change-Id: Ib1ea54b2d656fe17e6cc44b98bbfa92504d01b68
#
##
# logging device/lge/mako
##
#
commit 45039188f44fd045c91268673de5dd62e57c336f
Author: Ed Tam <[email protected]>
Date: Sat Nov 8 18:34:55 2014 -0800
Move wifi setup script from main to late_start
Bug: 17358965
Change-Id: Ia4d2d99228cdf4a253c6ce06db7b621c618634cb
#
##
# logging platform/external/deqp
##
#
commit 4218185275f0395d22356f64455d8c948b12971b
Author: Pyry Haulos <[email protected]>
Date: Wed Oct 29 16:20:31 2014 -0700
Remove highp vec4 dot case from mustpass by request from IHV
Change-Id: I9a102a5e43471ce1745350b0e5cfc831929367f1
commit 0d06eb44f0ba2fb20eeae302c22a5e11bc4ee756
Author: Jarkko Pöyry <[email protected]>
Date: Mon Oct 27 17:19:19 2014 -0700
Update test spec.
Change-Id: I045b445c0f0c9b524cdce6327826068581df8082
commit 5b31be714f69bf474cd4dd9b8404c21bd13ddc4b
Author: Jarkko Pöyry <[email protected]>
Date: Fri Oct 24 17:03:56 2014 -0700
Use invalid sample count in renderbuffer_storage_multisample negative case.
Bug; 18100655
Change-Id: I9bd0417c44f3531755ec2ba1cc06f8164df50661
commit 73dec1d3be45024305fff7c49be6a907f8662bed
Author: Jarkko Pöyry <[email protected]>
Date: Fri Oct 24 15:22:27 2014 -0700
Fix early fragment test tests on default fb without depth.
- Check default fb has relevant depth/stencil buffer
- Add cases with non-default framebuffer
- Add cases with non-default framebuffer without the
relevant stencil/depth test buffer attachment.
Bug: 18100454
Change-Id: Ie66ba9aacc9d0abc94c7664ed3f268970e185030
commit 9fc1be98832f0d4ca18dcbbde8157d0093f9729d
Author: Jarkko Pöyry <[email protected]>
Date: Fri Oct 24 14:37:41 2014 -0700
Fix framebuffer completeness tests with sRGB targets.
- Don't expect SRGB to become renderable in GL_EXT_sRGB extension
- Support GL_EXT_sRGB_write_control extension
- Support GL_NV_sRGB_formats extension
- Add missing GLES3 texture formats
- Remove modified cases from must-pass list
Bug: 18094134
Change-Id: I7587ff4a0e6106b74780dae193fa16970145a02e
commit 91b8eb8e723c58efa1e1c4e613863afe2873d8f6
Author: Jarkko Pöyry <[email protected]>
Date: Fri Oct 24 13:14:21 2014 -0700
Reduce and verify fragment output PIQ test draw buffer usage.
- Check GL_MAX_DRAW_BUFFERS implementation limit and usage if shader
build fails.
- Reduce required GL_MAX_DRAW_BUFFERS from 5 to 4 in explicit location
fragment output array tests.
- Fix various max binding resource usage checks.
Bug: 18094242
Change-Id: I17e091eb1939fd7ec94789be70be5a069970b697
commit 820dffe9aa48e311aecd1a63177d3cb0507d2e7e
Author: Pyry Haulos <[email protected]>
Date: Thu Oct 23 21:05:26 2014 -0700
Fix JNI usage issues in Android TestLogParser
* Android TestLogParser used CallObjectMethod() on Java methods returning
void, which causes CheckJNI to throw an error. Changed to use correct
CallVoidMethod().
* TestLogListener wrapper was not freeing local jstring references,
which given large parse buffer size could easily lead to ART local
reference table overflow. Fixed by freeing all local references as soon
as the objects are passed to the Java / VM side.
Change-Id: I19811be6fdc0f3d77bc7a0d99d243529031d3b08
commit b2eb255c1738da41752fafc8d54468eeecf2e838
Author: Pyry Haulos <[email protected]>
Date: Thu Oct 23 14:52:34 2014 -0700
Remove invalid assert from RenderActivity::setThread()
It is valid to call setThread() with null thread as part of activity
teardown, so the assert was invalid.
Change-Id: I0b3a89db1f5aff04c97def32b1881e0d66e5d250
commit fd4b05e914bfdf9210e1cc6ae102bb5bfd34ee5e
Author: Pyry Haulos <[email protected]>
Date: Thu Oct 23 13:58:13 2014 -0700
Add blend barrier after first opaque quad
Advanced blending tests were missing barrier between first opaque quad
and subsequent blended quads. This change adds BlendBarrier() call if
coherent blending is not enabled.
This change also adds fullscreen clear before rendering as framework
doesn't perform that in GLES31 module.
Bug: 18100652
Change-Id: Idd16f2fde543af885e97adf5b5c2123d7e803152
#
##
# logging platform/frameworks/av
##
#
commit 4aad836e6a9ca8769f6a61f3073ce7d4cd4dfff7
Author: Eric Laurent <[email protected]>
Date: Fri Nov 7 17:28:28 2014 -0800
audioflinger: fix duplicating thread output buffers clear
Also clear mix buffer in DuplicatingThread::threadLoop_mix()
instead of just sink buffer when output threads are not
ready.
Bug: 18262127.
Change-Id: I4c22bbeaccdcc8d7c10c5882dde3439eb73d6ede
(cherry picked from commit 02b5708776ba2a9b4ff8c09008483aef7dbe38c7)
#
##
# logging platform/build
##
#
14bb1521d72eb543c81aa65d55b0504070959c4d "LRX21T"
3676c2f1de679e753bb7e5fe28e359c6782df880 "LRX21S"
4b41e8db14b9049faa9ce189b73b7a5eeb3b6f4b "LRX21R"
#
##
# logging platform/cts
##
#
c472edb4b7573a45df97395cb3150c363672d9dc Revert "CTS Verifier: hide AID prefix reader test if no support"
c1f2e70ea4c8d0d4f58067c45549c52fc5d68caf Bump CTS verifier to 5.0_r1
4c70656e3ed3363fa5836a631ee1749535eac7fd CTS Verifier: hide AID prefix reader test if no support
fcd236f1b2efc6c7cdd4323dbcd89590d4c15bf7 Hide sample test from the test list
3594bd401570c4f7883aea0d9c9cdc23cd83b393 Cts Verifier: clarify item # projection scrolling list test
0a62e4a0a9910101ccf2ccc43f6d9203827638d8 CTSverifier BLE tests, feature flag added & test disabled
05175d1a5329c1f3cb858e26f86045c5603ba28e Disable CTS verifier tests not relevant to televisions
61587dcf9a340e0d9ebae2f9c86fe13626fcd2f5 Run CTS verifier sensor tests only when there is a sensor
5c8df65cdbb062d8bf3b9983bb88bb92e08479d7 Clean up managed user tests
3bebadb7a85a65092dda987b1f54b37beaa7d7b2 Disable bluetooth toggle test for devices with leanback UX
9fbb75e83cf43ee1ce4a54712b66ef517d3723bf Allow hidden features in L to not fail the features CTS verifier test
ca51a018aa353ada8c1992dd2bc16128650ee5a4 Fix derived plan.
4f07b55f996a7d0bdfec98686f6e7873aae0c5ec Added required features to location mode tests.
3a64feec44fa3b977bb36265ca7d81dfb7a5b214 Excluded irrelevant tests for Android Watch devices
6d60cec703af4f11dd322625ac450581d8e2a758 Add Features expected in Lolliop and Kitkat Watch platform versions
35df9145261bc2a27306cda88c5a259bb674bd8e CTS Verifier:Fix timing issue for Ble Client Connect
fa8bd10090e80c8f9a28ef552840135426742c17 Bump CTS tradefed version to 5.0_r1
35e4650ab27f60869c053fc568a4e47ff8817409 Build and install the list of preqreqs by ABI.
1054ec55c4d582a295faa6552973be5b497fa95d Add DEQP3.0 tests to the sub-plans
41e3d15c674e026143840951f79a43b179e463cf Add tests for UsageStats API to knownfailures.
a80d87465cbd00e15711bb70632672acc7ff8a3e Triage android.Jobscheduler tests
274675fcb31ded0b3006dabdb950af89516a85df Camera2: relax the sensitivity range max required value
6aae6406e86bb15950c7619a884063f60d741422 ABI Related bug fixes
1084ee5661d31f55637d04263ba52fb029e2b2e5 Set the max number of allowed errs to be 3. (fix bug in fugu)
490ac2ccbe56ebff192d8612ac5cd4f936b1be3d Auto-pass when device does not support multi-advertising.
1bcef59127147de30e80fddcfb23d23408e9afef CtsVerifier: fix orientations in camera tests
e31e505414a104f9d6d4a9d17352f0eec6751d5b Disable notification tests on watches and TVs.
f7b6f2106f73a093ce80314cb41fb01124a99b16 Add a test for none-mode filtering.
#
##
# logging device/lge/mako
##
#
45039188f44fd045c91268673de5dd62e57c336f Move wifi setup script from main to late_start
#
##
# logging platform/external/deqp
##
#
4218185275f0395d22356f64455d8c948b12971b Remove highp vec4 dot case from mustpass by request from IHV
0d06eb44f0ba2fb20eeae302c22a5e11bc4ee756 Update test spec.
5b31be714f69bf474cd4dd9b8404c21bd13ddc4b Use invalid sample count in renderbuffer_storage_multisample negative case.
73dec1d3be45024305fff7c49be6a907f8662bed Fix early fragment test tests on default fb without depth.
9fc1be98832f0d4ca18dcbbde8157d0093f9729d Fix framebuffer completeness tests with sRGB targets.
91b8eb8e723c58efa1e1c4e613863afe2873d8f6 Reduce and verify fragment output PIQ test draw buffer usage.
820dffe9aa48e311aecd1a63177d3cb0507d2e7e Fix JNI usage issues in Android TestLogParser
b2eb255c1738da41752fafc8d54468eeecf2e838 Remove invalid assert from RenderActivity::setThread()
fd4b05e914bfdf9210e1cc6ae102bb5bfd34ee5e Add blend barrier after first opaque quad
#
##
# logging platform/frameworks/av
##
#
4aad836e6a9ca8769f6a61f3073ce7d4cd4dfff7 audioflinger: fix duplicating thread output buffers clear
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment